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