机器学习笔记——支持向量机(SVM)

支持向量机

除了之前讲的机器学习的方法,还有一种常用的方法叫做支持向量机。我们将logistic回归的假设函数以及代价函数稍加更改就可以得到支持向量机的模型

另外还有不同的是SVM的输出并不是一个概率值,而是0或1

大间隔

我们说SVM是一种大间隔算法,意思是我们进行分类的时候会选择所有样本点离分界线最远的界限。例如下图我们用SVM以后就会得到斜率约为-45°的线而不会收敛到近乎垂直的线

我们来看我们的代价函数,当C(C类似logistic回归中的正则化系数)特别大的时候如果我们想降低代价函数,那么当y=1时我们要让θTx不仅大于0,而且要大于1;当y=0时反之。

这种情况下相当于我们多了两个约束条件,而代价函数变成了后面正则化的项,此时这种算法就变成了大间隔算法。

当C很大的时候,算法对样本中的异常点非常敏感,可能导致收敛结果不令人满意。而我们可以通过减小C来忽略异常点

下面让我们来试着推导为什么之前的式子对应的就是大间隔分类算法,我们可以将θ写成向量的形式

θTx就相当于两个向量的点乘,我们可以写成如下的式子。我们可以看出为了要使得θ的模小,那我们应该保证样本点向量到θ的投影的值足够大,也就是所谓的样本点距分界边线的间距足够大

核函数

下面让我们利用SVM来构建非线性分类器,其中一个很重要的概念就是核函数(kernel)。当我们需要构造高次项来拟合决策边界时,我们应该怎么选择特征呢

我们有一个很好的方法就是选取向量空间的一些特定的向量,然后利用输入向量与基准向量的相似性来定义新的特征,这个相似性函数就是核函数

下面是核函数一些性质。下图的核函数叫做高斯核函数

下面是一个直观的例子让我们看到新的特征可以拟合出一个怎样的非线性边界

一般我们会选择样本点作为我们的基准向量

如果我们选择样本点作为特征向量的话,那么当样本数非常多的时候,算法训练过程将会很慢。我们一般将代价函数中正则化的部分写成向量的形式,原因是很多高阶函数库可以借此对SVM进行算法加速

偏差与方差

我们讲过C的作用与正则化系数的作用差不多,那么C选取的不同也会导致高偏差/高方差的问题,除此以为高斯核函数σ的选取也会导致该问题

应用

我们一般应用SVM的时候会用SVM的软件包,一般需要我们提供C、核函数等参数。核函数常用的有线性核(或者叫做无核)与高斯核。还需要注意的是当我们采用高斯核的时候需要注意特征缩放的问题

另外还有一些不常用的核函数可供我们使用

对于多元分类我们与之前所讲的处理方法类似,也就是进行多次二元分类

方法选取

我们对分类问题讲了这么多算法,那么我们应该如何选取这些算法呢?如果当特征数比较大,而样本数比较小的时候,我们没有这么多样本进行很多参数的训练,因此我们往往采用logistic回归或无核SVM的方法;如果特征数很小,样本数比较大时,我们会通过高斯核SVM的方法来将特征数变多来达到更好的拟合效果;如果如果特征数很小,样本数非常大时,此时若仍采用高斯核SVM算法训练过程将会非常缓慢,因此我们往往是人工给样本加入一些特征,之后应用logistic回归或无核SVM的方法。我们将logistic回归与无核SVM放在一起说的原因是实际上二者的算法过程非常类似,而得到的结果往往也是非常类似的。对于上述所有问题我们都可以采用神经网络的方法,如果能构建一个正确的网络,我们都能得到非常好的效果,但是弊端就是网络的训练过程会比较缓慢。另外SVM是一个凸优化问题,神经网络是非凸优化问题,因此SVM在这个方面也有更好的效果

猜你喜欢

转载自blog.csdn.net/shanwenkang/article/details/85066984