項目地址:https://github.com/Daya-Jin/ML_for_learner/blob/master/svm/SMO.ipynb
原博客:https://daya-jin.github.io/2019/03/24/SequentialMinimalOptimization/
算法概述
在之前講解SVM博客中,分析了SVM模型的理論基礎與優化目標,并且討論了SVM在達到最優解時的一些性質。但是前文中并沒有提及SVM目標函數的優化方法,本文的目的就是討論二次優化算法SMO用于SVM的學習。因為SMO算法涉及到的很多數學知識已超出本文范疇,某些地方只給出直接結論。
首先回顧SVM的優化目標為:
為了將核函數加入進來,將目標函數中兩訓練樣本的內積替換成核函數的形式:
SMO算法的核心思想是:每次只選取一對參數進行優化。假設在上述目標中,我們只令與
為參數,其他
為常數,那么優化問題可以寫成:
去除無關常量,簡化后的優化目標可以寫成:
在前文中提過SVM在優化后的一些性質,如對于分類正確的樣本,其對應的是等于
的,同樣的,那么對于軟間隔SVM,不難推出優化后的幾個性質:
樣本分類情況 | 對應的 |
---|---|
優化策略
SMO每次只選取一對視為參數,假設先選定
,那么
的優化公式為:
然后再看優化問題中的約束條件,由于只有
與
是參數,那么該優化條件還可以寫成:
。而
與
的可能取值為
,由幾何方法可以得到優化參數
的一個上下界:
- 若
,
,
- 若
,
,
所以,在優化之后,還需要檢驗是否還符合約束條件,若不滿足,則需要做截斷處理:
而的優化公式為:
其中。
針對任一一個,若
在邊界范圍
內,可以推出對應的
:
那么將其寫成一個條件函數,可得到的迭代優化公式: