Learn R | SVM of Data Mining(四)
一、鬆弛變數與軟間隔最大化
還記得第三篇文章中曾提到,當遇到非線性數據時,我們通常的做法是通過映射將原始數據映射到高維空間,這樣能夠使線性分隔的概率大大增加,然後再使用核函數簡化計算過程。但如果數據本身並不是非線性的,而僅僅是有噪音(異常值)影響呢?
(圖片來源:支持向量機:Outliers " Free Mind)
觀察上圖,左上角被黑色邊框圈住的藍點就是一個異常值(outlier),如果不考慮這個點的話,所建立的超平面是非常理想的,但由於這個異常值的存在,超平面不得不進行調整,變為圖中的黑色虛線,同時間隔也相應的變小。這樣的異常值尚且可以進行線性可分,但假設該點向右上側進行移動的話,那我們就無法找到區分兩類數據的超平面了。
僅僅因為一兩個少數點就進行映射是非常不值的,為了解決這一情況,我們應該考慮允許個別異常值的存在,例如在上圖中,黑色實線所對應的距離就是該異常值所偏離的距離,如果把該點按照這個距離移動回來,這樣就不會使得超平面發生變形了,用數學的話來講就是加入了可以「容忍」的鬆弛變數(slack variable),原有的約束條件則為:
(鬆弛變數,對應數據點允許偏離最大間隔超平面的量)
因此就有以下一系列的改變:
- 最大間隔分類器:
其中是一個參數,用於控制目標函數中兩項(「尋找間隔最大的超平面」和「保證數據點偏差量最小」)之間的權重。注意,其中是需要優化的變數(之一),而是一個事先根據實際問題確定好的常量。
- 拉格朗日函數:(與為拉格朗日乘子,對應上面的兩個約束條件)
- 構造對偶問題:(將帶入化簡且考慮的約束條件)
使分別對最小化:
;;有了以上的思路,我們就可以和訓練數據集線性可分時一樣,考慮數據集線性不可分情況下的線性可分SVM的學習問題,相對於線性可分的硬間隔最大化,這裡的近似線性可分被稱之為軟間隔最大化(soft margin maximization)。
二、SMO的演算法推導
經過前面一系列的講述與推導,我們把要解決的問題打造成如下形式:
如何求解這個式子呢?這時候序列最小優化演算法(Sequential minimal optimization SMO)就派上用場了。
SMO演算法由Microsoft Research的John C. Platt在1998年提出,並成為最快的二次規劃優化演算法,特別在針對線性SVM和數據稀疏時具有更優的性能。
按照原先的求解思路,我們需要首先固定除以外的所有參數,然後求的極值。但這個思路在這裡就不適用了,為什麼呢?
觀察約束條件,裡面有一個,這意味著,如果固定了除以外的所有參數,那麼也就固定下來了,畢竟。
所以,僅固定一個參數是不行的,SMO要每一次選取兩個參數做優化,假設選取和為需要計算的參數值,固定。這樣,在參數初始化後,SMO不斷執行以下兩個步驟直至收斂:
- 選取一對需要更新的變數;
- 固定除以外的參數,求解在構造的對偶問題下獲得更新的。
如何選取所需的,這個問題留在下一節再說,現在先假設參數已選取好。
由於除和外都已是固定值,那麼就有:(為一實數值)
所以(因為的取值要麼是,要麼是)
進一步的,假設更新之前的和為和,更新之後的為和,那麼更新前後的值需要滿足以下等式才能保證和為的約束:
又因為有著約束條件,將這兩個信息匯總考慮可以進一步縮小和的取值範圍,接下來進行分情況討論:
1. 當與異號時:
或,且。此時與該如何取值呢?觀察下圖:
(圖片來源:SMO演算法 - JerryLead - 博客園;另更正:右下側的直線應為)
此時,的取值範圍既要在矩形方框內,也要在直線上。
首先以為例,很明顯,它的上限要麼是中的,要麼是中的,用表示上限,具體為:
- ,
- ,
綜上所述,
繼續看的下限,無非是在與中二選一,用表示下限,具體為:
- ,
- ,
綜上所述,
總結起來,當與異號時,有:
2. 當與同號時:
或,且
與前面相同的方法,可以推出的取值範圍為:
接著,把一開始的式子進行化簡,把與分離出來,做一個等價變形(設):
(此式不建議推導,了解並直接使用即可)
繼續化簡,設,原式化簡為:
又因為,所以用含的式子代替,變形為:
對求導,令其為,得:
整理得:
將帶入其中(這裡使用了SVM分類函數的表達式:),原式進一步化簡為:
又因為,帶入其中,經過一系列化簡得:
(表示暫未考慮的上下限約束條件,等到考慮了這個範圍後就可以去掉了)
令,原式等價於
因此。接著考慮上下限的約束條件,去掉:
得到的值後,我們也就能得到的值了,具體公式為
接著進行值的更新:首先需要滿足這樣的約束條件:。
(如果,那麼就有)。然後:
當然,每次更新完與後,總要更新值及相應的值。
迭代結束後,我們也就獲得了所有需要更新的參數,自然也就得到了最終的分類函數。
三、SMO中拉格朗日乘子的選擇
關於這一部分的內容,借鑒和引用自博客SMO演算法 - JerryLead與支持向量機通俗導論 - 結構之法 演算法之道 - CSDN.NET中的相關內容。
首先先來明確一下KKT條件對於取值的意義:
- 對於第一種情況,表明是正常分類,在間隔邊界內部(因為正常分類的點滿足);
- 對於第二種情況,表明是支持向量,在間隔邊界上;
- 對於第三種情況,表明在兩條間隔邊界之中。
最優解需要滿足KKT條件,即滿足上述的三個條件,如果存在以下三種情況則表示未滿足KKT條件,具體為:
- 但
- 但或
- 但
不過的選取並不按照此方法,這是因為:
有一個Osuna定理,這個定理告訴我們只要選擇出來的只要有一個違背了KKT條件,那麼目標函數在一步迭代後值會減小,迭代就有意義。
接著,在所有不違反KKT條件的乘子中,選擇能夠使最大(即使目標函數值減小最快)的乘子,定義為,原因在於:
由於比較各變數所對應得目標函數值減幅的複雜度過高,因此SMO採用了一個啟發式:使選取的兩變數所對應樣本之間的間隔最大。直觀來看,相比較於選取相似的兩個變數進行更新,選取有很大差別的兩個變數進行更新將會給目標函數值帶來更大的變化。
當然,在每次更新完兩個乘子的優化後,都需要再重新計算相應的值。
滿足迭代結束的條件可為以下兩種:
- KKT條件對所有向量均滿足;
- 目標函數增長率小於某個預設的閾值,即
至此,SMO演算法的基本內容簡單介紹完畢。
未完待續
References:
- 統計學習方法 (豆瓣)
- 機器學習 (豆瓣)
- 序列最小優化演算法 - Wikipedia
- 支持向量機:Outliers " Free Mind
- SMO演算法 - JerryLead - 博客園
- 【分類戰車SVM】第六話:SMO演算法
- 支持向量機通俗導論 - 結構之法 演算法之道 - CSDN.NET
- Sequential Minimal Optimization - John C. Platt
- Sequential Minimal Optimization for SVM
推薦閱讀: