SVM

来源:互联网 发布:ug编程切削层怎么设置 编辑:程序博客网 时间:2024/06/15 14:06

支持向量机

支持向量机的学习方法包含由简单到困难的三种分类方法:

  • 线性可分支持向量机
  • 线性不可分支持向量机
  • 非线性支持向量机

线性可分支持向量机

假设给定一个特征空间上有训练数据集 T=(x1,y1),(x2,y2),...,(xn,yn),其中 y={+1,1},再假设样本数据点是线性可分的。

目标是找出一个(超)平面,wx+b=0,能将样本数据点分到不同的类中。

但是一般来说,存在无穷个超平面可以将两类数据正确地分开。但是线性可分支持向量机利用间隔最大化求最优分离超平面,同时,此解也是唯一的。

函数间隔与几何间隔

  • 一个点距离分离超平面的远近可以表示分类预测的确信程度,也就是说,点r到超平面的距离越远,我们就越确定r是一个分类正确的点。
    • 如果超平面 wx+b=0 已经确定,那么点r到超平面的距离就是 |wx+b|
  • 用点距离的符号和分类的符号相乘来表示预测是否正确
    • y(wx+b) 的符号来表示分类的是否正确

总的来说,我们可以使用 y(wx+b) 来表示分类的正确性和确信度,这就是函数间隔(functional margin)。

对于给定的训练集和超平面 wx+b=0,可以定义超平面 (w,b) 关于样本点 (xi,yi) 的函数间隔为:

γi^=yi(wxi+b)

那么超平面关于数据集T的函数间隔就是对T上所有样本数据点的函数间隔的最小值,即

γ^=mini=1,2,...Nγi^

同时,由于上式中的函数间隔会随着超平面的放缩而放缩,所以我们必须将其“标准化”,也就是对超平面的法向量加上约束,这里是L2范数。此时的函数间隔变成了几何间隔(geometric margin)。点A与超平面(w,b)的距离是一条线段:

γi=w||w||xi+b||w||

L2范数表示向量元素的绝对值的平方再开方,表示从原点出发到向量确定的点的欧式距离

如果分类正确,点 xi 到超平面(w,b)的距离是:

γi=yi(w||w||xi+b||w||)

而超平面对于训练数据的几何间隔为超平面(w,b)关于T中所有点的几何间隔的最小值。

间隔最大化

我们的目标就是找到好的超平面对样本数据点进行分割,所谓最好的定义就是:

  • 从函数间隔的角度看,就是最大化函数间隔,即最大化正确性和确信度
  • 从几何间隔的角度看,就是最大化样本数据点到超平面的距离

转换成数学语言,就是:

maxw,b γ
s.t.  yi(w||w||xi+b||w||)γ

  1. 首先,我们希望能最大化这个间隔,即最大化目标
  2. 其次,我们还必须限制这个间隔至少是 γ,即约束条件

转化一下表达:

maxw,b γ^||w||
s.t.  yi(wxi+b)γ^

由于在最优化问题中,函数的缩放对最优化并没有影响,所以为了今后的推导方便,我们对最优化目标进行缩放,同时为了简便计算,令γ^=1,于是上面的问题就变成了:

maxw,b 1||w||
s.t.  yi(wxi+b)1

为了便于后续的计算,继续进行简化:把最大化 1||w|| 的问题转换成最小化 12||w||2的问题,于是:

minw,b 12||w||2
s.t.  yi(wxi+b)10

这是一个带约束条件的最优化问题,我们可以和最大熵模型中一样使用拉格朗日对偶性来解决

拉格朗日对偶性

先将需要优化的目标函数转化为拉格朗日函数的形式:

L(w,α,β)=12||w||2i=1Nαiyi(wxi+b)+i=1Nαi

先求min的部分:分别对w和b求偏导并令偏导数等于0:

L(w,α,β)w=wi=1Nαiyixi=0

得出 w=i=1Nαiyixi

L(w,α,β)b=i=1Nαiyi=0

得出 i=1Nαiyi=0

将两个结果代入原函数中:

minw,bL(w,α,β)=12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi
s.t.  i=1Nαiyi=0    αi0

转化成对偶问题,即 minw,bL(w,α,β)α的极大:

maxα12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi
s.t.  i=1Nαiyi=0    αi0

距离分割超平面最近的数据点,也就是支持向量,总的来说,就是这些支持向量们决定了超平面的位置,其他离得远的点其实不起什么作用。换到上面数学公式中,也就是非支持向量的点的 α都是0


线性不可分支持向量机

之前的SVM设定的条件在现实环境中有可能会非常苛刻,那么我们可以做的就是稍微放松一下限定条件,从“硬”间隔转化到“软”间隔。原本有可能会有一些点是噪声,或者样本数据本来就是那个样子,如果去掉那些点就直接线性可分了,此时如果将限制条件放松,我们又有机会找到分割的超平面了。

软间隔最大化

从数学上讲,线性不可分意味着不能满足之前 yi(wxi+b)1 的约束条件,那么我们对每个样本点引入一个松弛变量 ξi0,那么目标函数就变成了:

12||w||2+Ci=1Nξi,其中,C是惩罚参数,C越大对错误分类的惩罚就越大,C越小惩罚也就越小。

延续之前的思路,只不过现在要最大化的是软间隔了:

