时间有限,markdown编辑公式不熟悉,全当是自己理理svm的公式了
支持向量机
SVM出发点:
1 对于二维平面,给定平面上的任何一个直线:
y(x)=ωTϕ(x)+b
直线1 (1)
对于平面上的任何一点,与直线的关系为:要么在直线上,要么在直线外,在直线上就是
y(x)=0
对于不在直线上,代入直线要么
y(x)>0
,要么
y(x)<0
svm:对于平面上要分类的两类点(A类和B类,直线之上的定义为A类,类别标签为1,直线之下的定义为B类,标签定义为-1,标签用t表示),对于上面的直线,有
与直线1平行,且经过A类最近的点,有 y(x)≥0 ,我们归一化 ω,b 参数,使得 y(x)≥1
同理对于经过B类最近的点,有 y(x)≤0 ,我们归一化参数 ω,b ,使得 y(x)≤−1 ,
两边再乘以标签t,就得到一个统一的表达式:
(注意,虽然归一化到一个公式,但是实际上对应有两条直线,对应于A,B类离 y(x)=0 直线最近点所组成的平行于 y(x)=0 两条平行线)
SVM要做的就是,将平行线:
之间的距离最大化,对于两条直线上的点,这些点到直线 y(x)=0 的距离:
由上面可以知道对于直线 y(x) 乘以t以后,一定大于零,且不会带来值的缩放,那么就可以变成下面的式子:
由于(3),我们取边界点值的话就是=1,那么优化就变成了:
由于在简化优化等式的时候,加上的前提条件:
所有的数据点都满足式子8,只有边界点上的值会使得等号成立,我们一般希望用一个cost函数来进行优化,因此希望在一个优化式子中加入上面的约束,(7)是最小化,那么我们希望下面的式子也最小化:
上面这个式子实际上大于等于0,因此越大越好,可以转化成求最大值,因此乘以负号,这样就可以用一个最小化代价函数来表示,一般我们会对约束(有时这个式子也叫正则项)加上一个系数,这个系数的作用代表了影响力(这个系数大于等于0),最后的式子就是:
要求这个式子的最值,对于连续函数,最值在导数为0 的点,因此分别对参数求导:
得到下面的等式:
代入上面的式子,乘以负号,求该式子的最大值,就变成了上面等式的对偶问题,下面的最大化解即是上面的最小化解:
限制条件为:
这是一个多元二次函数的寻优问题,存在唯一解,求出来的w值,是公式11中的形式,将w代入1式
后,对任意的输入x,输出的y值为:
同时,有一下三个性质成立:
对于每个数据点,都对应于一个:
要么:
要么:
。任何使得17成立的数据点都不会出现在14求和式子中,因此对新数据的预测没有作用。剩下的数据点被称为支持向量,由这些向量,及向量系数支撑了分类器的边界。由于这些支持向量满足18,因此他们对应于特征空间中位于最大边缘超平面内的点。这个性质是支持向量机在实际应用中的核心。一旦模型被训练完毕,相当多的数据点都可以被抛弃,只有支持向量被保存下来。
现在还有阈值参数b没确定,由公式14和18我们可以得到:
m表示支持向量的集合,n表示我们任取的一个支持向量,虽然任取一个支持向量可以求到b,但是使用整个支持向量的集合求解b取均值更稳健,tn的平方为1,两边乘以tn,整理后:
这样求得a,b参数后,就可以对任意输入向量进行判别了
数据重合
不一定所有的数据都是线性可分的,对于非线性可分,有以下两种处理方式:
1 将数据投影到高维空间中,典型的二维数据不可分数据投影到三维中就有可能线性可分
2 添加松弛变量
实际使用时,更多的是上面二者的结合,即同时进行投影和添加松弛变量,理想的情况下,所有的数据点满足公式8:
但在这里,我们为每一个数据添加一个松弛变量,使得8式子变成:
这个松弛变量的意义就在于,当有些数据点不满足8式子时,即有可能小于1,甚至小于0时,我们通过调节对应数据的松弛变量,就可以使得8式子成立。这个松弛变量被限定为大于等于0,等于0的点是在边界或者边界内部的点,是正确分类的点,在0和1之间的是边界面到中间面之间的数据,也是属于分类正确的点,当大于1 的时候,就是属于分类错误的点:
图1
通过这种方式,允许一些数据点被错分,得到一个softmargin,虽然能够解决上面的无法求解的问题,但是会也会带来另一个问题,对异常点很敏感,因为误分类的惩罚随着松弛变量而线性增加。参考上面的最小化,我们这里的最小化变成:
参数C控制了松弛变量惩罚与边缘之间的折中,由于任何误分类的数据点松弛变量都大于1,那么
是误分类数据点 数量的上界,C就类似于正则化系数,控制了 最小训练误差和 模型复杂度之间的折中。当C趋于无穷大时,就变成了上面的线性可分的支持向量机,即 C越大,错分点越少,为什么?因为在具有 导向作用的loss函数中,C越大,整个loss中C对应的那个松弛变量累加和 所占比例越大,loss函数越关注C对应那个松弛变量,即整个求解函数中, 会重点,优化关注这个正则项,但是太大,也会带来一个问题,就是 过拟合,所以,C的选择要适中。
对应于10式子:
(10)
就变成
(24)
a和u是系数,也叫拉格朗日乘数,都大于等于0.对应的KKT条件:
(25)
同上面一样,我们对24式子对每个参数分别求偏导数:
使用这些结果代入24式,可以得到:
可以看到与线性可分的情况完全一样,唯一的区别,就是限制条件不一样,由于拉格朗日乘子大于0,即a,u大于0,那么由27中a = C -u:可知:
由于非支持向量的系数an为0,支持向量的an大于0,对于前面的KKT条件第三个式子可知,对于支持向量,必有:
如果a小于c,那么u大于0,由式子25最下面一个可以得到松弛变量必须为0,因此,对于满足
的支持向量有:
对于满足31添加的支持向量可以求b:
M表示满足31条件的数据集合
上面用到了参数C,对应的SVM叫C-SVM,还有还有另外对应的v-SVM,将C替换为v,然后修改式子28和对应的限制条件:
限制:
这种方法的优点是,v替代C,即可以被看成margin error的上界,也可以看作支持向量数量的下界。