1. 程式人生 > >支援向量機SVM及Demo(轉載)

支援向量機SVM及Demo(轉載)

1 簡介

支援向量機基本上是最好的有監督學習演算法了。最開始接觸SVM是去年暑假的時候,老師要求交《統計學習理論》的報告,那時去網上下了一份入門教程,裡面講的很通俗,當時只是大致瞭解了一些相關概念。這次斯坦福提供的學習材料,讓我重新學習了一些SVM知識。我看很多正統的講法都是從VC 維理論和結構風險最小原理出發,然後引出SVM什麼的,還有些資料上來就講分類超平面什麼的。這份材料從前幾節講的logistic迴歸出發,引出了SVM,既揭示了模型間的聯絡,也讓人覺得過渡更自然。

2 重新審視logistic迴歸

Logistic迴歸目的是從特徵學習出一個0/1分類模型,而這個模型是將特性的線性組合作為自變數,由於自變數的取值範圍是負無窮到正無窮。因此,使用logistic函式(或稱作sigmoid函式)將自變數對映到(0,1)上,對映後的值被認為是屬於y=1的概率。

形式化表示就是

假設函式

clip_image001

其中x是n維特徵向量,函式g就是logistic函式。

clip_image002的影象是

clip_image003

可以看到,將無窮對映到了(0,1)。

而假設函式就是特徵屬於y=1的概率。

clip_image004

當我們要判別一個新來的特徵屬於哪個類時,只需求clip_image006,若大於0.5就是y=1的類,反之屬於y=0類。

再審視一下clip_image006[1],發現clip_image006[2]只和clip_image008有關,clip_image008[1]>0,那麼clip_image010,g(z)只不過是用來對映,真實的類別決定權還在clip_image008[2]。還有當clip_image012時,clip_image006[3]=1,反之clip_image006[4]=0。如果我們只從clip_image008[3]出發,希望模型達到的目標無非就是讓訓練資料中y=1的特徵clip_image012[1],而是y=0的特徵clip_image014。Logistic迴歸就是要學習得到clip_image016,使得正例的特徵遠大於0,負例的特徵遠小於0,強調在全部訓練例項上達到這個目標。

圖形化表示如下:

clip_image017

中間那條線是clip_image019,logistic回顧強調所有點儘可能地遠離中間那條線。學習出的結果也就中間那條線。考慮上面3個點A、B和C。從圖中我們可以確定A是×類別的,然而C我們是不太確定的,B還算能夠確定。這樣我們可以得出結論,我們更應該關心靠近中間分割線的點,讓他們儘可能地遠離中間線,而不是在所有點上達到最優。因為那樣的話,要使得一部分點靠近中間線來換取另外一部分點更加遠離中間線。我想這就是支援向量機的思路和logistic迴歸的不同點,一個考慮區域性(不關心已經確定遠離的點),一個考慮全域性(已經遠離的點可能通過調整中間線使其能夠更加遠離)。這是我的個人直觀理解。

3 形式化表示

我們這次使用的結果標籤是y=-1,y=1,替換在logistic迴歸中使用的y=0和y=1。同時將clip_image016[1]替換成w和b。以前的clip_image021,其中認為clip_image023。現在我們替換clip_image025為b,後面替換clip_image027clip_image029(即clip_image031)。這樣,我們讓clip_image033,進一步clip_image035。也就是說除了y由y=0變為y=-1,只是標記不同外,與logistic迴歸的形式化表示沒區別。再明確下假設函式

clip_image037

上一節提到過我們只需考慮clip_image008[4]的正負問題,而不用關心g(z),因此我們這裡將g(z)做一個簡化,將其簡單對映到y=-1和y=1上。對映關係如下:

clip_image039

4 函式間隔(functional margin)和幾何間隔(geometric margin)

給定一個訓練樣本clip_image041,x是特徵,y是結果標籤。i表示第i個樣本。我們定義函式間隔如下:

clip_image043

可想而知,當clip_image045時,在我們的g(z)定義中,clip_image047clip_image049的值實際上就是clip_image051。反之亦然。為了使函式間隔最大(更大的信心確定該例是正例還是反例),當clip_image045[1]時,clip_image053應該是個大正數,反之是個大負數。因此函式間隔代表了我們認為特徵是正例還是反例的確信度。

