从零开始-Machine Learning学习笔记(12)-SMO算法解析

​ SMO-Sequential Minimal Optimization,序列最小优化,SMO的基本思路就是:先固定 αi α i 之外的所有参数,然后求 αi α i 的极值。但是问题中存在约束条件: mi=0αiyi=0 ∑ i = 0 m α i y i = 0 。如果固定了 αi α i 之外的其他变量,则 αi α i 可以由其他的变量导出。于是,一次只留一个参数,固定其余参数的方法在这里是不适用的,但是这个思想却给了我们不错的启发。那么,SMO可以每次选择两个变量 αi α i αj α j ,并固定其他参数。这样,在参数初始化之后,SMO不断迭代重复下面的步骤,直至收敛:

  • 选取一对新的 αi α i αj α j ;

  • 固定 αi α i αj α j 之外的参数,求解前面的优化问题,获取更新后的 αi α i αj α j

    假设我们选择 α1 α 1 α2 α 2 是变量,其余的 αi α i 是定值,常数,那么原来的目标函数:

    minα12i=1Nj=1NαiαjyiyjK(xixj)i=1Nαis.t.i=1Nαiyi=00αiC,i=1,2,N min α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i ⋅ x j ) − ∑ i = 1 N α i s . t . ∑ i = 1 N α i y i = 0 0 ≤ α i ≤ C , i = 1 , 2 , … N

就变为对 α1 α 1 α2 α 2 的优化:

minα1,α2W(α1,α2) min α 1 , α 2 ⁡ W ( α 1 , α 2 )

1. 原目标函数化简

​ 我们来逐步化简原来的目标函数,其中只有 α1 α 1 α2 α 2 是变量,其余的都是常数:

minα12i=1Nj=1NαiαjyiyjK(xixj)i=1Nαi min α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i ⋅ x j ) − ∑ i = 1 N α i

我们分别取

i=1,j=1 i = 1 , j = 1

i=1,j=2 i = 1 , j = 2

i=1,j1,2 i = 1 , j ≠ 1 , 2

j=1,i1,2 j = 1 , i ≠ 1 , 2

i=2,j=1 i = 2 , j = 1

i=2,j=2 i = 2 , j = 2

i=2,j1,2 i = 2 , j ≠ 1 , 2

j=2,i1,2 j = 2 , i ≠ 1 , 2

i1,2,j1,2 i ≠ 1 , 2 , j ≠ 1 , 2

这样我们就可以把目标函数化成只有变量 α1 α 1 α2 α 2 ,其余的项都可以合并为常数C:

minα12i=1Nj=1NαiαjyiyjK(xixj)i=1Nαi=minα12[α21K11+α1α2y1y2K12+2Nj=3α1αjy1yjK1j    +α2α1y2y1K21+α22K22+2Nj=3α2αjy2yjK2j+C1]    (α1+α2)C2=minα12[α21K11+α22K22+2α1α2y1y2K12+2Nj=3α1αjy1yjK1j    +2Nj=3α2αjy2yjK2j](α1+α2)+C=minα12[α21K11+α22K22+2α1α2y1y2K12+2α1y1v1+2α2y2v2](α1+α2)+C min α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i ⋅ x j ) − ∑ i = 1 N α i = min α ⁡ 1 2 [ α 1 2 K 11 + α 1 α 2 y 1 y 2 K 12 + 2 ∑ j = 3 N α 1 α j y 1 y j K 1 j         + α 2 α 1 y 2 y 1 K 21 + α 2 2 K 22 + 2 ∑ j = 3 N α 2 α j y 2 y j K 2 j + C 1 ]         − ( α 1 + α 2 ) − C 2 = min α ⁡ 1 2 [ α 1 2 K 11 + α 2 2 K 22 + 2 α 1 α 2 y 1 y 2 K 12 + 2 ∑ j = 3 N α 1 α j y 1 y j K 1 j         + 2 ∑ j = 3 N α 2 α j y 2 y j K 2 j ] − ( α 1 + α 2 ) + C = min α ⁡ 1 2 [ α 1 2 K 11 + α 2 2 K 22 + 2 α 1 α 2 y 1 y 2 K 12 + 2 α 1 y 1 v 1 + 2 α 2 y 2 v 2 ] − ( α 1 + α 2 ) + C

其中:
v1=j=3NαjyjK1jv2=j=3NαjyjK2j v 1 = ∑ j = 3 N α j y j K 1 j v 2 = ∑ j = 3 N α j y j K 2 j

于是,我们的目标函数就转化为上式的样子。

2. 解的范围

