我是搬運工:http://my.oschina.net/wangguolongnk/blog/111353
支持向量機的原理很簡單,就是VC維理論和最小化結構風險。在閱讀相關論文的時候,發現很多文 章都語焉不詳,就連《A Tutorial on Support Vector Machines for Pattern Recognition》這篇文章對拉格朗日條件極值問題的對偶變換都只是一筆帶過,讓很多人覺得很困惑。下面我將就SVM對線性可分的情況作詳盡的推 導。
如上圖所示,有一堆訓練數據的正負樣本,標記為:,假設有一個超平面H:
,可以把這些樣本正確無誤地分割開來,同時存在兩個平行於H的超平面H1和H2:
使離H最近的正負樣本剛好分別落在H1和H2上,這樣的樣本就是支持向量。那么其他所有的訓練樣本都將位於H1和H2之外,也就是滿足如下約束:
寫成統一的式子就是:
而超平面H1和H2的距離可知為:
SVM的任務就是尋找這樣一個超平面H把樣本無誤地分割成兩部分,並且使H1和H2的距離最大。要找到這樣的超平面,只需最大化間隔Margin,也就是最小化。於是可以構造如下的條件極值問題:
對於不等式約束的條件極值問題,可以用拉格朗日方法求解。而拉格朗日方程的構造規則是:用約束方程乘以非負的拉格朗日系數,然后再從目標函數中減去。於是得到拉格朗日方程如下:
其中:
那么我們要處理的規划問題就變為:
上式才是嚴格的不等式約束的拉格朗日條件極值的表達式。對於這一步的變換,很多文章都沒有多做表述,或者理解有偏差,從而影響了讀者后續的推演。在此我將詳細地一步步推導,以解困惑。
(5)式是一個凸規划問題,其意義是先對α求偏導,令其等於0消掉α,然后再對w和b求L的最小值。要直接求解(5)式是有難度的,通過消去拉格朗日系數來化簡方程,對我們的問題無濟於事。所幸這個問題可以通過拉格朗日對偶問題來解決,為此我們把(5)式做一個等價變換:
上式即為對偶變換,這樣就把這個凸規划問題轉換成了對偶問題:
其意義是:原凸規划問題可以轉化為先對w和b求偏導,令其等於0消掉w和b,然后再對α求L的最大值。下面我們就來求解(6)式,為此我們先計算w和b的偏導數。由(3)式有:
為了讓L在w和b上取到最小值,令(7)式的兩個偏導數分別為0,於是得到:
將(8)代回(3)式,可得:
再把(9)代入(6)式有:
考慮到(8)式,我們的對偶問題就變為:
上式這個規划問題可以直接從數值方法計算求解。
需要指出的一點是,(2)式的條件極值問題能夠轉化為(5)式的凸規划問題,其中隱含着一個約束,即:
這個約束是這樣得來的,如果(2)和(5)等效,必有:
把(3)式代入上式中,得到:
化簡得到:
又因為約束(1)式和(4)式,有:
所以要使(13)式成立,只有令:,由此得到(12)式的約束。該約束的意義是:如果一個樣本是支持向量,則其對應的拉格朗日系數非零;如果一個樣本不是支持向量,則其對應的拉格朗日系數一定為0。由此可知大多數拉格朗日系數都是0。
一旦我們從(11)式求解出所有拉格朗日系數,就可以通過(8)式的
計算得到最優分割面H的法向量w。而分割閾值b也可以通過(12)式的約束用支持向量計算出來。這樣我們就找到了最優的H1和H2,這就是我們訓練出來的SVM。