讀古今文學網 > 機器學習實戰 > 6.2 尋找最大間隔 >

6.2 尋找最大間隔

如何求解數據集的最佳分隔直線?先來看看圖6-3。分隔超平面的形式可以寫成wTx+b。要計算點A到分隔超平面的距離,就必須給出點到分隔面的法線或垂線的長度,該值為|wTA+b|/||w||。這裡的常數b類似於Logistic回歸中的截距w0。這裡的向量w和常數b一起描述了所給數據的分隔線或超平面。接下來我們討論分類器。

 

圖6-3 A到分隔平面的距離就是該點到分隔面的法線長度

6.2.1 分類器求解的優化問題

前面已經提到了分類器,但還沒有介紹它的工作原理。理解其工作原理將有助於理解基於優化問題的分類器求解過程。輸入數據給分類器會輸出一個類別標籤,這相當於一個類似於Sigmoid的函數在作用。下面將使用類似海維賽德階躍函數(即單位階躍函數)的函數對wTx+b作用得到f(wTx+b),其中當u<0f(u)輸出-1,反之則輸出+1。這和前一章的Logistic回歸有所不同,那裡的類別標籤是0或1。

這裡的類別標籤為什麼採用1和+1,而不是0和1呢?這是由於1和+1僅僅相差一個符號,方便數學上的處理。我們可以通過一個統一公式來表示間隔或者數據點到分隔超平面的距離,同時不必擔心數據到底是屬於1還是+1類。

當計算數據點到分隔面的距離並確定分隔面的放置位置時,間隔是通過label * (wTx+b)1來計算,這時就能體現出-1和+1類的好處了。如果數據點處於正方向(即+1類)並且離分隔超平面很遠的位置時,wTx+b會是一個很大的正數,同時label * (wTx+b)也會是一個很大的正數。而如果數據點處於負方向(-1類)並且離分隔超平面很遠的位置時,此時由於類別標籤為-1,則label * (wTx+b)仍然是一個很大的正數。

現在的目標就是找出分類器定義中的wb。為此,我們必須找到具有最小間隔的數據點,而這些數據點也就是前面提到的支持向量。一旦找到具有最小間隔的數據點,我們就需要對該間隔最大化。這就可以寫作:

直接求解上述問題相當困難,所以我們將它轉換成為另一種更容易求解的形式。首先考察一下上式中大括號內的部分。由於對乘積進行優化是一件很討厭的事情,因此我們要做的是固定其中一個因子而最大化其他因子。如果令所有支持向量的label * (wTx+b)都為1,那麼就可以通過求||w||-1的最大值來得到最終解。但是,並非所有數據點的label * (wTx+b)都等於1,只有那些離分隔超平面最近的點得到的值才為1。而離超平面越遠的數據點,其label * (wTx+b)的值也就越大。

在上述優化問題中,給定了一些約束條件然後求最優值,因此該問題是一個帶約束條件的優化問題。這裡的約束條件就是label * (wTx+b)≥ 1.0。對於這類優化問題,有一個非常著名的求解方法,即拉格朗日乘子法。通過引入拉格朗日乘子,我們就可以基於約束條件來表述原來的問題。由於這裡的約束條件都是基於數據點的,因此我們就可以將超平面寫成數據點的形式。於是,優化目標函數最後可以寫成:

其約束條件為:

至此,一切都很完美,但是這裡有個假設:數據必須100%線性可分。目前為止,我們知道幾乎所有數據都不不可能那麼「乾淨」。這時我們就可以通過引入所謂鬆弛變量(slack variable),來允許有些數據點可以處於分隔面的錯誤一側。這樣我們的優化目標就能保持仍然不變,但是此時新的約束條件則變為:

這裡的常數C用於控制「最大化間隔」和「保證大部分點的函數間隔2小於1.0」這兩個目標的權重。在優化算法的實現代碼中,常數C是一個參數,因此我們就可以通過調節該參數得到不同的結果。一旦求出了所有的alpha,那麼分隔超平面就可以通過這些alpha來表達。這一結論十分直接,SVM中的主要工作就是求解這些alpha

2. 被稱為點到分隔面的函數間隔,稱為點分隔面的幾何間隔。——譯者注

要理解剛才給出的這些公式還需要大量的知識。如果你有興趣,我強烈建議去查閱相關的教材3,4,以獲得上述公式的推導細節。

3. Christopher M. Bishop, Pattern Recognition and Machine Learning (Springer, 2006).

4. Bernhard Schlkopf and Alexander J. Smola, Learning with Kernels: Support Vector Machines, Regularization, Optimization,and Beyond (MIT Press, 2001).

6.2.2 SVM應用的一般框架

在第1章中,我們定義了構建機器學習應用的一般步驟,但是這些步驟會隨機器學習任務或算法的不同而有所改變,因此有必要在此探討如何在本章中實現它們。

SVM的一般流程

  1. 收集數據:可以使用任意方法。
  2. 準備數據:需要數值型數據。
  3. 分析數據:有助於可視化分隔超平面。
  4. 訓練算法:SVM的大部分時間都源自訓練,該過程主要實現兩個參數的調優。
  5. 測試算法:十分簡單的計算過程就可以實現。
  6. 使用算法:幾乎所有分類問題都可以使用SVM,值得一提的是,SVM本身是一個二類分類器,對多類問題應用SVM需要對代碼做一些修改。

到目前為止,我們已經瞭解了一些理論知識,我們當然希望能夠通過編程,在數據集上將這些理論付諸實踐。下一節將介紹一個簡單但很強大的實現算法。