要求解上述的优化问题,必定先确定解的范围,根据原来的约束条件我们知道:

α1y1+α2y2=K0<α1<C0<α2<C α 1 y 1 + α 2 y 2 = K 0 < α 1 < C 0 < α 2 < C

其中我们知道 y2i=1 y i 2 = 1 ,所以对于第一个约束条件我们可以有两种表示方式:

y1=y2α1+α2=K y 1 = y 2 时 , α 1 + α 2 = K

y1y2α1α2=K y 1 ≠ y 2 时 , α 1 − α 2 = K

这里写图片描述

​ k具体是多少我们并不关心,但是我们知道α1和α2的取值都落在途中的直线上。k无非就是一个截距,随着k的变化,这根直线在方框内会上下移动,交点也变,但是一定要在方框范围内,所以边界一定会落在方框与直线的交点上。设L为α2可能的最小取值,H为α2可能的最大取值,那么有:

  1. y1=y2α1+α2=Kα2=Kα1 y 1 = y 2 时 , α 1 + α 2 = K , 则 α 2 = K − α 1

    我们都知道 0<α1<C,0<α2<C 0 < α 1 < C , 0 < α 2 < C ;

    α1=C α 1 = C 时, α2 α 2 取得最小值,即 α2=KC α 2 = K − C ,但是, 0<α2 0 < α 2 ,所以最小值在这两者中取得,于是:

    L=max{0,KC}=max{0,α1+α2C} L = m a x { 0 , K − C } = m a x { 0 , α 1 + α 2 − C }

    α1=0 α 1 = 0 时, α2 α 2 取得最大值,即 α2=K α 2 = K 但是, α2<C α 2 < C ,所以最大值在这两者中取得,于是:
    H=min{K,C}=min{α1+α2,C} H = m i n { K , C } = m i n { α 1 + α 2 , C }

  2. y1y2α1α2=Kα2=α1K y 1 ≠ y 2 时 , α 1 − α 2 = K , 则 α 2 = α 1 − K

    我们都知道 0<α1<C,0<α2<C 0 < α 1 < C , 0 < α 2 < C ;

    α1=0 α 1 = 0 时, α2 α 2 取得最小值,即 α2=K α 2 = − K 但是, 0<α2 0 < α 2 以最小值在这两者中取得,于是:

L=max{0,K}=max{0,α2α1} L = m a x { 0 , − K } = m a x { 0 , α 2 − α 1 }

​ 当 α1=C α 1 = C 时, α2 α 2 取得最大值,即 α2=CK α 2 = C − K 但是, α2<C α 2 < C ,所以最大值在这两者中取得,于是:

H=min{C,CK}=min{C,C+α2α1} H = m i n { C , C − K } = m i n { C , C + α 2 − α 1 }

3.求解过程

​ 先将 α1 α 1 α2 α 2 来表示,因为 α1y1+α2y2=kconst α 1 y 1 + α 2 y 2 = k ( c o n s t ) ,两边同时乘以 y1 y 1 ,于是有:

α1=(kα2y2)y1 α 1 = ( k − α 2 y 2 ) y 1

带入到我们之前化简的目标函数中,那么目标函数就变为只有变量 α2 α 2 的优化问题了:
minα12[α21K11+α22K22+2α1α2y1y2K12+2α1y1v1+2α2y2v2](α1+α2)+C=minα12[((kα2y2)y1)2K11+2(kα2y2)α2y2K12   +2(kα2y2)v1+2α2y2v2]((kα2y2)y1+α2)+C min α ⁡ 1 2 [ α 1 2 K 11 + α 2 2 K 22 + 2 α 1 α 2 y 1 y 2 K 12 + 2 α 1 y 1 v 1 + 2 α 2 y 2 v 2 ] − ( α 1 + α 2 ) + C = min α ⁡ 1 2 [ ( ( k − α 2 y 2 ) y 1 ) 2 K 11 + 2 ( k − α 2 y 2 ) α 2 y 2 K 12       + 2 ( k − α 2 y 2 ) v 1 + 2 α 2 y 2 v 2 ] − ( ( k − α 2 y 2 ) y 1 + α 2 ) + C