minw,b,ξ 12||w||2+Ci=1Nξi
s.t.  yi(wxi+b)1ξi  ,  ξi0

拉格朗日对偶性

继续用拉格朗日对偶性来解决优化问题:

找出原始问题的对偶问题:

minw,b12i=1Nj=1Nαiαjyiyj(xixj)i=1Nαi
s.t.  i=1Nαiyi=0  ,  0αiC

转换成拉格朗日函数形式:

L(w,b,ξ,α,μ)=12||w||2+Ci=1Nξii=1Nαi(yi(wxi+b)1+ξi)i=1Nμiξi

还是先求极小问题,让L分别对w、b和ξ求偏导,并令偏导等于0

L(w,b,ξ,α,μ)w=wi=1Nαiyixi=0

得出 w=i=1Nαiyixi

L(w,α,β)b=i=1Nαiyi=0

得出 i=1Nαiyi=0

L(w,α,β)ξ=Cαiμi=0

得出 Cαiμi=0

minw,b,ξL(w,b,ξ,α,μ)α的极大,得到最终公式:

maxα12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi
s.t.  i=1Nαiyi=0,
αi0,
μi0,
Cαiμi=0


非线性支持向量机

如果我们遇到了更复杂的情况,比如无法用一条直线将数据点分割,这个时候我们就需要核技巧了。所谓核技巧就是通过一个转换函数将低维空间中的数据点映射到高维空间中去。然后我们就可以在高维空间中用直线(超平面)进行分割了。

核函数

我们可以用带核函数的内积去替换普通SVM中的内积,即用K(xi,xj)去替换原来普通的(xi,xj),此时对偶问题的目标函数就变成了:

maxα12i=1Nj=1NαiαjyiyjK(xixj)+i=1Nαi
s.t.  i=1Nαiyi=0    αi0

核函数的种类

在Python的机器学习包sklearn中,可以对SVM的核函数种类进行参数调整。

  • 当数据量足够大,feature足够多时,每种核的效果差不多
  • 当数据量不够大,feature很多时,用线性核
  • 当数据量一般,feature较少时,用非线性核
  • 当数据量足够大,feature较少时,用线性核可以节约时间

序列最小最优化算法

普通的求解α的方式在数据量变大的时候计算就很慢,导致整个SVM的算法无法使用,本节讲述的最小优化算法(sequential minimal optimization, SMO)来快速计算。

SMO的主要思想是把一个复杂的计算转化成多个简单的计算,总体下来大大节约了计算时间

先选择两个变量

假设选择了两个变量α1,α2,而固定其他变量αi(i=3,4,...N)。此时,目标函数可以写成:

minα1,α2   W(α1,α2)=12K11α21+12K22α22+y1y2K12α1α2(α1α2)+y1α1i=3NyiαiKi1+y2α2i=3NyiαiKi2
s.t.  α1y1+α2y2=i=3Nyiαi=β , 0αiC , i=1,2

接下来就是根据约束条件不断地更新两个α,我们称初始的α分别为αold1,αold2,更新后的两个α分别为αnew1,αnew2,由于有约束条件:α1y1+α2y2=i=3Nyiαi=β,所以有:

αold1y1+αold2y2=αnew1y1+αnew2y2=β

求解变量

由于同时求解αnew1,αnew2还是很难,那么我们就先求解αnew2,先假设αnew2的上下边界为L和H,即Lαnew2H。下面根据y的不同情况,我们需要分情况讨论:

  • 当两个y不是同一类时,即 y1y2 时,有 α1α2=β,结合所有的α都要满足0αiC的条件:

    • 那么当α1最小可为0,此时的α2就是β
    • α1最小它也是0,所以0也可以作为它的下限
    • 所以,由于不知道β是什么情况,α2的下限L为0或者β,取二者其中最大的那一个

    • α1最大可为C,那么此时的α2就是Cβ

    • 同时,α2最大可为C
    • 所以,α1的上限为C或者Cβ,取二者的较小值

同理:

  • 当两个y为同类的时候,即 y1=y2 时,有 α1+α2=β,同样可以得出L=max(0,βC)H=min(C,β)

把约束条件 αold1y1+αold2y2=αnew1y1+αnew2y2=β 两边同时乘以y1可得:

αold1y21+αold2y1y2=αnew1y21+αnew2y1y2=y1i=3Nyiαi=w

为了简便计算,可令后面的复杂式子为w,那么我们可以用α2来表示α1,即 α1=wy1y2α2

代入之前的目标函数:

ψ=12K11(wy1y2α2)2+12K22α22+y1y2K12(wy1y2α2)+y1(wy1y2α2)v1w+y1y2α2+y2α2v2α2+ψconstant

并对α2求偏导并且令其等于0:
ψα2=y1y2K11(wy1y2α2)+K22α2K12α2+y1y2K12(wy1y2α2)y2v1+y1y2+y2v21=0

化简后,代入得:

αnew,unc2(K11+K222K12)=αold2(K11+K222K12)+y2(μ1μ2+y2y1)

Ei=μiyi,表示预测值与真实值的差;η=(K11+K222K12),然后两边同时除以η,得出无约束条件下的α2

αnew,unc2=αold2+y2(E1E2)η

加上约束条件 0α2C,可以得到α2的上下边界:

αnew,unc2=Hαnew,unc2L

求出αnew2之后就可以接着求出αnew1

原创粉丝点击