支持向量機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=ζ
在二維平面上表達兩個約束條件:
最優解一定在方框內&&直線上取得,因此
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.csdn.net/luoshixian099/article/details/51227754 機器學習(周志華)