其中,v1与v2需要变换一下,不能直接运算,因为SVM的模型为:
f(x)=wTx+b=i=1NαiyiK(xi,xj)+b,f(x1)=α1y1K11+α2y2K12+i=3NαiyiK(xi,xj)+b=α1y1K11+α2y2K12+v1+bf(x2)=α1y1K12+α2y2K22+i=3NαiyiK(xi,xj)+b=α1y1K12+α2y2K22+v2+b f ( x ) = w T x + b = ∑ i = 1 N α i y i K ( x i , x j ) + b , 则 f ( x 1 ) = α 1 y 1 K 11 + α 2 y 2 K 12 + ∑ i = 3 N α i y i K ( x i , x j ) + b = α 1 y 1 K 11 + α 2 y 2 K 12 + v 1 + b f ( x 2 ) = α 1 y 1 K 12 + α 2 y 2 K 22 + ∑ i = 3 N α i y i K ( x i , x j ) + b = α 1 y 1 K 12 + α 2 y 2 K 22 + v 2 + b

所以可以间接求出v1与v2为:
v1=f(x1)α1y1K11α2y2K12b=f(x1)(kα2y2)K11α2y2K12bv2=f(x2)α1y1K12α2y2K22b=f(x2)(kα2y2)K12α2y2K22b v 1 = f ( x 1 ) − α 1 y 1 K 11 − α 2 y 2 K 12 − b = f ( x 1 ) − ( k − α 2 y 2 ) K 11 − α 2 y 2 K 12 − b v 2 = f ( x 2 ) − α 1 y 1 K 12 − α 2 y 2 K 22 − b = f ( x 2 ) − ( k − α 2 y 2 ) K 12 − α 2 y 2 K 22 − b

所以,此时目标函数就只是一元函数,我们对其求倒数,并使其为0,就可以求出 α2 α 2 :
Wα2=12[2((kα2y2)y1)(y1y2)K11+2α2K22+2(k2α2y2)y1y1y2K12+2(y1y2)α2(y1y2)K12          +2(y1y2)y1v1+2y2v2](y1y2+1)=(α2ky2)K11+α2K22+(ky22α2)K12y2v1+y2v2+y1y21=α2(K11+K222K12)ky2K11+ky2K12y2v1+y2v2+y1y21=α2(K11+K222K12)ky2K11+ky2K12y2(v1v2)+y1y21=0 ∂ W ∂ α 2 = 1 2 [ 2 ( ( k − α 2 y 2 ) y 1 ) ( − y 1 y 2 ) K 11 + 2 α 2 K 22 + 2 ( k − 2 α 2 y 2 ) y 1 y 1 y 2 K 12 + 2 ( − y 1 y 2 ) α 2 ( y 1 y 2 ) K 12                     + 2 ( − y 1 y 2 ) y 1 v 1 + 2 y 2 v 2 ] − ( − y 1 y 2 + 1 ) = ( α 2 − k y 2 ) K 11 + α 2 K 22 + ( k y 2 − 2 α 2 ) K 12 − y 2 v 1 + y 2 v 2 + y 1 y 2 − 1 = α 2 ( K 11 + K 22 − 2 K 12 ) − k y 2 K 11 + k y 2 K 12 − y 2 v 1 + y 2 v 2 + y 1 y 2 − 1 = α 2 ( K 11 + K 22 − 2 K 12 ) − k y 2 K 11 + k y 2 K 12 − y 2 ( v 1 − v 2 ) + y 1 y 2 − 1 = 0

此时我们把v1与v2带入就可以得到迭代公式:

α2(K11+K222K12)=ky2(K11K12)+y2(v1v2)y1y2+1=ky2(K11K12)+y2[f(x1)f(x2)+(kα2y2)(K12K11)+α2y2(K22K12)]y1y2+y22=α2(K11+K222K12)+y2[(f(x1)y1)(f(x2)y2)] α 2 ∗ ( K 11 + K 22 − 2 K 12 ) = k y 2 ( K 11 − K 12 ) + y 2 ( v 1 − v 2 ) − y 1 y 2 + 1 = k y 2 ( K 11 − K 12 ) + y 2 [ f ( x 1 ) − f ( x 2 ) + ( k − α 2 y 2 ) ( K 12 − K 11 ) + α 2 y 2 ( K 22 − K 12 ) ] − y 1 y 2 + y 2 2 = α 2 ( K 11 + K 22 − 2 K 12 ) + y 2 [ ( f ( x 1 ) − y 1 ) − ( f ( x 2 ) − y 2 ) ]

于是我们可以得到递推公式:
α2=α2+y2[(f(x1)y1)(f(x2)y2)]K11+K222K12=α2+y2E1E2η α 2 ∗ = α 2 + y 2 [ ( f ( x 1 ) − y 1 ) − ( f ( x 2 ) − y 2 ) ] K 11 + K 22 − 2 K 12 = α 2 + y 2 E 1 − E 2 η

其中 Ej E j 是预测值与实际值之差, η=K11+K222K12 η = K 11 + K 22 − 2 K 12

