手把手教你如何由淺入深地理解線性SVM模型

  • 2019 年 10 月 4 日
  • 筆記

01

SMV的思想

SVM模型的核心是構造一個「超平面」,並利用「超平面」將不同類別的數據做劃分。問題是「超平面」該如何構造,並且如何從無數多個分割面中挑選出最佳的「超平面」,只有當這些問題解決了,SVM模型才能夠起到理想的分類效果。

為了直觀展現,接下來將以二維數據為例,討論一個線性可分的例子,進而使讀者理解SVM模型背後的理論思想。

如下圖所示,兩個類別的樣本點之間存在很明顯的區分度,完全可以通過直線將其分割開來。例如,圖中繪製了兩條分割直線,利用這兩條直線,可以方便地將樣本點所屬的類別判斷出來。雖然從直觀上來看這兩條分割線都沒有問題,但是哪一條直線的分類效果更佳呢(訓練樣本點的分類效果一致,並不代表測試樣本點的分類效果也一樣)?甚至於在直線

之間還存在無數多個分割直線,那麼在這麼多的分割線中是否存在一條最優的「超平面」呢?

進一步,可以對照下圖理解如何選擇最優「超平面」。假設直線

之間的某條直線,它同樣可以將兩類樣本點準確無誤地劃分出來。為了能夠尋找到最優的分割面

,需要做三件事,首先計算兩個類別中的樣本點到直線

