【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)实质上就是不使用任何核函数:
若,预测
如果特征变量n很小而样本量m很大,此时可以选用高斯核函数(Gaussian kernel)去拟合一个更复杂的非线性边界。
高斯核函数(Gaussian kernel):
, where
如果选用高斯核函数,我们还需要选择.
如果使用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),以保证优化结果不会发散。
2. Multi-class Classification
SVM多分类问题的两种解决思路:
1、SVM包内置的多分类函数
2、一对多(one vs. all)
和logistic回归的多分类问题一样,,有。我们选择使最大的类别.
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的优化问题是凸优化问题,不用担心局部最优问题