繼續考慮w和b,如果同時加大w和b,比如在clip_image055前面乘個係數比如2,那麼所有點的函式間隔都會增大二倍,這個對求解問題來說不應該有影響,因為我們要求解的是clip_image057,同時擴大w和b對結果是無影響的。這樣,我們為了限制w和b,可能需要加入歸一化條件,畢竟求解的目標是確定唯一一個w和b,而不是多組線性相關的向量。這個歸一化一會再考慮。

剛剛我們定義的函式間隔是針對某一個樣本的,現在我們定義全域性樣本上的函式間隔

clip_image058

說白了就是在訓練樣本上分類正例和負例確信度最小那個函式間隔。

接下來定義幾何間隔,先看圖

clip_image059

假設我們有了B點所在的clip_image057[1]分割面。任何其他一點,比如A到該面的距離以clip_image061表示,假設B就是A在分割面上的投影。我們知道向量BA的方向是clip_image063(分割面的梯度),單位向量是clip_image065。A點是clip_image041[1],所以B點是x=clip_image067(利用初中的幾何知識),帶入clip_image057[2]得,

clip_image069

進一步得到

clip_image070

clip_image061[1]實際上就是點到平面距離。

再換種更加優雅的寫法:

clip_image071

clip_image073時,不就是函式間隔嗎?是的,前面提到的函式間隔歸一化結果就是幾何間隔。他們為什麼會一樣呢?因為函式間隔是我們定義的,在定義的時候就有幾何間隔的色彩。同樣,同時擴大w和b,w擴大幾倍,clip_image075就擴大幾倍,結果無影響。同樣定義全域性的幾何間隔clip_image076

5 最優間隔分類器(optimal margin classifier)

回想前面我們提到我們的目標是尋找一個超平面,使得離超平面比較近的點能有更大的間距。也就是我們不考慮所有的點都必須遠離超平面,我們關心求得的超平面能夠讓所有點中離它最近的點具有最大間距。形象的說,我們將上面的圖看作是一張紙,我們要找一條折線,按照這條折線摺疊後,離折線最近的點的間距比其他折線都要大。形式化表示為:

clip_image077

這裡用clip_image075[1]=1規約w,使得clip_image079是幾何間隔。

到此,我們已經將模型定義出來了。如果求得了w和b,那麼來一個特徵x,我們就能夠分類了,稱為最優間隔分類器。接下的問題就是如何求解w和b的問題了。

由於clip_image081不是凸函式,我們想先處理轉化一下,考慮幾何間隔和函式間隔的關係,clip_image083,我們改寫一下上面的式子:

clip_image084

這時候其實我們求的最大值仍然是幾何間隔,只不過此時的w不受clip_image081[1]的約束了。然而這個時候目標函式仍然不是凸函式,沒法直接代入優化軟體裡計算。我們還要改寫。前面說到同時擴大w和b對結果沒有影響,但我們最後要求的仍然是w和b的確定值,不是他們的一組倍數值,因此,我們需要對clip_image086做一些限制,以保證我們解是唯一的。這裡為了簡便我們取clip_image088。這樣的意義是將全域性的函式間隔定義為1,也即是將離超平面最近的點的距離定義為clip_image090。由於求clip_image090[1]的最大值相當於求clip_image092的最小值,因此改寫後結果為:

clip_image093

這下好了,只有線性約束了,而且是個典型的二次規劃問題(目標函式是自變數的二次函式)。代入優化軟體可解。

到這裡發現,這個講義雖然沒有像其他講義一樣先畫好圖,畫好分類超平面,在圖上標示出間隔那麼直觀,但每一步推導有理有據,依靠思路的流暢性來推匯出目標函式和約束。

6 拉格朗日對偶(Lagrange duality)

     先拋開上面的二次規劃問題,先來看看存在等式約束的極值問題求法,比如下面的最優化問題:

    clip_image001[9]    

    目標函式是f(w),下面是等式約束。通常解法是引入拉格朗日運算元,這裡使用clip_image003[14]來表示運算元,得到拉格朗日公式為

    clip_image004[6]    

    L是等式約束的個數。

    然後分別對w和clip_image003[15]求偏導,使得偏導數等於0,然後解出w和clip_image006[6]。至於為什麼引入拉格朗日運算元可以求出極值,原因是f(w)的dw變化方向受其他不等式的約束,dw的變化方向與f(w)的梯度垂直時才能獲得極值,而且在極值處,f(w)的梯度與其他等式梯度的線性組合平行,因此他們之間存線上性關係。(參考《最優化與KKT條件》)

