本篇是SVM系列的最後一篇,將講解SVM的求解,即SMO算法
待優化問題
回顧一下,SVM的優化問題最終可以轉化爲如下形式:
顯然,該問題同樣不好直接優化求解,而Platt提出的SMO算法便是一個可以高效的求解上述問題的算法,他把原始問題的求解N個參數二次規劃問題分解成多個二次規劃問題進行迭代求解,即每次選擇一對變量而固定其它變量來進行求解;根據問題的等式約束,當變動時,也要隨之變動以滿足等式約束。
SMO
如上陳述,選擇一對變量而固定其它變量,且更新後仍要滿足等式約束,這時有
(1),
化簡L得到:
設,繼續化簡:
,
將式(1)代入,繼續化簡得到:
由,得,代入L得
設,則
****************************************************************************************************************
由於項的係數,所以L是關於的一元二次函數,且開口向上,
同時還滿足約束 ,即
,
所以該函數的最小解要麼在梯度爲0處,要麼在約束邊界上,
****************************************************************************************************************
令梯度爲0,得:
所以最終解爲:
求出了,即可求出,至此,完成一次更新。
更新W,b
由於每次更新a後,W、b也會發生變化,也即要更新W、b:
,而b的更新稍微複雜,
根據KKT條件,,即此時,,
而,
所以,
即當時
當時,可得
當,,
當,,
綜上,
即
的選取
選取優化變量的基本思想:每輪迭代會確定一個“臨時分類器”,顯然,我們不關心這個臨時分類器的側面之外的元組,而只是關心在側面之上以及側面之間(即邊緣內)的點,所以在下一輪迭代中,就應該在這些關心的元組中選擇兩個,對它們對應的拉格朗日乘子進行優化,至於優化計算,上面已經說得比較詳細了。
雖然大致確定了變量選擇的範圍,但是到底應該選擇哪兩個a還是問題,根據拉格朗日乘子αi對應訓練元組Xi與分類器的關係
選取規則:
- 先確定在當前的分類器中,違反上式的元組Xp,具體來說:
- 先找那些拉格朗日乘子0<αi<C所對應的元組,找出一個違反上式最嚴重的X,也就確定了第一個優化變量αp;
- 如果找不到,那就再找那些αi=C的,
- 再找不到,最後找αi=0的,如果都滿足,則SMO算法的迭代終止。
- 找到使得|Ep−Eq|最大的元組Xq,因爲的更新與|Ep−Eq|成正比,|Ep−Eq|越大更新越快