機器學習——支持向量機(SVM)復講

機器學習——支持向量機(SVM)復講

之前做了支持向量機的筆記,過了這幾天,覺得又有點忘了,重新拿起來複習一遍,然後作了一個更加精簡的筆記,應該會更容易懂。

支持向量機在解決什麼問題:

支持向量機和很多機器學習的算法一樣,是針對分類的一種算法,最簡單的理解就是線性二分類,如下圖:

在這裏插入圖片描述

這副圖其實就很概括性地理解了支持向量機的分類原理,什麼樣的分類間隔面纔是合理並且最優的呢?顯然是與兩堆類別間隔最大的分隔面,說到底,SVM的原理就是一直在求、並且推導怎麼得到這個最大間隔的分類面的參數,在這裏,我們首先理解線性分類的參數,因爲它是我們上手的基礎。

間隔表示

爲了最小化這個間隔,我們根據空間矢量的距離公式可以得到我們的目標函數(就是距離公式,不要說高中的距離公式都不會吧?可以看我上一篇具體有公式),然後由上圖可以知道(wTxi+b)=1(w^Tx_i+b)=1,支持向量上的點滿足圖上表示的公式,代入其實就是最小化ω\omega,沒錯,就是這麼簡單的目標,線性可分的支持向量機目標就是最小化這個ω\omega

當然我們還有約束條件,就是分類正確(如上圖所示),應該滿足:
s.t.yi(wTxi+b)1 s.t.y_i(w^Tx_i+b)\geq1
怎麼會有這個公式?看圖!分類正確就是滿足這個公式,這個很好理解。

明顯上面提供了兩個條件,一個式子要最小化,一個約束條件,那麼我們就遇到優化問題了。很好,拉格朗日函數來了。

拉格朗日函數優化:

之前看這個的時候,看到一篇寫得很簡單但很透徹的文章:

https://www.jianshu.com/p/47986a0b1bf1

它講拉格朗日式子爲什麼要這麼構造講得很好,其實懂了這個你根本不要看我上一篇列的式子,因爲你根據上面的目標和約束條件,任何人都能構造出我們所要得到的函數,然後它也說到對偶性這個東西,我們就是根據這個轉化這個式子,然後應該滿足KKT條件,這個可以看我的上一篇具體講述。

總之你只要懂得我們根據約束條件和目標函數列出拉格朗日函數,進行對偶、滿足KKT、求導爲零得到了:
Lw=0w=1nαiyixiLb=01nαiyi=0 \frac{\partial L}{\partial w}=0\rightarrow w=\sum_1^n\alpha_iy_ix_i \\ \frac{\partial L}{\partial b}=0\rightarrow\sum_1^n\alpha_iy_i=0
代入目標函數:
maxα1nαi12i,j=1nαiαjyiyjxiTxjs.t.αi0,i=1,2,...n1nαiyi=0 \max_\alpha\sum_1^n\alpha_i-\frac{1}{2}\sum_{i,j=1}^n\alpha_i\alpha_jy_iy_jx_i^Tx_j \\ s.t.\alpha_i\geq0,i=1,2,...n \\ \sum_1^n\alpha_iy_i=0
沒錯,還是這麼簡單,就是求了導的含約束條件的目標函數,我們就是要進行alpha的求解。

SMO算法:

其實SMO算是比較複雜的一步了,因爲前面都是簡單的一步步順承下來的,接下來是通過不斷更新alpha來得到最後的結果。

接下來,因爲我們通過兩個alpha值來不斷更新,所以把原來的目標函數進行拆分,然後化成最後的更新公式(這其中的都是簡單的的換元推導):
α2new=α2old+y2(E1E2)ηEi=f(xi)yiη=x1Tx1+x2Tx22x1Tx2 \alpha2^{new}=\alpha_2^{old}+\frac{y_2(E_1-E_2)}{\eta}\\ E_i=f(x_i)-y_i \\ \eta=x_1^Tx_1+x_2^Tx_2-2x_1^Tx_2
也就是說我們首先需要得到誤差E,得到學習率eta,然後進行更新第二個參數,因爲我們考慮了軟判決(我們對分類給了一個可浮動的判決空間),所以添加了冗餘量,使得我們需要對這個參數有一個上下限的修正,然後根據第二個參數更新第一個參數:
α1new=α1old+y1y2(α2oldα2new,clipped) \alpha_1^{new}=\alpha_1^{old}+y_1y_2(\alpha_2old-\alpha_2^{new,clipped})
得到這兩個參數後,我們就可以得到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

發佈了12 篇原創文章 · 獲贊 9 · 訪問量 2715
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章