然後我們探討有不等式約束的極值問題求法,問題如下:

    clip_image007[6]    

    我們定義一般化的拉格朗日公式

clip_image008[6]

    這裡的clip_image010[50]clip_image012[14]都是拉格朗日運算元。如果按這個公式求解,會出現問題,因為我們求解的是最小值,而這裡的clip_image014[6]已經不是0了,我們可以將clip_image010[51]調整成很大的正值,來使最後的函式結果是負無窮。因此我們需要排除這種情況,我們定義下面的函式:

    clip_image015[6]

    這裡的P代表primal。假設clip_image017[6]或者clip_image019[6],那麼我們總是可以調整clip_image010[52]clip_image012[15]來使得clip_image021[10]有最大值為正無窮。而只有g和h滿足約束時,clip_image021[11]為f(w)。這個函式的精妙之處在於clip_image023[6],而且求極大值。

    因此我們可以寫作

    clip_image024[6]

    這樣我們原來要求的min f(w)可以轉換成求clip_image026[10]了。    

    clip_image027[6]

    我們使用clip_image029[6]來表示clip_image026[11]。如果直接求解,首先面對的是兩個引數,而clip_image010[53]也是不等式約束,然後再在w上求最小值。這個過程不容易做,那麼怎麼辦呢?

    我們先考慮另外一個問題clip_image030[6]

    D的意思是對偶,clip_image031[10]將問題轉化為先求拉格朗日關於w的最小值,將clip_image033[6]clip_image003[16]看作是固定值。之後在clip_image031[11]求最大值的話:

clip_image034[6]

    這個問題是原問題的對偶問題,相對於原問題只是更換了min和max的順序,而一般更換順序的結果是Max Min(X) <= MinMax(X)。然而在這裡兩者相等。用clip_image036[6]來表示對偶問題如下:

    clip_image037[6]

    下面解釋在什麼條件下兩者會等價。假設f和g都是凸函式,h是仿射的(affine,clip_image038[6])。並且存在w使得對於所有的i,clip_image040[10]。在這種假設下,一定存在clip_image042[14]使得clip_image044[14]是原問題的解,clip_image046[6]是對偶問題的解。還有clip_image047[6]另外,clip_image042[15]滿足庫恩-塔克條件(Karush-Kuhn-Tucker, KKT condition),該條件如下:

    clip_image048[6]

    所以如果clip_image042[16]滿足了庫恩-塔克條件,那麼他們就是原問題和對偶問題的解。讓我們再次審視公式(5),這個條件稱作是KKT dual complementarity條件。這個條件隱含了如果clip_image050[6],那麼clip_image052[10]。也就是說,clip_image052[11]時,w處於可行域的邊界上,這時才是起作用的約束。而其他位於可行域內部(clip_image054[6]的)點都是不起作用的約束,其clip_image056[6]。這個KKT雙重補足條件會用來解釋支援向量和SMO的收斂測試。

    這部分內容思路比較凌亂,還需要先研究下《非線性規劃》中的約束極值問題,再回頭看看。KKT的總體思想是將極值會在可行域邊界上取得,也就是不等式為0或等式約束裡取得,而最優下降方向一般是這些等式的線性組合,其中每個元素要麼是不等式為0的約束,要麼是等式約束。對於在可行域邊界內的點,對最優解不起作用,因此前面的係數為0。

7 最優間隔分類器(optimal margin classifier)

    重新回到SVM的優化問題:

    clip_image057[6]

    我們將約束條件改寫為:

    clip_image058[6]

    從KKT條件得知只有函式間隔是1(離超平面最近的點)的線性約束式前面的係數clip_image060[14],也就是說這些約束式clip_image062[6],對於其他的不在線上的點(clip_image064[6]),極值不會在他們所在的範圍內取得,因此前面的係數clip_image066[14].注意每一個約束式實際就是一個訓練樣本。

    看下面的圖:

    clip_image067[6]

    實線是最大間隔超平面,假