[机器学习]支持向量机4——SMO算法

支持向量机1——间隔和支持向量

支持向量机2——对偶问题

支持向量机3——引入松弛因子

支持向量机4——SMO算法

支持向量机4——SMO算法

根据上一篇的对偶问题的结论,我们现在的目的是计算下式子,也就是找到一系列α使得(4.1)公式达到最大值。

(4.1)maxαi=1mαi12i=1mj=1mαiαjyiyjxixjst. i=1mαiyi=0αi0

换一种表达方式那么就是让找到一系列α使得(4.2)公式达到最小值。

(4.2)minα12i=1mj=1mαiαjyiyjxixji=1mαist. i=1mαiyi=0αi0



那么现在问题就是如何解(4.2)公式。不难发现,这是一个二次规划的问题。可使用通用的二次规化算法来求解。然而,该问题的规模正比于训练样本数,这会在实际中造成很大的开销。SMO(Sequential Minimal Optimization)可以更高效的解决上述SVM问题。

它的基本思路是先固定αi之外的所有参数,然后求αi上的极值,由于存在约束i=1mαiyi=0,若固定αi之外的其它变量,则αi可由其它变量导出。于是,SMO每次选择两个变量αi,αj,并固定其它参数。

假设选择优化的参数是 α1,α2 ,那么需要固定其它 m2 个参数。可以将(4.2)式简化为只关于 α1,α2 的式子。

(4.3)minα1,α212(α12y12x12+α22y22x22+2α1α2y1y2x1x2)  (α1+α2) + y1α1v1 + y2α2v2 + Conatantvi=j=3mαjxjyjxii=1,2

其中Constant代表和α1,α2无关的常数项。由于yiyi ==1 ,故上式可变为(4.4)

(4.4)minα1,α2=12(α12x12+α22x22+2α1α2y1y2x1x2)  (α1+α2) + y1α1v1 + y2α2v2 + Conatantvi=j=3mαjxjyjxii=1,2

由于约束条件i=1mαiyi=0αi0,那么:

(4.5)α1y1+α2y2=i=3mαiyi=ζ

可见ζ为定值,则在等式两端同时乘以y1y12=1,得到:

(4.6)α1=(ζα2y2)y1

(4.6)带入(4.4)中:

(4.7)minα212(ζα2y2)2x12+12α22x22+(ζα2y2)α2y2x1x2(ζα2y2)y1α2+(ζα2y2)v1+y2v2α2

(4.7)α2求导,并令求导后的式子为0,以便于求得极值。令(4.7)式子为ψ(α2):

(4.8)ψ(α2)α2=(x12+x222x1x2)α2ζy2x12+ζy2x1x2+y1y21v1y2+v2y2=0

  1. 由上式子假设求得了α2的值,带入(4.6)即可求得α1,分为标记为α1new,α2new,优化之前的记录为α1old,α2old。由于(4.5)式,可知
    (4.9)ζ=α1oldy1+α2oldy2=α1newy1+α2newy2
  2. 由于对偶问题中已经求得ω=i=1mαiyixi,SVM的超平面为(4.10)f(x)=ωTx+b,则
    (4.11)f(x)=i=1mαiyixix+b

    由于vi=j=3mαjyjxjxii=1,2
    (4.12)v1=f(x)bj=12αjxjyjx1

    (4.13)v2=f(x)bj=12αjxjyjx2

(4.9),(4.12),(4.13)带入(4.8)

(4.14)(x12+x222x1x2)α2new=(x12+x222x1x2)α2old+y2[y2y1+f(x1)f(x2)]

(4.15)α2new=α2old+y2(E1E2)η

其中E表示预测值和真实值的差。Ei=f(xi)yi,η=x12+x222x1x2

根据上篇KKT这个约束:

  • 0αC
  • α1y1+α2y2=ζ

在二维平面上表达两个约束条件:
[机器学习]支持向量机4——SMO算法
最优解一定在方框内&&直线上取得,因此Lα2newH
y1y2,L=max(0,α2oldα1old)H=min(C,C+α2oldα1old)
y1y2,L=max(0,α1old+α2oldC)H=min(C,α1old+α2old)

经过上述处理,最终α2:

α2={H,α2>Hα2,Lα2HL,α2<L

由于ζ=α1oldy1+α2oldy2=α1newy1+α2newy2,两边同时乘y1得到:

(4.16)α1new=α1old+y1y2(α2oldα2new)

αi,αj应该怎么选择?

(4,2)式子需要满足KKT(Karush-Kuhn-Tucker)条件,即

{ai0yi(f(xi))10αi(yi(f(xi))1)=0

第一个变量的选择
第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT约束的条件作为αi的第一个变量。只要有一个不满足KKT约束,目标函数就会在迭代后变小,直观的说,KKT违背的程度越大,则变量更新后可能导致目标函数降幅越大。于是,SMO先选取违背KKT程度最大的变量。

第二个变量的选择
第二个变量的选择过程称为内循环,假设在外循环中找到第一个变量α1,第二个变量的选择希望能使α2有较大的变化,在实际中找到一个α2使得|E1E2|最大。

确定b

在西瓜书中:
注意由于KKT条件的约束,对于任意支持向量(xs,ys)都有ysf(xs)=1,即:

(4.17)ys(iSαiyixiTxs+b)=1

理论上,可选取任意支持向量机并通过求解(4.16)来获得b,但是现实中,用一种更加鲁棒的做法,使用所有支持向量求解的平均值:
b=1|S|iS(1/ysiSαiyixiTxs)

机器学习实战:
KKT
(4.18)αi=0yi(ωTxi+b)1αi=Cyi(ωTxi+b)10<αi<Cyi(ωTxi+b)=1

在对每两个α进行优化后,要对b的值进行更新:
1. 如果0<a1new<Cy1(ωTx1+b)=1i=1mαiyix1xi+b=y1
(4.19)b1new=y1i=3Nαiyixix1αinewy1x1x1α2newy2x2x1

由于Ei=f(xi)yi,公式yii=3Nαiyixix1可以替换为:
yii=3Nαiyixix1=E1+α1oldy1x1x1+α2oldy2x1x1+bold

可以得到
b1new=E1y1x1x1(α1newα1old)y2x2x1(α2newα2old)+bold

2.如果0<α2new<C,则
b2new=E2y1x1x2(α1newα1old)y2x2x2(α2newα2old)+bold

3.如果同时满足0<αinew<C,则b1new=b2new
4.如果同时不满足,取两个值中点。

SMO代码,请戳

参考资料

https://blog.****.net/luoshixian099/article/details/51227754
机器学习(周志华)