机器学习十大算法之四:SVM(支持向量机)

SVM(支持向量机)

支持向量机(Support Vector Machine)是一种十分常见的分类器,曾经火爆十余年,分类能力强于NN,整体实力比肩LR与RF。核心思路是通过构造分割面将数据进行分离,寻找到一个超平面使样本分成两类,并且间隔最大。而我们求得的w就代表着我们需要寻找的超平面的系数 ,如下图:
机器学习十大算法之四:SVM(支持向量机)

一、超平面

1.超平面方程

一条直线方程, 其中m是斜率, c是直线在y轴的截距,它的直线方程可以表示:y=mx+c
二维空间里面, 一条直线的方程可以表示为: Ax+By+C=0
三维空间里面, 平面的方程可以表示为:Ax+By+Cz+D=0
依次推广, n维空间的超平面方程可以表示为: Ax1+Bx2+Cx3+Dx4+Ex5+Fx6+.+K=0
一般的对于n维空间的超平面的一般方程使用矩阵形式表示如下:

wTx=0

其中wx是向量, wTx是两个向量的点积。 向量w通常被称为权重。w,x皆为向量,wTx+b=0就是
a1x1+a2x2+anxn+b=0 对b做统一为x=1处理
因为n维空间对应的是n维坐标系, 仅仅用xyz几个字母较难表示, 所以此处用x1x2x3xn来表示n维坐标系, 各个维度的系数此处也可以用w1w2w3wn来表示;

2.求数据点到超平面方程距离

由超平面方程:wTx+b=0
那么对于这个平面上任意两个点xixj ,可以得到:

wTxi+b=0wTxj+b=0

把上面两个点做差,可以得到

wT(xjxj)=0

xjxj这两个点的差还是在这个平面上,所以可以得到wT是这个超平面的一个法向量,垂直于这个超平面。
对于空间中任意一个不属于这个超平面的点x1,它到这个超平面的距离要怎么得到呢?
参考下面点到平面的距离,只要找到法向量并投影就可以得到;
机器学习十大算法之四:SVM(支持向量机)
所以:我们可以连接点 x1 和点 xi,得到x1xi ,把它与超平面的法向量 w 做向量乘法,然后再除以法向量的长度,可以得到:
d=wT(x1xi)||w||wTxi+b=0d=wTx1+b||w||

这里我们没有考虑到式子的正负,因为距离都是正的,所以结合向量机本身的假设把y1乘上去,是的上面式子永远非负,我们就得到超平面关于特征空间中某点 x1的几何间隔:
d=y1wTx1+b||w||

因此,在支持向量机中,对线性方程wTx=0,样本点D到超平面的距离就有:

r=|wTx+b|||w||

所以:
(1)定义超平面(w,b)关于样本点(xi,yi)的几何间隔为:
γi=yi(w||w||xi+b||w||)

(2)定义超平面(w,b)关于训练数据集T的几何间隔为超平面(w,b)关于T中所有样本点(xi,yi)的几何间隔之最小值,即:
γ=mini=1,2,...,Nγi

二、离超平面最近的点距离超平面尽可能的远

支持向量机的最核心思想就是最大化分隔两个类的间隔,但这句话并不是很好理解。
这句话有点绕,分开三步看:
1.找到一个超平面,求出样本点到超平面的距离(上面的距离公式)
2.找到这些距离中最小的,这个最小的就是离超平面最近的点(这个只要把所有的点到平面的距离求出来就可以了)
3.使得超平面尽可能的距离这个最近的点尽量远

这个是主要疑问点,距离确定了怎么能又要求尽可能的远呢?这时候的距离不是一个定值么?其实这个可以看出一个动态的规划问题,我们假设超平面或者说支持平面是一个有n种可能函数,这n种可能都有对应的样本集D中点到n个超平面的距离的集合,我们就是从这n个超平面中选取一个能保证距离最近的点离超平面有最大值;

这样里面有涉及到一个约束问题:
1.取样本点对每一个超平面(wi,bi)的距离这个超平面来说最近的样本点距离γi,找出对每一个(wi,bi)来说最近的γi,min
2.保证γ是所有超平面中最小的最大值;就是找到γi,mini=1,2,3...n中的最大值;

从这两点出发就可以找到最符合要求的支持平面了;以上两点可以抽象成一个约束问题:

(1)max(γ^||w||)(2)s.t.yi(wTxi+b||w||)γ^||w||

为了便于优化推导,我们可以令 γ=1
(3)maxw,b(1||w||)(4)s.t.yi(wTxi+b)1

对于式子(3)而言最大化1||w||和最小化12||w||2是等价的(为了可导便于优化)可以变成如下:
(5)minw,b(12||w||2)(6)s.t.yi(wTxi+b)1

这个约束问题可以根据拉个朗日方法求得约束条件下的极值问题(拉个朗日乘子法会单独说明):

三、构建拉格朗日函数

通过拉格朗日乘子法,由5,6两式可以得到:

L(w,b,a)=12||w||2i=1nai(yi.(wT.Φ(xi)+b)1)

