[机器学习]支持向量机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.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α12i=1mj=1mαiαjyiyjxixji=1mαist. i=1mαiyi=0αi0(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   ,那么需要固定其它  m2    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 无关的常数项。由于 yiyi ==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αi0 ∑ 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+x222x1x2)α2ζy2x21+ζy2x1x2+y1y21v1y2+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

  1. 由上式子假设求得了 α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
  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)bj=12αjxjyjx1(4.12) (4.12) v 1 = f ( x ) − b − ∑ j = 1 2 α j x j y j x 1

    v2=f(x)bj=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+x222x1x2)αnew2=(x21+x222x1x2)αold2+y2[y2y1+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(E1E2)η(4.15) (4.15) α 2 n e w = α 2 o l d + y 2 ( E 1 − E 2 ) η

其中E表示预测值和真实值的差。 Ei=f(xi)yi,η=x21+x222x1x2 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 = ζ

在二维平面上表达两个约束条件:
[机器学习]支持向量机4——SMO算法_第1张图片
最优解一定在方框内&&直线上取得,因此 Lαnew2H L ≤ α 2 n e w ≤ H
y1y2,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 )
y1y2,L=max(0,αold1+αold2C)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α2Hα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)条件,即

ai0yi(f(xi))10α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 使得| E1E2 E 1 − E 2 |最大。

确定b

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

ys(iSα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|iS(1/ysiSα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<Cyi(ωTxi+b)1yi(ωTxi+b)1yi(ω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<Cy1(ωTx1+b)=1mi=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=y1i=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 ,公式 yiNi=3αiyixix1 y i − ∑ i = 3 N α i y i x i x 1 可以替换为:
yii=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=E1y1x1x1(α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=E2y1x1x2(α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
机器学习(周志华)

你可能感兴趣的:(计算机视觉,机器学习,图像处理,计算机视觉)