[機器學習]支持向量機4——SMO算法

支持向量機1——間隔和支持向量

支持向量機2——對偶問題

支持向量機3——引入鬆弛因子

支持向量機4——SMO算法

支持向量機4——SMO算法

根據上一篇的對偶問題的結論,我們現在的目的是計算下式子,也就是找到一系列 α 使得 ( 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 α 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 ) 公式。不難發現,這是一個 二次規劃的問題。可使用通用的二次規化算法來求解。然而,該問題的規模正比於訓練樣本數,這會在實際中造成很大的開銷。SMO(Sequential Minimal Optimization)可以更高效的解決上述SVM問題。

它的基本思路是先固定 α i 之外的所有參數,然後求 α i 上的極值,由於存在約束 i = 1 m α i y i = 0 ,若固定 α i 之外的其它變量,則 α i 可由其它變量導出。於是,SMO每次選擇兩個變量 α i , α j ,並固定其它參數。

假設選擇優化的參數是   α 1 , α 2   ,那麼需要固定其它   m 2   個參數。可以將 ( 4.2 ) 式簡化爲只關於   α 1 , α 2   的式子。

(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

其中 C o n s t a n t 代表和 α 1 , α 2 無關的常數項。由於 y i y i   == 1   ,故上式可變爲 ( 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

由於約束條件 i = 1 m α i y i = 0 α i 0 ,那麼:

(4.5) α 1 y 1 + α 2 y 2 = i = 3 m α i y i = ζ

可見 ζ 爲定值,則在等式兩端同時乘以 y 1 y 1 2 = 1 ,得到:

(4.6) α 1 = ( ζ α 2 y 2 ) y 1

( 4.6 ) 帶入 ( 4.4 ) 中:

(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 ) α 2 求導,並令求導後的式子爲0,以便於求得極值。令 ( 4.7 ) 式子爲 ψ ( α 2 ) :

(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 的值,帶入 ( 4.6 ) 即可求得 α 1 ,分爲標記爲 α 1 n e w , α 2 n e w ,優化之前的記錄爲 α 1 o l d , α 2 o l d 。由於 ( 4.5 ) 式,可知
    (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. 由於對偶問題中已經求得 ω = i = 1 m α i y i x i ,SVM的超平面爲 (4.10) f ( x ) = ω T x + b ,則
    (4.11) f ( x ) = i = 1 m α i y i x i x + b

    由於 v i = j = 3 m α j y j x j x i i = 1 , 2
    (4.12) v 1 = f ( x ) b j = 1 2 α j x j y j x 1

    (4.13) v 2 = f ( x ) b j = 1 2 α j x j y j x 2

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

(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 ) ]

(4.15) α 2 n e w = α 2 o l d + y 2 ( E 1 E 2 ) η

其中E表示預測值和真實值的差。 E i = f ( x i ) y i , η = x 1 2 + x 2 2 2 x 1 x 2

根據上篇KKT這個約束:

  • 0 α C
  • α 1 y 1 + α 2 y 2 = ζ

在二維平面上表達兩個約束條件:
這裏寫圖片描述
最優解一定在方框內&&直線上取得,因此 L α 2 n e w H
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 )
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 = { H , α 2 > H α 2 , L α 2 H L , α 2 < L

由於 ζ = α 1 o l d y 1 + α 2 o l d y 2 = α 1 n e w y 1 + α 2 n e w y 2 ,兩邊同時乘 y 1 得到:

(4.16) α 1 n e w = α 1 o l d + y 1 y 2 ( α 2 o l d α 2 n e w )

α i , α j 應該怎麼選擇?

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

{ a i 0 y i ( f ( x i ) ) 1 0 α i ( y i ( f ( x i ) ) 1 ) = 0

第一個變量的選擇
第一個變量的選擇稱爲外循環,首先遍歷整個樣本集,選擇違反KKT約束的條件作爲 α i 的第一個變量。只要有一個不滿足KKT約束,目標函數就會在迭代後變小,直觀的說,KKT違背的程度越大,則變量更新後可能導致目標函數降幅越大。於是,SMO先選取違背KKT程度最大的變量。

第二個變量的選擇
第二個變量的選擇過程稱爲內循環,假設在外循環中找到第一個變量 α 1 ,第二個變量的選擇希望能使 α 2 有較大的變化,在實際中找到一個 α 2 使得| E 1 E 2 |最大。

確定b

在西瓜書中:
注意由於KKT條件的約束,對於任意支持向量 ( x s , y s ) 都有 y s f ( x s ) = 1 ,即:

(4.17) y s ( i S α i y i x i T x s + b ) = 1

理論上,可選取任意支持向量機並通過求解 ( 4.16 ) 來獲得b,但是現實中,用一種更加魯棒的做法,使用所有支持向量求解的平均值:
b = 1 | S | i S ( 1 / y s i S α i y i x i T x s )

機器學習實戰:
KKT
(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 < 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
(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

由於 E i = f ( x i ) y i ,公式 y i i = 3 N α i y i x i x 1 可以替換爲:
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

可以得到
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 < α 2 n e w < C ,則
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 < α i n e w < C ,則 b 1 n e w = b 2 n e w
4.如果同時不滿足,取兩個值中點。

SMO代碼,請戳

參考資料

https://blog.csdn.net/luoshixian099/article/details/51227754 機器學習(周志華)