支援向量機SVM及Demo(轉載)
1 簡介
支援向量機基本上是最好的有監督學習演算法了。最開始接觸SVM是去年暑假的時候,老師要求交《統計學習理論》的報告,那時去網上下了一份入門教程,裡面講的很通俗,當時只是大致瞭解了一些相關概念。這次斯坦福提供的學習材料,讓我重新學習了一些SVM知識。我看很多正統的講法都是從VC 維理論和結構風險最小原理出發,然後引出SVM什麼的,還有些資料上來就講分類超平面什麼的。這份材料從前幾節講的logistic迴歸出發,引出了SVM,既揭示了模型間的聯絡,也讓人覺得過渡更自然。
2 重新審視logistic迴歸
Logistic迴歸目的是從特徵學習出一個0/1分類模型,而這個模型是將特性的線性組合作為自變數,由於自變數的取值範圍是負無窮到正無窮。因此,使用logistic函式(或稱作sigmoid函式)將自變數對映到(0,1)上,對映後的值被認為是屬於y=1的概率。
形式化表示就是
假設函式
其中x是n維特徵向量,函式g就是logistic函式。
可以看到,將無窮對映到了(0,1)。
而假設函式就是特徵屬於y=1的概率。
當我們要判別一個新來的特徵屬於哪個類時,只需求,若大於0.5就是y=1的類,反之屬於y=0類。
再審視一下,發現只和有關,>0,那麼,g(z)只不過是用來對映,真實的類別決定權還在。還有當時,=1,反之=0。如果我們只從出發,希望模型達到的目標無非就是讓訓練資料中y=1的特徵,而是y=0的特徵。Logistic迴歸就是要學習得到,使得正例的特徵遠大於0,負例的特徵遠小於0,強調在全部訓練例項上達到這個目標。
圖形化表示如下:
中間那條線是,logistic回顧強調所有點儘可能地遠離中間那條線。學習出的結果也就中間那條線。考慮上面3個點A、B和C。從圖中我們可以確定A是×類別的,然而C我們是不太確定的,B還算能夠確定。這樣我們可以得出結論,我們更應該關心靠近中間分割線的點,讓他們儘可能地遠離中間線,而不是在所有點上達到最優。因為那樣的話,要使得一部分點靠近中間線來換取另外一部分點更加遠離中間線。我想這就是支援向量機的思路和logistic迴歸的不同點,一個考慮區域性(不關心已經確定遠離的點),一個考慮全域性(已經遠離的點可能通過調整中間線使其能夠更加遠離)。這是我的個人直觀理解。
3 形式化表示
我們這次使用的結果標籤是y=-1,y=1,替換在logistic迴歸中使用的y=0和y=1。同時將替換成w和b。以前的,其中認為。現在我們替換為b,後面替換為(即)。這樣,我們讓,進一步。也就是說除了y由y=0變為y=-1,只是標記不同外,與logistic迴歸的形式化表示沒區別。再明確下假設函式
上一節提到過我們只需考慮的正負問題,而不用關心g(z),因此我們這裡將g(z)做一個簡化,將其簡單對映到y=-1和y=1上。對映關係如下:
4 函式間隔(functional margin)和幾何間隔(geometric margin)
給定一個訓練樣本,x是特徵,y是結果標籤。i表示第i個樣本。我們定義函式間隔如下:
可想而知,當時,在我們的g(z)定義中,,的值實際上就是。反之亦然。為了使函式間隔最大(更大的信心確定該例是正例還是反例),當時,應該是個大正數,反之是個大負數。因此函式間隔代表了我們認為特徵是正例還是反例的確信度。
繼續考慮w和b,如果同時加大w和b,比如在前面乘個係數比如2,那麼所有點的函式間隔都會增大二倍,這個對求解問題來說不應該有影響,因為我們要求解的是,同時擴大w和b對結果是無影響的。這樣,我們為了限制w和b,可能需要加入歸一化條件,畢竟求解的目標是確定唯一一個w和b,而不是多組線性相關的向量。這個歸一化一會再考慮。
剛剛我們定義的函式間隔是針對某一個樣本的,現在我們定義全域性樣本上的函式間隔
說白了就是在訓練樣本上分類正例和負例確信度最小那個函式間隔。
接下來定義幾何間隔,先看圖
假設我們有了B點所在的分割面。任何其他一點,比如A到該面的距離以表示,假設B就是A在分割面上的投影。我們知道向量BA的方向是(分割面的梯度),單位向量是。A點是,所以B點是x=(利用初中的幾何知識),帶入得,
進一步得到
再換種更加優雅的寫法:
當時,不就是函式間隔嗎?是的,前面提到的函式間隔歸一化結果就是幾何間隔。他們為什麼會一樣呢?因為函式間隔是我們定義的,在定義的時候就有幾何間隔的色彩。同樣,同時擴大w和b,w擴大幾倍,就擴大幾倍,結果無影響。同樣定義全域性的幾何間隔
5 最優間隔分類器(optimal margin classifier)
回想前面我們提到我們的目標是尋找一個超平面,使得離超平面比較近的點能有更大的間距。也就是我們不考慮所有的點都必須遠離超平面,我們關心求得的超平面能夠讓所有點中離它最近的點具有最大間距。形象的說,我們將上面的圖看作是一張紙,我們要找一條折線,按照這條折線摺疊後,離折線最近的點的間距比其他折線都要大。形式化表示為:
到此,我們已經將模型定義出來了。如果求得了w和b,那麼來一個特徵x,我們就能夠分類了,稱為最優間隔分類器。接下的問題就是如何求解w和b的問題了。
由於不是凸函式,我們想先處理轉化一下,考慮幾何間隔和函式間隔的關係,,我們改寫一下上面的式子:
這時候其實我們求的最大值仍然是幾何間隔,只不過此時的w不受的約束了。然而這個時候目標函式仍然不是凸函式,沒法直接代入優化軟體裡計算。我們還要改寫。前面說到同時擴大w和b對結果沒有影響,但我們最後要求的仍然是w和b的確定值,不是他們的一組倍數值,因此,我們需要對做一些限制,以保證我們解是唯一的。這裡為了簡便我們取。這樣的意義是將全域性的函式間隔定義為1,也即是將離超平面最近的點的距離定義為。由於求的最大值相當於求的最小值,因此改寫後結果為:
這下好了,只有線性約束了,而且是個典型的二次規劃問題(目標函式是自變數的二次函式)。代入優化軟體可解。
到這裡發現,這個講義雖然沒有像其他講義一樣先畫好圖,畫好分類超平面,在圖上標示出間隔那麼直觀,但每一步推導有理有據,依靠思路的流暢性來推匯出目標函式和約束。
6 拉格朗日對偶(Lagrange duality)
先拋開上面的二次規劃問題,先來看看存在等式約束的極值問題求法,比如下面的最優化問題:
目標函式是f(w),下面是等式約束。通常解法是引入拉格朗日運算元,這裡使用來表示運算元,得到拉格朗日公式為
L是等式約束的個數。
然後分別對w和求偏導,使得偏導數等於0,然後解出w和。至於為什麼引入拉格朗日運算元可以求出極值,原因是f(w)的dw變化方向受其他不等式的約束,dw的變化方向與f(w)的梯度垂直時才能獲得極值,而且在極值處,f(w)的梯度與其他等式梯度的線性組合平行,因此他們之間存線上性關係。(參考《最優化與KKT條件》)
然後我們探討有不等式約束的極值問題求法,問題如下:
我們定義一般化的拉格朗日公式
這裡的和都是拉格朗日運算元。如果按這個公式求解,會出現問題,因為我們求解的是最小值,而這裡的已經不是0了,我們可以將調整成很大的正值,來使最後的函式結果是負無窮。因此我們需要排除這種情況,我們定義下面的函式:
這裡的P代表primal。假設或者,那麼我們總是可以調整和來使得有最大值為正無窮。而只有g和h滿足約束時,為f(w)。這個函式的精妙之處在於,而且求極大值。
因此我們可以寫作
我們使用來表示。如果直接求解,首先面對的是兩個引數,而也是不等式約束,然後再在w上求最小值。這個過程不容易做,那麼怎麼辦呢?
D的意思是對偶,將問題轉化為先求拉格朗日關於w的最小值,將和看作是固定值。之後在求最大值的話:
這個問題是原問題的對偶問題,相對於原問題只是更換了min和max的順序,而一般更換順序的結果是Max Min(X) <= MinMax(X)。然而在這裡兩者相等。用來表示對偶問題如下:
下面解釋在什麼條件下兩者會等價。假設f和g都是凸函式,h是仿射的(affine,)。並且存在w使得對於所有的i,。在這種假設下,一定存在使得是原問題的解,是對偶問題的解。還有另外,滿足庫恩-塔克條件(Karush-Kuhn-Tucker, KKT condition),該條件如下:
所以如果滿足了庫恩-塔克條件,那麼他們就是原問題和對偶問題的解。讓我們再次審視公式(5),這個條件稱作是KKT dual complementarity條件。這個條件隱含了如果,那麼。也就是說,時,w處於可行域的邊界上,這時才是起作用的約束。而其他位於可行域內部(的)點都是不起作用的約束,其。這個KKT雙重補足條件會用來解釋支援向量和SMO的收斂測試。
這部分內容思路比較凌亂,還需要先研究下《非線性規劃》中的約束極值問題,再回頭看看。KKT的總體思想是將極值會在可行域邊界上取得,也就是不等式為0或等式約束裡取得,而最優下降方向一般是這些等式的線性組合,其中每個元素要麼是不等式為0的約束,要麼是等式約束。對於在可行域邊界內的點,對最優解不起作用,因此前面的係數為0。
7 最優間隔分類器(optimal margin classifier)
重新回到SVM的優化問題:
我們將約束條件改寫為:
從KKT條件得知只有函式間隔是1(離超平面最近的點)的線性約束式前面的係數,也就是說這些約束式,對於其他的不在線上的點(),極值不會在他們所在的範圍內取得,因此前面的係數.注意每一個約束式實際就是一個訓練樣本。
看下面的圖:
實線是最大間隔超平面,假