機器學習——支持向量機(SVM)復講
之前做了支持向量機的筆記,過了這幾天,覺得又有點忘了,重新拿起來複習一遍,然後作了一個更加精簡的筆記,應該會更容易懂。
支持向量機在解決什麼問題:
支持向量機和很多機器學習的算法一樣,是針對分類的一種算法,最簡單的理解就是線性二分類,如下圖:
這副圖其實就很概括性地理解了支持向量機的分類原理,什麼樣的分類間隔面纔是合理並且最優的呢?顯然是與兩堆類別間隔最大的分隔面,說到底,SVM的原理就是一直在求、並且推導怎麼得到這個最大間隔的分類面的參數,在這裏,我們首先理解線性分類的參數,因爲它是我們上手的基礎。
間隔表示
爲了最小化這個間隔,我們根據空間矢量的距離公式可以得到我們的目標函數(就是距離公式,不要說高中的距離公式都不會吧?可以看我上一篇具體有公式),然後由上圖可以知道,支持向量上的點滿足圖上表示的公式,代入其實就是最小化,沒錯,就是這麼簡單的目標,線性可分的支持向量機目標就是最小化這個。
當然我們還有約束條件,就是分類正確(如上圖所示),應該滿足:
怎麼會有這個公式?看圖!分類正確就是滿足這個公式,這個很好理解。
明顯上面提供了兩個條件,一個式子要最小化,一個約束條件,那麼我們就遇到優化問題了。很好,拉格朗日函數來了。
拉格朗日函數優化:
之前看這個的時候,看到一篇寫得很簡單但很透徹的文章:
它講拉格朗日式子爲什麼要這麼構造講得很好,其實懂了這個你根本不要看我上一篇列的式子,因爲你根據上面的目標和約束條件,任何人都能構造出我們所要得到的函數,然後它也說到對偶性這個東西,我們就是根據這個轉化這個式子,然後應該滿足KKT條件,這個可以看我的上一篇具體講述。
總之你只要懂得我們根據約束條件和目標函數列出拉格朗日函數,進行對偶、滿足KKT、求導爲零得到了:
代入目標函數:
沒錯,還是這麼簡單,就是求了導的含約束條件的目標函數,我們就是要進行alpha的求解。
SMO算法:
其實SMO算是比較複雜的一步了,因爲前面都是簡單的一步步順承下來的,接下來是通過不斷更新alpha來得到最後的結果。
接下來,因爲我們通過兩個alpha值來不斷更新,所以把原來的目標函數進行拆分,然後化成最後的更新公式(這其中的都是簡單的的換元推導):
也就是說我們首先需要得到誤差E,得到學習率eta,然後進行更新第二個參數,因爲我們考慮了軟判決(我們對分類給了一個可浮動的判決空間),所以添加了冗餘量,使得我們需要對這個參數有一個上下限的修正,然後根據第二個參數更新第一個參數:
得到這兩個參數後,我們就可以得到b:
$$
b=\begin{cases}
b_1 && 0<\alpha_1^{new}<C
\
b_2 && 0<\alpha_2^{new}<C
\
(b_1+b_2)/2 &&otherwise\end{cases}
$$
這就完成了!根據b算出w,ok!
具體推導參見我的github:
https://github.com/Brian-Liew/Machine-Learning