支持向量机1——间隔和支持向量
支持向量机2——对偶问题
支持向量机3——引入松弛因子
支持向量机4——SMO算法
支持向量机4——SMO算法
根据上一篇的对偶问题的结论,我们现在的目的是计算下式子,也就是找到一系列α使得(4.1)公式达到最大值。
maxα∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxixjst. ∑i=1mαiyi=0αi≥0(4.1)
换一种表达方式那么就是让找到一系列α使得(4.2)公式达到最小值。
minα12∑i=1m∑j=1mαiαjyiyjxixj−∑i=1mαist. ∑i=1mαiyi=0αi≥0(4.2)
那么现在问题就是如何解
(4.2)公式。不难发现,这是一个
二次规划的问题。可使用通用的二次规化算法来求解。然而,该问题的规模正比于训练样本数,这会在实际中造成很大的开销。SMO(Sequential Minimal Optimization)可以更高效的解决上述SVM问题。
它的基本思路是先固定αi之外的所有参数,然后求αi上的极值,由于存在约束∑mi=1αiyi=0,若固定αi之外的其它变量,则αi可由其它变量导出。于是,SMO每次选择两个变量αi,αj,并固定其它参数。
假设选择优化的参数是 α1,α2 ,那么需要固定其它 m−2 个参数。可以将(4.2)式简化为只关于 α1,α2 的式子。
minα1,α212(α21y21x21+α22y22x22+2α1α2y1y2x1x2) − (α1+α2) + y1α1v1 + y2α2v2 + Conatantvi=∑j=3mαjxjyjxii=1,2(4.3)
其中Constant代表和α1,α2无关的常数项。由于yi∗yi ==1 ,故上式可变为(4.4)
minα1,α2=12(α21x21+α22x22+2α1α2y1y2x1x2) − (α1+α2) + y1α1v1 + y2α2v2 + Conatantvi=∑j=3mαjxjyjxii=1,2(4.4)
由于约束条件∑mi=1αiyi=0αi≥0,那么:
α1y1+α2y2=−∑i=3mαiyi=ζ(4.5)
可见ζ为定值,则在等式两端同时乘以y1,y21=1,得到:
α1=(ζ−α2y2)y1(4.6)
将(4.6)带入(4.4)中:
minα212(ζ−α2y2)2x21+12α22x22+(ζ−α2y2)α2y2x1x2−(ζ−α2y2)y1−α2+(ζ−α2y2)v1+y2v2α2(4.7)
对(4.7)的α2求导,并令求导后的式子为0,以便于求得极值。令(4.7)式子为ψ(α2):
∂ψ(α2)∂α2=(x21+x22−2x1x2)α2−ζy2x21+ζy2x1x2+y1y2−1−v1y2+v2y2=0(4.8)
- 由上式子假设求得了α2的值,带入(4.6)即可求得α1,分为标记为αnew1,αnew2,优化之前的记录为αold1,αold2。由于(4.5)式,可知
ζ=αold1y1+αold2y2=αnew1y1+αnew2y2(4.9)
- 由于对偶问题中已经求得ω=∑mi=1αiyixi,SVM的超平面为f(x)=ωTx+b(4.10),则
f(x)=∑i=1mαiyixix+b(4.11)
由于vi=∑mj=3αjyjxjxii=1,2
v1=f(x)−b−∑j=12αjxjyjx1(4.12)
v2=f(x)−b−∑j=12αjxjyjx2(4.13)
将(4.9),(4.12),(4.13)带入(4.8)中
(x21+x22−2x1x2)αnew2=(x21+x22−2x1x2)αold2+y2[y2−y1+f(x1)−f(x2)](4.14)
αnew2=αold2+y2(E1−E2)η(4.15)
其中E表示预测值和真实值的差。Ei=f(xi)−yi,η=x21+x22−2x1x2
根据上篇KKT这个约束:
-
0≤α≤C
-
α1y1+α2y2=ζ
在二维平面上表达两个约束条件:
![[机器学习]支持向量机4——SMO算法 [机器学习]支持向量机4——SMO算法](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzY4Ny8xNzQ2MzFjNmM0NWJhYjJkOGQ0ODRkODhlODIzNDg5Zi5wbmc=)
最优解一定在方框内&&直线上取得,因此L≤αnew2≤H
当y1≠y2,L=max(0,αold2−αold1)H=min(C,C+αold2−αold1)
当y1≠y2,L=max(0,αold1+αold2−C)H=min(C,αold1+αold2)
经过上述处理,最终α2:
α2=⎧⎩⎨⎪⎪H,α2,L,α2>HL≤α2≤Hα2<L
由于ζ=αold1y1+αold2y2=αnew1y1+αnew2y2,两边同时乘y1得到:
αnew1=αold1+y1y2(αold2−αnew2)(4.16)
αi,αj应该怎么选择?
(4,2)式子需要满足KKT(Karush-Kuhn-Tucker)条件,即
⎧⎩⎨⎪⎪ai≥0yi(f(xi))−1≥0αi(yi(f(xi))−1)=0
第一个变量的选择
第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT约束的条件作为
αi的第一个变量。只要有一个不满足KKT约束,目标函数就会在迭代后变小,直观的说,KKT违背的程度越大,则变量更新后可能导致目标函数降幅越大。于是,SMO先选取违背KKT程度最大的变量。
第二个变量的选择
第二个变量的选择过程称为内循环,假设在外循环中找到第一个变量α1,第二个变量的选择希望能使α2有较大的变化,在实际中找到一个α2使得|E1−E2|最大。
确定b
在西瓜书中:
注意由于KKT条件的约束,对于任意支持向量(xs,ys)都有ysf(xs)=1,即:
ys(∑i∈SαiyixTixs+b)=1(4.17)
理论上,可选取任意支持向量机并通过求解
(4.16)来获得b,但是现实中,用一种更加鲁棒的做法,使用所有支持向量求解的平均值:
b=1|S|∑i∈S(1/ys−∑i∈SαiyixTixs)
机器学习实战: KKT αi=0αi=C0<αi<C⇒yi(ωTxi+b)≥1⇒yi(ωTxi+b)≤1⇒yi(ωTxi+b)=1(4.18)
在对每两个
α进行优化后,要对b的值进行更新:
1. 如果
0<anew1<C⇒y1(ωTx1+b)=1⇒∑mi=1αiyix1xi+b=y1 bnew1=y1−∑i=3Nαiyixix1−αnewiy1x1x1−αnew2y2x2x1(4.19)
由于
Ei=f(xi)−yi,公式
yi−∑Ni=3αiyixix1可以替换为:
yi−∑i=3Nαiyixix1=−E1+αold1y1x1x1+αold2y2x1x1+bold
可以得到
bnew1=−E1−y1x1x1(αnew1−αold1)−y2x2x1(αnew2−αold2)+bold
2.如果
0<αnew2<C,则
bnew2=−E2−y1x1x2(αnew1−αold1)−y2x2x2(αnew2−αold2)+bold
3.如果同时满足
0<αnewi<C,则
bnew1=bnew2
4.如果同时不满足,取两个值中点。
SMO代码,请戳
参考资料
https://blog.****.net/luoshixian099/article/details/51227754
机器学习(周志华)