化简,将1提取出来得到:
(7)L(x,α,β)=12||w||2i=1Nαiyi(wTxi+b)+j=1Nαi

对式子7求极值可以通过求导法,在导函数为零时求得极值;
所以对式子求偏导可得:
δLδw=0 =>  w=i=1naiyixiδLδb=0 =>  0=i=1naiyi

将上面两个值带入到式(7)可以化简得到:
L(w,b,a)min(w,b)=12wTwwTi=1naiyixibi=1naiyi+i=1nai=i=1nai12(i=1naiyixi)Ti=1naiyixi=i=1nai12i=1,j=1naiajyiyjxixj

上面式子就是一个只关于α的函数方程;这个时候就是要求点到超平面要足够远的问题了(求确定w,b情况下最大间隔) ;
所以上面式子的求极值也可以转换成拉格朗日乘子法问题:就是求minw,bL(w,b,α)中(w,b)确定情况下对α变量求极大值;根据这个可以得到如下约束与函数关系:
maxai=1nai12i=1,j=1naiajyiyjxixjs.t.i=1naiyi=0ai0,i=1,2,...,N

上面的式子求极大值可以转换为下面的式子求极小值:
mina12i=1,j=1naiajyiyjxixji=1nais.t.i=1naiyi=0ai0,i=1,2,...,N

上面的对偶的式子所获得的解,能不能代表是原来式子的所需极值问题的解呢?这个可以根据广义拉格朗日的对偶问题证明:此时约束条件下求得的极值就是原来约束条件的极值。

最后:对于给定的样本点就可以通过上面的约束条件求得α,而通过α就可以根据(7)式子中求偏导得到的w,b和α关系求得对应的超平面。由这个可以得到,超平面是唯一的。

w=i=1naiyixib=yii=1naiyi(xiyi)

上面推导成立的两个隐藏条件是拉格朗日的对偶问题和KKT条件,那么这两个又是什么呢?
这个可以参考:真正理解拉格朗日乘子法和 KKT 条件

四、对线性不可分数据优化

对线性不可分数据需要修改上述的硬间隔最大化,使其软间隔最大化;
线性不可分意味着某些样本点(xi,yi)不能满足函数间隔大于等于1的约束条件,我们可以对每个样本点(xi,yi)引入一个松弛变量ξi0,使得函数间隔加上松弛变量大于等于1,这样约束条件变成:

yi(wTxi+b)1ξi

同时,为每个松弛变量ξi,补充一个代价ξi,目标函数由原来的12||w||2变成12||w||2+Ci=1Nξi
所以原来的求解问题可以变换为如下:
(91)minw,b(12||w||2+Ci=1Nξi)(92)s.t.yi(wTxi+b)1ξi(93)ξi0,i=1,2,...,N

为了解决个别正例和负例样本点很接近时,引入松弛因子
当C趋近于无穷大时,容忍度越低,分类越严格
当C趋近于很小时,意味着容忍度很高
对于引入松弛变量后的求解可以参见SVM的一般求解方法。

五、核函数的引入

在SVM中,其中最重要的也是最核心的就是核函数的选取和参数选择,当然这个需要大量的经验来支撑。SVM相对感知机而言,它可以解决线性不可分的问题,那么它是怎么解决的呢?它的解决思想很简单,就是对原始数据的维度变换,一般是扩维变换,使得原样本空间中的样本点线性不可分,但是在变维之后的空间中样本点是线性可分的,然后再变换后的高维空间中进行分类。
这个时候的对偶凸优化就表示为了:

maxai=1nai12i=1,j=1naiajyiyjΦ(xi)Φ(xj)s.t.i=1naiyi=0ai0,i=1,2,...,N

其中Φ(xi)表示原来的样本扩维后的坐标。
在求解对偶问题的过程中都会用到各样本点的内积的结果,那么这时候问题来了,在很多情况下,扩维可能会把原数据扩到很高维(甚至无穷维),这时候直接求内积是非常困难的,我们为了避免做这样的事就提出了核函数的概念。
核函数:任意两个样本点在扩维后的空间的内积,如果等于这两个样本点在原来空间经过一个函数后的输出,那么这个函数就叫核函数。

举个例子,假设所有样本点都是二维点,其值分别为(x,y),k(xi,xj)=<xi,xj>2 他对应的映射方式Φ((x,y))=(x2,2xy,y2)以验证任意两个扩维后的样本点在3维空间的内积等于原样本点在2维空间的函数输出:

<Φ(x1),Φ(x2)>=<(x12,2x1y1,y12),(x22,2x2y2,y22)>=x12x22+2x1x2y1y2+y12y22=(x1x2+y1y2)2=<v1,v2>2=K(v1,v2)

有了这个核函数,以后的高维内积都可以转化为低维的函数运算了,这里也就是只需要计算低维的内积,然后再平方。明显问题得到解决且复杂度降低极大。总而言之,核函数它本质上隐含了从低维到高维的映射,从而避免直接计算高维的内积。