【机器学习】支持向量机原理之SMO算法原理

1. 回顾SVM优化目标函数

    我们首先回顾下我们的优化目标函数:

minα12i=1,j=1mαiαjyiyjK(xi,xj)i=1mαi min⏟α12∑i=1,j=1mαiαjyiyjK(xi,xj)−∑i=1mαi
s.t.i=1mαiyi=0 s.t.∑i=1mαiyi=0
0αiC 0≤αi≤C

    我们的解要满足的KKT条件的对偶互补条件为:

αi(yi(wTxi+b)1+ξi)=0 αi∗(yi(wTxi+b)−1+ξi∗)=0

    根据这个KKT条件的对偶互补条件,我们有:

αi=0yi(wϕ(xi)+b)1 αi∗=0⇒yi(w∗∙ϕ(xi)+b)≥1
0<αi<Cyi(wϕ(xi)+b)=1 0<αi∗<C⇒yi(w∗∙ϕ(xi)+b)=1
αi=Cyi(wϕ(xi)+b)1 αi∗=C⇒yi(w∗∙ϕ(xi)+b)≤1

     由于 w=j=1mαjyjϕ(xj) w∗=∑j=1mαj∗yjϕ(xj),我们令 g(x)=wϕ(x)+b=j=1mαjyjK(x,xj)+b g(x)=w∗∙ϕ(x)+b=∑j=1mαj∗yjK(x,xj)+b∗,则有:

αi=0yig(xi)1 αi∗=0⇒yig(xi)≥1
0<αi<Cyig(xi)=1 0<αi∗<C⇒yig(xi)=1
αi=Cyig(xi)1 αi∗=C⇒yig(xi)≤1

2. SMO算法的基本思想

    上面这个优化式子比较复杂,里面有m个变量组成的向量 α α需要在目标函数极小化的时候求出。直接优化时很难的。SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于 i=1mαiyi=0 ∑i=1mαiyi=0.假如将 α3,α4,...,αm α3,α4,...,αm 固定,那么 α1,α2 α1,α2之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。

    为了后面表示方便,我们定义 Kij=ϕ(xi)ϕ(xj) Kij=ϕ(xi)∙ϕ(xj)

    由于 α3,α4,...,αm α3,α4,...,αm都成了常量,所有的常量我们都从目标函数去除,这样我们上一节的目标优化函数变成下式:

minα1,α112K11α21+12K22α22+y1y2K12α1α2(α1+α2)+y1α1i=3myiαiKi1+y2α2i=3myiαiKi2 min⏟α1,α112K11α12+12K22α22+y1y2K12α1α2−(α1+α2)+y1α1∑i=3myiαiKi1+y2α2∑i=3myiαiKi2
s.t.α1y1+α2y2=i=3myiαi=ς s.t.α1y1+α2y2=−∑i=3myiαi=ς
0αiCi=1,2 0≤αi≤Ci=1,2

3. SMO算法目标函数的优化

    为了求解上面含有这两个变量的目标优化问题,我们首先分析约束条件,所有的 α1,α2 α1,α2都要满足约束条件,然后在约束条件下求最小。

    根据上面的约束条件 α1y1+α2y2=ς0αiCi=1,2 α1y1+α2y2=ς0≤αi≤Ci=1,2,又由于 y1,y2 y1,y2均只能取值1或者-1, 这样 α1,α2 α1,α2在[0,C]和[0,C]形成的盒子里面,并且两者的关系直线的斜率只能为1或者-1,也就是说 α1,α2 α1,α2的关系直线平行于[0,C]和[0,C]形成的盒子的对角线,如下图所示:

     由于 α1,α2 α1,α2的关系被限制在盒子里的一条线段上,所以两变量的优化问题实际上仅仅是一个变量的优化问题。不妨我们假设最终是 α2 α2的优化问题。由于我们采用的是启发式的迭代法,假设我们上一轮迭代得到的解是 αold1,αold2 α1old,α2old,假设沿着约束方向 α2 α2未经剪辑的解是 αnew,unc2 α2new,unc.本轮迭代完成后的解为 αnew1,αnew2 α1new,α2new

    由于 αnew2 α2new必须满足上图中的线段约束。假设L和H分别是上图中 αnew2 α2new所在的线段的边界。那么很显然我们有:

Lαnew2H L≤α2new≤H

    而对于L和H,我们也有限制条件如果是上面左图中的情况,则

L=max(0,αold2αold1)H=min(C,C+αold2αold1) L=max(0,α2old−α1old)H=min(C,C+α2old−α1old)

    如果是上面右图中的情况,我们有:

L=max(0,αold2+αold1C)H=min(C,αold2+αold1) L=max(0,α2old+α1old−C)H=min(C,α2old+α1old)

     也就是说,假如我们通过求导得到的 αnew,unc2 α2new,unc,则最终的 αnew2 α2new应该为:

