SVM是機器學習中神通常的存在,雖然自深度學習以來有被拉下神壇的趨勢,但不得不說SVM在這個領域有着舉足輕重的地位。本文從Hard SVM 到 Dual Hard SVM再引進Kernel Trick,而後推廣到經常使用的Soft Kernel SVM。算法
1、Hard SVM機器學習
SVM自己是從感知機算法演變而來,感知機算法是在一個線性可分的數據集中找到一個分類超平面,儘量的將數據集劃分開,理論上這樣的超平面有無數多個,可是從直覺上,咱們知道離兩側數據都比較遠的超平面更適合用於分類,因而咱們選擇了一個比較「胖」的邊界的超平面做爲分類界,這就是SVM。函數
咱們知道一個超平面wx+b=0,w是這個超平面的法向量,則平面外一點到這個平面的距離爲:d=1/||W||*|WTx+b|(解析幾何的知識)。絕對值符號會致使函數不平滑,又由於數據集是線性可分的,因此咱們能夠把距離公式改寫爲:d=1/||W||*yi·(WTxi+b)(具體能夠參考感知機)。那麼咱們就有了最基本的優化對象:學習
maxw,b margin(b,w)優化
subject to:for every n yi·(WTxi+b)>0spa
margin(b,w) = minw,b d對象
咱們知道同時放縮一個超平面的係數並不會改變這個超平面,such as 3wx+3b=0=wx+b,因此咱們能夠假設離咱們超平面最近的那個向量到平面的距離爲1,即讓yi·(WTxi+b)=1,那麼原來的優化問題就變爲了:深度學習
maxw,b 1/||W||io
subject to:for every n yi·(WTxi+b)>0 (已經知足)效率
mini yi·(WTxi+b)≥1
最大化問題不是很好解決,咱們能夠轉換爲咱們熟悉最小化問題:
minw,b 0.5*WT*W
subject to:mini yi·(WTxi+b)≥1
很明顯這是一個二次規劃問題,咱們有成熟的算法如SMO,來解決這樣的問題。
2、Dual SVM
對於一個已經解決的問題,爲何咱們還要考慮它的對偶問題?這是由於化做對偶問題後會更容易求解,一樣也方便引入Kernel Trick。
考慮原始SVM問題:
minw,b 0.5*WT*W
subject to:all i yi·(WTxi+b)≥1
咱們改變其形式,轉化爲:
minw,b(maxall α>0 0.5*WT*W+∑α(1-yi·(WTxi+b)))
咱們發現若是知足了條件α的值會變成0,若是不知足就會變成+∞,以此來約束咱們的條件。而後咱們從極小極大的問題轉換爲極大極小的問題。
minw,b(maxall α>0 0.5*WT*W+∑α(1-yi·(WTxi+b))) ≥ minw,b(0.5*WT*W+∑α(1-yi·(WTxi+b))
minw,b(0.5*WT*W+∑α(1-yi·(WTxi+b))≥maxall α>0(minw,b 0.5*WT*W+∑α(1-yi·(WTxi+b)))
而maxall α>0(minw,b 0.5*WT*W+∑α(1-yi·(WTxi+b)))就是咱們的Lagrange Dual Problem。這是咱們原問題的一個下界,那麼何時可以取得等號呢?根據拉格朗日對偶問題,當優化函數和條件是凸函數時,對偶問題是原問題的解的充要條件即爲KKT 條件。而後咱們求解對偶問題的極小問題,對w,b求偏導,令其等於0,獲得結果爲
L(w,b,α)=-0.5*||∑αyx||2+∑α
咱們就能夠來解決極大問題了,原始優化問題就能夠轉化爲:
maxall α>0 ∑yα = 0 w=∑αyx -0.5*||∑αyx||2+∑α
這顯然又是一個二次規劃問題!因此就能夠求解了,而後用KKT條件來求解w,b。這就是對偶問題的求解方案。
3、Kernel Trick
當數據不是線性可分的,那麼SVM就失去了做用,可是咱們能夠尋找一種函數將數據映射到更高維的空間中,以此把問題變成一個線性可分的問題,可是這會帶來維度的急劇上升,使得模型求解效率大大降低,而Kernel Trick就是爲了解決這樣的問題而出現的!(下回補完!)
4、Soft SVM