1. 程式人生 > >機器學習實戰【5】(SVM-支援向量機)

機器學習實戰【5】(SVM-支援向量機)

本部落格記錄《機器學習實戰》(MachineLearningInAction)的學習過程,包括演算法介紹和python實現。

SVM(支援向量機)

SVM是一種分類演算法,通過對訓練集資料的分析找到最好的分隔平面,然後用該平面對新資料進行分類。本篇文章介紹SVM的總體思路,通過一些數學推導把初始問題不斷簡化,最後轉化為一個比較簡單的二次優化問題。

線性二分類器

設想二維平面上的一組資料點,分為兩個類別:

用平面上的直線wx+b=0(w和x是向量)來對資料進行分類,而SVM的目的就是找到最好的一條直線。這條直線需要滿足兩個條件,一是把兩類資料完全分開,即同一類的資料落在直線的一邊,二是兩類資料中最靠近直線的那些點(稱為支援向量)離直線的距離必須儘可能的大。在圖中直觀的體現就是直線兩邊的空白間隔區儘可能地大。

幾何間隔

點到直線的距離(推廣到高階就是點到超平面的距離)稱為幾何間隔(Geometrical margin),計算公式如下,其中的分子y(wx+b)稱為函式間隔:

g=y(wx+b)||w||
上式中的y表示資料點的類別,在直線上方的點類別為1,下方為-1,這使得有錯誤分類點的那些直線會得到負的幾何間隔,從而被篩選掉。
現在我們可以通過幾何間隔來描述最優直線的條件,設g是資料集中離直線最近的點到直線的幾何間隔,gi表示某個資料點到直線的幾何間隔,則問題描述為:
maxg,s.t.,gig
即最大化資料集中最小的幾何間隔。
接著繼續對問題進行簡化,函式間隔的大小可以通過成倍地改變w來改變,直線本身卻不會變化,這意味可以取合適的值使得這些支援向量與直線的函式間隔為1,這樣,問題就變成:
max
1||w||,s.t.,yi(wxi+b)1

進一步分析,該式又等價於:
min12||w||2,s.t.,yi(wxi+b)1
這是一個帶約束的二次優化問題,可以通過拉格朗日對偶的方法來解決。

拉格朗日對偶

通過引入拉格朗日乘子把條件統一到式子中進行優化,構造拉格朗日函式,其中α>0

L(w,b,α)=12||w||2i=1nαi(yi(wxi+b)1)
α作為自變數求取該式的最大值,可以得到:
maxα:αi>0L(w,b,α)={12||w||2,,滿
這樣,問題:
min12||w||2,s.t.,yi(wxi+b)1
就等價於問題:
min
w,b
maxα:αi0L(w,b,α)

即先以α為變數最大化拉格朗日函式,再以w,b為變數將其最小化。
交換求最值的順序,得到原問題的對偶問題:
maxα:αi0minw,bL(w,b,α)
這個對偶問題更易求解,並且在滿足kkt條件的情況下,兩者的解相同,於是問題又轉化為求對偶問題的解。
首先固定α求解函式值最小化時的引數w,b。分別另函式對wb的導數為0,分別得到:
w=i=1naiyixi
i=1naiyi=0
把這兩個式子帶回原式經過一番化簡,消去w,b得到:
L(w,b,α)=i=1nαi