αnew2=Hαnew,unc2Lαnew,unc2>HLαnew,unc2Hαnew,unc2<L α2new={Hα2new,unc>Hα2new,uncL≤α2new,unc≤HLα2new,unc<L
   

    那么如何求出 αnew,unc2 α2new,unc呢?很简单,我们只需要将目标函数对 α2 α2求偏导数即可。

    首先我们整理下我们的目标函数。

    为了简化叙述,我们令

Ei=g(xi)yi=j=1mαjyjK(xi,xj)+byi Ei=g(xi)−yi=∑j=1mαj∗yjK(xi,xj)+b−yi

    其中 g(x) g(x)就是我们在第一节里面的提到的

g(x)=wϕ(x)+b=j=1mαjyjK(x,xj)+b g(x)=w∗∙ϕ(x)+b=∑j=1mαj∗yjK(x,xj)+b∗

    我们令

vi=i=3myjαjK(xi,xj)=g(xi)i=12yjαjK(xi,xj)b vi=∑i=3myjαjK(xi,xj)=g(xi)−∑i=12yjαjK(xi,xj)−b

    这样我们的优化目标函数进一步简化为:

W(α1,α2)=12K11α21+12K22α22+y1y2K12α1α2(α1+α2)+y1α1v1+y2α2v2 W(α1,α2)=12K11α12+12K22α22+y1y2K12α1α2−(α1+α2)+y1α1v1+y2α2v2

    由于 α1y1+α2y2=ς α1y1+α2y2=ς,并且 y2i=1 yi2=1,可以得到 α1α2 α1用α2表达的式子为:

α1=y1(ςα2y2) α1=y1(ς−α2y2)

    将上式带入我们的目标优化函数,就可以消除 α1 α1,得到仅仅包含 α2 α2的式子。

W(α2)=12K11(ςα2y2)2+12K22α22+y2K12(ςα2y2)α2(α1+α2)+(ςα2y2)v1+y2α2v2 W(α2)=12K11(ς−α2y2)2+12K22α22+y2K12(ς−α2y2)α2−(α1+α2)+(ς−α2y2)v1+y2α2v2

    忙了半天,我们终于可以开始求 αnew,unc2 α2new,unc了,现在我们开始通过求偏导数来得到 αnew,unc2 α2new,unc

Wα2=K11α2+K22α22K12α2K11ςy2+K12ςy2+y1y21v1y2+y2v2=0 ∂W∂α2=K11α2+K22α2−2K12α2−K11ςy2+K12ςy2+y1y2−1−v1y2+y2v2=0

    整理上式有:

(K11+K222K12)α2=y2(y2y1+ςK11ςK12+v1v2) (K11+K22−2K12)α2=y2(y2−y1+ςK11−ςK12+v1−v2)

=y2(y2y1+ςK11ςK12+(g(x1)j=12yjαjK1jb)(g(x2)j=12yjαjK2jb)) =y2(y2−y1+ςK11−ςK12+(g(x1)−∑j=12yjαjK1j−b)−(g(x2)−∑j=12yjαjK2j−b))

    将 ς=α1y1+α2y2 ς=α1y1+α2y2带入上式,我们有:

(K11+K222K12)αnew,unc2=y2((K11+K222K12)αold2y2+y2y1+g(x1)g(x2)) (K11+K22−2K12)α2new,unc=y2((K11+K22−2K12)α2oldy2+y2−y1+g(x1)−g(x2))

=(K11+K222K12)αold2+y2(E1E2) =(K11+K22−2K12)α2old+y2(E1−E2)

    我们终于得到了 αnew,unc2 α2new,unc的表达式:

αnew,unc2=αold2+y2(E1E2)K11+K222K12) α2new,unc=α2old+y2(E1−E2)K11+K22−2K12)

    利用上面讲到的 αnew,unc2 α2new,unc αnew2 α2new的关系式,我们就可以得到我们新的 αnew2 α2new了。利用 αnew2 α2new αnew1 α1new的线性关系,我们也可以得到新的 αnew1 α1new

4. SMO算法两个变量的选择

    SMO算法需要选择合适的两个变量做迭代,其余的变量做常量来进行优化,那么怎么选择这两个变量呢?

4.1 第一个变量的选择

    SMO算法称选择第一个变量为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点。对于每个样本点,要满足的KKT条件我们在第一节已经讲到了: 

