支持向量机的基本原理(一)

来源:互联网 发布:远程linux电脑出租 编辑:程序博客网 时间:2024/05/23 18:18

相关内容
SMO算法求解支持向量机(二)
用SMO算法求解支持向量机(SVM)pythony源代码(三)
支持向量机是万能的分类器算法,简称SVM。一般来说他是二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。

一 理解SVM基本原理

1,SVM的基本概念

我们的目的是根据几何间隔计算“最大间隔”。

1.1 函数间隔

对任何一个数据点(x,y),|wT*x+b|能够表示点x到距离超平面wT*x+b=0的远近,而wT*x+b的符号与类标记y的符号是否一致可判断是否分类正确。所以,可用y(wT*x+b)的正负性判定或表示分类的正确性(为正才正确),引出了函数间隔(functional margin)的概念。定义函数间隔为:
这里写图片描述

而超平面所有样本点(xi,yi)的函数间隔最小值便为超平面关于训练数据集的函数间隔: mini (i=1,…n)
实际上,函数间隔就是几何上点到面的距离公式。
1.2 几何间隔

假定对于一个点 x ,令其垂直投影到超平面上的对应点为 x0 ,w 是垂直于超平面的一个向量,为样本x到分类间隔的距离,如下图所示:
这里写图片描述
数据点到超平面的几何间隔定义为:
这里写图片描述

而超平面所有样本点(xi,yi)的几何间隔最小值便为超平面关于训练数据集的函数间隔: min (i=1,…n)
几何间隔就是函数间隔除以||w||,可以理解成函数间隔的归一化。
1.3 定义最大间隔分类器Maximum Margin Classifier

前面已经提到,超平面离数据点的“间隔”越大,分类的确信度(confidence)也越大,为使分类的确信度尽量高,需要选择能最大化这个“间隔”值的超平面,而这个间隔就是最大间隔。
函数间隔不适合用来衡量最大化间隔值,因为超平面固定后通过等比例缩放w的长度和b的值可使任意大。但几何间隔除了,缩放w和b的时其值是不会改变的。所以几何间隔只随着超平面的变动而变动,最大间隔分类超平面中的“间隔”用几何间隔来衡量。于是最大间隔分类器(maximum margin classifier)的目标函数可以定义为:
(i=1,2,…,n)
这里写图片描述
根据前面分析过的,“使样本中离超平面最近的点到超平面的距离最远”,转化成数学表达式就变为条件:
这里写图片描述
根据前面的讨论:即使在超平面固定的情况下,的值也可以随着 ∥w∥的变化而变化。为了简化计算,不妨将 固定为1(实质上就相当于式子两边同除以,则有wT=wT‘=wT/,b=b’=b/),于是最大间隔分类器目标函数演化为为:
这里写图片描述

式中,s.t.是subject to的意思,它导出的是约束条件。
由于求的最大值相当于求(之所以这么转化是为了求解方便,系数1/2和平方都是后面为了利用导数求最值方便,并无实质上的含义)的最小值,所以上述目标函数等价于(w由分母变成分子,从而也有原来的max问题变为min问题,很明显,两者问题等价):
这里写图片描述

1.3 SVM优化的对偶问题

对于SVM,前面提到,其primal problem是以下形式:
这里写图片描述
同样的方法引入拉格朗日乘子,我们就可以得到以下拉格朗日函数:

这里写图片描述
然后对L(w, b, α)分别求w和b的极值。也就是L(w, b,α)对w和b的梯度为0:∂L/∂w=0和∂L/∂b=0,还需要满足α>=0(支持向量机的条件α>0)。求解这里导数为0的式子可以得到:
这里写图片描述
然后再代入拉格朗日函数后,就变成:

这里写图片描述
这个就是dual problem(如果我们知道α,我们就知道了w。反过来,如果我们知道w,也可以知道α)。这时候我们就变成了求对α的极大,即是关于对偶变量α的优化问题(没有了变量w,b,只有α)。当求解得到最优的α后,就可以同样代入到上面的公式,导出w和b*了,最终得出分离超平面和分类决策函数。也就是训练好了SVM。那来一个新的样本x后,就可以这样分类了:

这里写图片描述
在这里,其实很多的αi都是0,也就是说w只是一些少量样本的线性加权值。这种“稀疏”的表示实际上看成是KNN的数据压缩的版本。也就是说,以后新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0来判断正例还是负例。现在有了αi,我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的αi不为0,其他情况αi都是0。因此,我们只需求新来的样本和支持向量的内积,然后运算即可。这种写法为下面要提到的核函数(kernel)做了很好的铺垫。如下图所示:

这里写图片描述
1.4,容错松弛因子Outlier

我们之前讨论的情况都是建立在样本线性可分的假设上,在这种情况下可以找到近乎完美的超平面对两类样本进行分离。但如果遇到下面这两种情况呢?这时候就找不到一条直线来将他们分开了,那这时候怎么办呢?就因为他们的不完美改变我们原来完美的分界面会不会得不偿失呢?但又不得不考虑他们,那怎样才能折中呢?
这里写图片描述
对于上面说的这种偏离正常位置很远的数据点,我们称之为 outlier,它有可能是采集训练样本的时候的噪声,也有可能是某个标数据的大叔打瞌睡标错了,把正样本标成负样本了。那一般来说,如果我们直接忽略它,原来的分隔超平面还是挺好的,但是由于这个 outlier 的出现,导致分隔超平面不得不被挤歪了,同时 margin 也相应变小了。当然,更严重的情况是,如果出现右图的这种outlier,我们将无法构造出能将数据线性分开的超平面来。
为了处理这种情况,我们允许数据点在一定程度上偏离超平面。也就是允许一些点跑到H1和H2之间,也就是他们到分类面的间隔会小于1。如下图:
这里写图片描述
具体来说,原来的约束条件就变为:
这里写图片描述
这时候,我们在目标函数里面增加一个惩罚项,新的模型就变成(也称软间隔):

这里写图片描述
引入非负参数ξi后(称为松弛变量),就允许某些样本点的函数间隔小于1,即在最大间隔区间里面,或者函数间隔是负数,即样本点在对方的区域中。而放松限制条件后,我们需要重新调整目标函数,以对离群点进行处罚,目标函数后面加上的第二项就表示离群点越多,目标函数值越大,而我们要求的是尽可能小的目标函数值。这里的C是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。这时候,间隔也会很小。我们看到,目标函数控制了离群点的数目和程度,使大部分样本点仍然遵守限制条件。
这时候,经过同样的推导过程,我们的对偶优化问题变成:
这里写图片描述
此时,我们发现没有了参数ξi,与之前模型唯一不同在于αi又多了αi<=C的限制条件。需要提醒的是,b的求值公式也发生了改变,改变结果在SMO算法里面介绍。

文中部分文字图片参考了http://blog.csdn.net/suipingsp/article/details/41645779/
https://www.cnblogs.com/nolonely/p/6541527.html