支持向量机自己就是一个很大的一块,尤其是SMO算法,列出来也有满满几页纸的样子,虽然看过但是并不能完全看懂其中精髓。
所以本着学习的态度来对比的学习一下支持向量机
支持向量机
支持向量机基于训练集D的样本空间中找到一个划分超平面,将不同类别的样本分开。但是这样的划分超平面很多,我们应该选择对样本局部扰动容忍性好的超平面来作为分类的标准。
什么叫容忍性好的超平面就必须了解间隔这样一个定义
超平面可以表示为
法向量w决定了超平面的方向,而b为位移项,表示了超平面到原点的距离,训练集D中的样本到这个超平面的距离可以表示为
假设在超平面两侧分别,在的样本则称为支持向量,在这两个异类超平面的样本到超平面的距离和称为间隔。
这个间隔即为,为了提高分类超平面的容忍度,我们的目标就是在分类正确的情况下极大化
转换为了
进一步可以转换为,这步纯粹是为了后面的拉格朗日乘子计算解时比较好求解
这就是SVM的基本型
求解过程是一个凸二次规划,利用拉格朗日乘子法的对偶问题,函数最终变成
求解得到
带入L(w,b,a)中求解a值,最为我们得到的就是最优分类超平面
下面我们需要考虑到alpha值的求解,这里用SMO算法,之前的博客已经讲过了。求解alpha的值需要满足KKT条件。
alpha=0的样本不会对超平面的形成产生影响,而alpha>0的样本则是我们这里最重要的样本,位于最大间隔边界上,起着支持的作用。在训练完成后,大部分的训练样本都不会保留,最优分类超平面的形成只与支持向量有关系。
上面所有的推导都是在线性可分下进行的,间隔也是硬间隔,当线性不可分的时候一般有两种解决方案,一种是核映射,另外一种则是放宽要求,把硬间隔换成软间隔允许某些样本不满足约束。采用hinge损失,则我们的目标和约束条件则转换为
加入松弛变量
还是按照拉格朗日乘子法来计算,最终计算为
类似的也要满足KKT条件
分析一下在软间隔情况下,什么样的样本是支持向量,在样本的alpha值大于0时,则有
当样本的alpha小于C,则eps=0,则样本恰好落在最大间隔边界上,如果样本的alpha=C,则eps<=1,则样本落在最大间隔内部。如果样本的eps>1则说明该样本被错误的分类。
很多细节都没有讲到,网上有很多教程,感兴趣的可以看看