最后将 α2 α 2 的值进行约束:

αnew2=H,α2,L,α2>HLα2Hα2<L α 2 n e w = { H , α 2 ∗ > H α 2 ∗ , L ≤ α 2 ∗ ≤ H L , α 2 ∗ < L

得到 α2 α 2 之后就可以由约束条件 α1y1+α2y2=αnew1y1+αnew2=k α 1 y 1 + α 2 y 2 = α 1 n e w y 1 + α 2 n e w = k 得到 α1 α 1
αnew1=α1+y1y2(α2αnew2) α 1 n e w = α 1 + y 1 y 2 ( α 2 − α 2 n e w )

大部分情况下, η>0 η > 0 ,但是当 η0 η ≤ 0 的时候就比较麻烦了,需要更为复杂的求解手段。详情可以见我后面附上的参考博客。在现实中,这种情况不常发生,因此忽略也无伤大雅,在程序中遇到了一般的处理是跳过此次循环。

4、求解w与b

w的求解可以通过: w=i=1mαiyixi w ∗ = ∑ i = 1 m α i ∗ y i x i 求得。

b可以通过kkt条件求出:

这是原优化问题的KKT条件:

  1. αi=0 α i = 0 时,分类是正确的;
  2. 0αiC 0 ≤ α i ≤ C 时,这时的样本点是支持向量,处在边界上;
  3. αi=C α i = C 时,位于边界之间。

参考上面的KKT条件进行分类讨论:

  1. 如果 0<α1<C 0 < α 1 < C ,则(x1,y1)为支持向量,满足 yi(mi=1αiyiKi1+b1)=1 y i ( ∑ i = 1 m α i y i K i 1 + b 1 ) = 1

    α1y1K11+α2y2K21+i=3mαiyiKi1+b1=y1 α 1 ∗ y 1 K 11 + α 2 ∗ y 2 K 21 + ∑ i = 3 m α i y i K i 1 + b 1 ∗ = y 1

    b1=y1i=3mαiyiKi1α1y1K11α2y2K21=y1v1α1y1K11α2y2K21=y1[f(x1)α1y1K11α2y2K12b]α1y1K11α2y2K21=b1E1y1K11(α1α1)y2K21(α2α2) b 1 ∗ = y 1 − ∑ i = 3 m α i y i K i 1 − α 1 ∗ y 1 K 11 − α 2 ∗ y 2 K 21 = y 1 − v 1 − α 1 ∗ y 1 K 11 − α 2 ∗ y 2 K 21 = y 1 − [ f ( x 1 ) − α 1 y 1 K 11 − α 2 y 2 K 12 − b ] − α 1 ∗ y 1 K 11 − α 2 ∗ y 2 K 21 = b 1 − E 1 − y 1 K 11 ( α 1 ∗ − α 1 ) − y 2 K 21 ( α 2 ∗ − α 2 )

2.如果 0<α2<C 0 < α 2 < C ,则(x2,y2)为支持向量,那么可以得到 b2 b 2 :

b2=b2E2y1K12(α1α1)y2K22(α2α2) b 2 ∗ = b 2 − E 2 − y 1 K 12 ( α 1 ∗ − α 1 ) − y 2 K 22 ( α 2 ∗ − α 2 )

3.如果同时有 0<α1<C0<α2<C 0 < α 1 < C , 0 < α 2 < C ,那么有 b1=b2 b 1 ∗ = b 2 ∗

4.如果均不满足 0αiC 0 ≤ α i ≤ C 就取两者中点: b=b1+b22 b ∗ = b 1 ∗ + b 2 ∗ 2

在周志华老师的《机器学习》中,还给出了一个更为鲁棒的求法:使用所有支持向量求解的平均值:

b=1|S|sS(1ysiSαiyixTixs) b = 1 | S | ∑ s ∈ S ( 1 y s − ∑ i ∈ S α i y i x i T x s )

其中S是所有支持向量的下标集合。

5.总结

​ SMO的公式推导还是比较复杂的,但是越推就越觉得Platt这些人确实厉害,能推导出如此美丽的公式。钦佩之余,自己又在机器学习的道路上前进了许多,也愈发的觉得自己懂的还是太少,即便是全部推完了这些公式,不会应用的惶恐之心又涌上心头。但是,学无止境,只要一直在路上就一定会到达目的地!

​ 下一篇博客中,我会去研究SMO中启发式的变量选择,看这种方式是如何提高算法的效率的!

参考资料:

周志华《机器学习》-支持向量机

机器学习入门笔记:(4.3)SMO算法

支持向量机(五)SMO算法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值