的距離;然後從兩組距離中各挑選出一個最短的(如圖中所示的距離

,繼續比較

,再選出最短的距離(如圖中的

),並以該距離構造「分割帶」(如圖中經平移後的兩條虛線);最後利用無窮多個分割直線

,構造無窮多個「分割帶」,並從這些「分割帶」中挑選出頻寬最大的

這裡需要解釋的是,為什麼要構造每一個分割線所對應的「分割帶」。可以想像的是,「分割帶」代表了模型劃分樣本點的能力或可信度,「分割帶」越寬,說明模型能夠將樣本點劃分得越清晰,進而保證模型泛化能力越強,分類的可信度越高;反之,「分割帶」越窄,說明模型的準確率越容易受到異常點的影響,進而理解為模型的預測能力越弱,分類的可信度越低。對於「分割帶」的理解,可以對比下圖所示的兩幅圖形。

上圖中,左圖的頻寬明顯要比右圖寬很多,對於圖中的異常五角星而言,左圖既可以準確地識別出它所屬的類別,但是右圖就會識別錯誤。所以驗證了關於「分割帶」的說明,即分割線對應的「分割帶」越寬越好,SVM模型就是在努力尋找這個最寬的「帶」。

02

SVM的目標函數

根據如上的解釋過程,可以將SVM模型的思想表達為一個數學公式,即SVM模型的目標函數為:

其中,

表示樣本點i到某條固定分割面的距離;

表示所有樣本點與某個分割面之間距離的最小值;

表示從所有的分割面中尋找「分割帶」最寬的「超平面」;其中w和b代表線性分割面的參數。假設線性分割面表示為

,則點到分割面的距離

可以表示為:

其中,‖w‖表示 w向量的二範式,即

。很顯然,上面的目標函數

其實是無法求解的,因為對於上述的線性可分問題而言,可以得到無窮多個w和b,進而無法通過窮舉的方式得到最優的w和b值。為了能夠解決這個問題,需要換個角度求解目標函數

,接下來的內容中將會介紹有關線性可分的SVM的目標函數。

03

線性可分SVM模型

以二分類問題為例,假設某條分割面可以將正負樣本點區分開來,並且該分割面用

表示。如果樣本點落在分割面的左半邊,則表示負例,反之表示正例,呈現的圖形如下圖所示

不妨將五角星所代表的正例樣本用1表示,將實心圓所代表的負例樣本用-1表示;圖中的實體加粗直線表示某條分割面;兩條虛線分別表示因變數y取值為+1和-1時的情況,它們與分割面平行。從圖中可知,不管是五角星代表的樣本點,還是實心圓代表的樣本點,這些點均落在兩條虛線以及虛線之外,則說明這些點帶入到方程

所得的絕對值一定大於等於1。進而可以說明如果點對應的取值越小於-1,該樣本為負例的可能性越高;點對應的取值越大於+1,樣本為正例的可能性越高。所以,根據如上的圖形就可以引申出函數間隔的概念,即數學表達式為:

其中,

表示樣本點所屬的類別,用+1和-1表示。當

計算的值小於等於-1時,根據分割面可以將樣本點

對應的

預測為-1;當

計算的值大於等於+1時,分割面會將樣本點

對應的

預測為+1。故利用如上的乘積公式可以得到線性可分的SVM所對應的函數間隔滿足

的條件。

直接將函數間隔利用到目標函數

中會存在一個弊端,即當分割面中的參數w和b同比例增加時,所對應的

值也會同比例增加,但這樣的增加對分割面

來說卻絲毫沒有影響。例如,將w和b同比例增加1.5倍,得到的

值也會被擴大1.5倍,而分割面

是沒有變化的。所以,為了避免這樣的問題,需要對函數間隔做約束,例如單位化處理,進而函數間隔可以重新表示為:

巧妙的是,將函數間隔做單位化處理後,得到的

值其實就是點到分割面的距離,所以

被稱為幾何間隔。有了幾何間隔這個概念,再來看目標函數

正如前文所提,線性可分的SVM所對應的函數間隔滿足

的條件,故就等於1。所以,可以將目標函數

等價為如下的表達式:

由於最大化

與最小化

是等價的,故可以將上面的表達式重新表示為:

現在的問題是如何根據不等式的約束,求解目標函數

的最小值,關於這類凸二次規劃問題的求解需要使用到拉格朗日乘子法(高等數學或《從零開始學Python數據分析與挖掘》書中有詳細說明,這裡便不再贅述)。

基於拉格朗日乘子法的數學知識,就可以將線性可分SVM模型的目標函數重新表示為:

所以,第一步要做的就是求解拉格朗日函數的極小值,即

。關於這部分的求解就需要對函數

中的參數和分別求偏導,並令導函數為0:

將如上兩個導函數為0的等式重新帶入目標函數

中,具體的推導過程如下:

所以,最終可以將最原始的目標函數重新改寫為下方的等價目標問題:

其中,

表示兩個樣本點的內積。如上就是關於線性可分SVM目標函數的構建、演變與推導的全過程了,最終根據已知樣本點

計算

的極小值,並利用拉格朗日乘子

的值計算分割面

的參數w和b:

其中,在計算

時,需要固定某個

,即從多個拉格朗日乘子

中任意挑選一個大於0的

樣本與後面的和式相減。

04

一個手工計算的案例

為了方便讀者理解線性可分SVM模型是如何運作和計算的,接下來舉一個簡單的例子(案例來源於李航老師的《統計學習方法》一書),並通過手動方式對其計算。

如下圖所示,假設樣本空間中的三個點可以通過線性可分的SVM進行分類,不妨用實心圓點代表負例、五角星代表正例。如何利用前面介紹的理論知識找到最佳的「超平面」呢?計算過程如下:

第一步:將樣本點帶入目標函數

第二步:將

帶入上式

第三步:對

求偏導,並令導函數為0

經計算可知,

,很顯然

並不滿足

的條件,目標函數的最小值就需要在邊界處獲得,即令其中的

,重新計算使

達到最小的

。當

時,

,對

求偏導,得到

;當

時,

,對

求偏導,得到

。經過對比發現,

時,目標函數最小,故最終確定

最後利用求解參數w和b的計算公式,進一步可以得到分割「超平面」的表達式:

根據如上計算過程,得到參數w和b的估計值,並利用前文介紹的分割「超平面」表達式

進一步得到「超平面」方程:

值得注意的是,對比圖中的A、B、C三點和拉格朗日乘子

,當

時,對應的樣本點會落在兩條虛線之上,否則樣本點在「分割帶」之外。對於虛線之上的樣本點,稱之為支援向量,即它們是構成SVM模型的核心點,而其他點對「超平面」w和b的計算沒有任何貢獻。

有關線性SVM的原理就介紹到這裡,除此,近似線性SVM和非線性SVM模型相關知識可以在我的新書《從零開始學Python數據分析與挖掘》中得到詳細的答案。

05

結語

OK,如果你有任何問題,歡迎在公眾號的留言區域表達你的疑問,下一期我們將分享SVM模型的實戰案例。同時,也歡迎各位朋友繼續轉發與分享文中的內容,讓更多的人學習和進步。