支持向量機SVM(一)

原文地址爲: 支持向量機SVM(一)

【轉載請註明出處】http://www.cnblogs.com/jerrylead
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

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

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

接下來介紹的是手工求解的方法了,一種更優的求解方法。


轉載請註明本文地址: 支持向量機SVM(一)