αi=0yig(xi)1 αi∗=0⇒yig(xi)≥1
0<αi<Cyig(xi)=1 0<αi∗<C⇒yig(xi)=1
αi=Cyig(xi)1 αi∗=C⇒yig(xi)≤1

    一般来说,我们首先选择违反 0<αi<Cyig(xi)=1 0<αi∗<C⇒yig(xi)=1这个条件的点。如果这些支持向量都满足KKT条件,再选择违反 αi=0yig(xi)1 αi∗=0⇒yig(xi)≥1 和 αi=Cyig(xi)1 αi∗=C⇒yig(xi)≤1的点。

4.2 第二个变量的选择

     SMO算法称选择第二一个变量为内层循环,假设我们在外层循环已经找到了 α1 α1, 第二个变量 α2 α2的选择标准是让 |E1E2| |E1−E2|有足够大的变化。由于 α1 α1定了的时候, E1 E1也确定了,所以要想 |E1E2| |E1−E2|最大,只需要在 E1 E1为正时,选择最小的 Ei Ei作为 E2 E2, 在 E1 E1为负时,选择最大的 Ei Ei作为 E2 E2,可以将所有的 Ei Ei保存下来加快迭代。

    如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做 α2 α2,直到目标函数有足够的下降, 如果所有的支持向量做 α2 α2都不能让目标函数有足够的下降,可以跳出循环,重新选择 α1 α1 

4.3 计算阈值b和差值 Ei Ei 

    在每次完成两个变量的优化之后,需要重新计算阈值b。当 0αnew1C 0≤α1new≤C时,我们有

y1i=1mαiyiKi1b1=0 y1−∑i=1mαiyiKi1−b1=0

    于是新的 bnew1 b1new为:

bnew1=y1i=3mαiyiKi1αnew1y1K11αnew2y2K21 b1new=y1−∑i=3mαiyiKi1−α1newy1K11−α2newy2K21

    计算出 E1 E1为:

E1=g(x1)y1=i=3mαiyiKi1+αold1y1K11+αold2y2K21+boldy1 E1=g(x1)−y1=∑i=3mαiyiKi1+α1oldy1K11+α2oldy2K21+bold−y1

    可以看到上两式都有 y1i=3mαiyiKi1 y1−∑i=3mαiyiKi1,因此可以将 bnew1 b1new E1 E1表示为:

bnew1=E1y1K11(αnew1αold1)y2K21(αnew2αold2)+bold b1new=−E1−y1K11(α1new−α1old)−y2K21(α2new−α2old)+bold

    同样的,如果 0αnew2C 0≤α2new≤C, 那么有:

bnew2=E2y1K12(αnew1αold1)y2K22(αnew2αold2)+bold b2new=−E2−y1K12(α1new−α1old)−y2K22(α2new−α2old)+bold

    最终的 bnew bnew为:

bnew=bnew1+bnew22 bnew=b1new+b2new2

    得到了 bnew bnew我们需要更新 Ei Ei:

Ei=SyjαjK(xi,xj)+bnewyi Ei=∑SyjαjK(xi,xj)+bnew−yi

    其中,S是所有支持向量 xj xj的集合。

    好了,SMO算法基本讲完了,我们来归纳下SMO算法。

5. SMO算法总结

    输入是m个样本 (x1,y1),(x2,y2),...,(xm,ym), (x1,y1),(x2,y2),...,(xm,ym),,其中x为n维特征向量。y为二元输出,值为1,或者-1.精度e。

    输出是近似解 α α

    1)取初值 α0=0,k=0 α0=0,k=0

    2)按照4.1节的方法选择 αk1 α1k,接着按照4.2节的方法选择 αk2 α2k,求出新的 αnew,unc2 α2new,unc

αnew,unc2=αk2+y2(E1E2)K11+K222K12) α2new,unc=α2k+y2(E1−E2)K11+K22−2K12)

    3)按照下式求出 αk+12 α2k+1

αk+12=Hαnew,unc2LLαnew,unc2>HLαnew,unc2Hαnew,unc2<L α2k+1={HL≤α2new,unc>Hα2new,uncL≤α2new,unc≤HLα2new,unc<L

    4)利用 αk+12 α2k+1 αk+11 α1k+1的关系求出 αk+11 α1k+1

    5)按照4.3节的方法计算 bk+1 bk+1 Ei Ei

    6)在精度e范围内检查是否满足如下的终止条件:

i=1mαiyi=0 ∑i=1mαiyi=0
0αiC,i=1,2...m 0≤αi≤C,i=1,2...m
αk+1i=0yig(xi)1 αik+1=0⇒yig(xi)≥1
0<αk+1i<Cyig(xi)=1 0<αik+1<C⇒yig(xi)=1
αk+1i=Cyig(xi)1 αik+1=C⇒yig(xi)≤1

    7)如果满足则结束,返回 αk+1 αk+1,否则转到步骤2)。

 

  from:https://www.cnblogs.com/pinard/p/6111471.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值