【Machine Learning, Coursera】机器学习Week7 支持向量机的应用

SVMs in Practice


本节内容:
SVM的参数选择、SVM解决多分类问题、实践中logistic回归和SVM的选择

相关机器学习概念:
线性核函数(Linear kernel)


1. Using SVM Packages

有许多软件库可以实现SVM,Ng常用的是liblinear和libsvm

要使用现成的软件库,需要我们自己选择的有:
-参数C
-核函数(相似度函数)

如果特征变量n很大而样本量m很小,为了避免过拟合,可以选用线性核函数Llinear kernel)去拟合一个线性边界。
线性核函数(Linear kernel)实质上就是不使用任何核函数:
θTx=θ0+θ1x1+...+θnxn0\theta^T x=\theta_0+\theta_1x_1+...+\theta_nx_n ≥0,预测y=1y=1

如果特征变量n很小而样本量m很大,此时可以选用高斯核函数(Gaussian kernel)去拟合一个更复杂的非线性边界。
高斯核函数(Gaussian kernel):
fi=exp(xl(i)22σ2)f_i=exp(-\frac{‖ x-l^{(i)} ‖^2}{2\sigma^2}), where l(i)=x(i)l^{(i)}=x^{(i)}

如果选用高斯核函数,我们还需要选择σ\sigma.

如果使用Octave或者Matlab实现SVM,我们需要自己写出核函数的代码。以高斯核函数为例:

function sim = gaussianKernel(x1, x2, sigma)
% Note: x1 and x2 are column vectors
%   sim = gaussianKernel(x1, x2) returns a gaussian kernel between x1 and x2
%   and returns the value in sim

sim = exp(-(x1-x2)'*(x1-x2)/(2*sigma.^2));

end

NOTE: 使用高斯核函数之前要对特征变量进行归一化处理

线性核函数和高斯核函数是最常用的两种核函数,其他可能遇到的核函数包括:
多项式核函数(Polynomial kernel)
字符串核函数(String kernel),卡方核函数(Chi-square kernel),直方图交叉核函数(Histogram intersection kernel)

NOTE: 不是所有的相似度函数都是有效的核函数,它们必须满足摩塞尔定理(Mercer’s Theorem),以保证优化结果不会发散。

\quad

2. Multi-class Classification

SVM多分类问题的两种解决思路:
1、SVM包内置的多分类函数
2、一对多(one vs. all)
和logistic回归的多分类问题一样,y{1,2,3,...,K}y∈\{1,2,3,...,K\},有θ(1),θ(2),...,θ(K)\theta^{(1)},\theta^{(2)},...,\theta^{(K)}。我们选择使(θ(i))Tx(\theta^{(i)})^T x最大的类别ii.
【Machine Learning, Coursera】机器学习Week7 支持向量机的应用

3. Logistic Regression vs. SVMs

为了在有限的时间内得到最好的训练效果,建议:

如果n相对m而言很大,使用logistic回归或者不带核函数的SVM
如果n很小(如1~1,000),m大小适中(如10 ~ 50,000),使用高斯核函数的SVM
如果n很小,m很大(>50,000),人工选择更多的特征变量,使用logistic回归或者不带核函数的SVM

NOTE: 一个好的神经网络可能可以得到更好的训练效果,但训练一个神经网络的时间成本可能会更高

NOTE: SVM的优化问题是凸优化问题,不用担心局部最优问题