原博客:https://daya-jin.github.io/2018/10/17/SupportVectorMachine/
模型概述
首先回顧一下Logistic Regression,對于一組數據與標簽
,Logistic Regression的任務是要找到一組參數使得
,對于
的樣本判定為負樣本,而對于
的樣本判定為正樣本,其是一個線性分類器。問題在于,如果有一個理想數據集線性可分,那么模型會因為參數的不同而具有不同的決策邊界,那么在這些決策邊界中如何判定孰優孰劣?
(不支持矢量圖,請移步原博客查看)
對于Logistic Regression這種概率模型而言,在給定一個確定的threshold之后,就可以畫出其決策邊界,空間中的樣本點離決策邊界越遠,說明模型對該樣本的判定可信度越高。那么,在若干決策邊界中,只需要找到一個決策邊界,使得模型對兩個類別的判定可信度均最高即可獲得一個最優分類器。由此引出支持向量機(Support Vector Machine):
數據集,標簽
,為了實現分類的目的,需要找到一組參數滿足
,同時還需要滿足
中的各樣本點離決策邊界
的距離最遠。
SVM模型對未知樣本的預測計算如下:
換句話說,SVM模型的決策邊界實際上是由兩條直線決定的:
在訓練數據集中,滿足以上直線方程的樣本點就被稱為支持向量(support vector)。根據平行直線距離公式
得這兩條直線之間的距離為:
[圖片上傳失敗...(image-4d76c8-1558875604764)]
對分類任務而言,還需要滿足分類的準確性,假設數據是線性可分的,則有:
所以SVM可以用如下表達式來描述:
上式等價于:
容易看出SVM自帶參數正則化。
接下來看一下SVM的損失函數,SVM只關心那些被誤分的點,而對于正確分類的點是不計入loss的,由幾何知識易得,模型對被正確分類的點的輸出總是滿足:,所以SVM的損失函數可以寫成:
以上是數據可分的情況,那么如果數據不可分呢?那么允許某些預測樣本不一定要嚴格在直線外側,允許某些樣本處于直線的內側,那么這些被“容忍”的樣本就不滿足了,為了量化這些被“容忍”的樣本偏離正軌的程度,為每一個樣本引入一個松弛變量(slack variables)
,這些樣本需要滿足的條件就變為下式:
很顯然,并且該變量體現了模型允許樣本越界的程度。那么自然而然地會想到這個越界程度不能是無限制的,所以還要對該變量進行限制,因此SVM問題就變成:
其中為樣本越界的代價系數,其值越大,對越界的懲罰就越大。
最優解
如果我們有如下優化問題:
那么可以使用拉格朗日數乘法來得到一個拉格朗日函數:
其中。現考慮針對參數
最大化該函數:
注意到,
,所以在滿足原問題約束條件的情況下,有:
所以原優化問題可以寫成:
在解優化問題時,如果目標函數是凸函數,那么就可以很容易得到一個全局最優解。拉格朗日問題還有一個對偶問題:
原問題與對偶問題同解的充要條件為KKT條件:
SVM問題是一個帶線性不等式約束的最優化問題,可以使用拉格朗日數乘法的對偶問題來解:
令得:
將拉格朗日函數展開并代入最優:
最大化上式即可求出最優化參數:
最優的SVM模型輸出為:
其中表示待預測的樣本,
表示模型對該樣本的預測值。回顧一下拉格朗日函數:
注意到,如果某樣本不是支持向量,那么有
,為了最大化拉格朗日函數,必定有
,即非支持向量對應的
均為0,從理論上說明了SVM的決策邊界只跟支持向量有關。
核函數
以上討論都是基于數據集線性可分的假設下,如果數據集在原始維度下線性不可分怎么辦?最簡單的辦法就是為數據集增加高維度特征。假設現在有一個二維數據集:
此數據集二維平面上線性不可分,但是在經一個變換函數作用下生成的新數據集是線性可分的:
對于升維后的新數據集,SVM所做的計算變成了:
通過上面的變換,不難看出,在將數據集升維之后,SVM訓練、預測時的計算其實就可以轉化為原始特征的計算,那么何必要對數據集進行升維操作呢?
以上述數據集為例,選取一個函數,用它來代替SVM的內積計算:
這樣一來,這個SVM模型的訓練、預測過程就等同于在高維空間進行,即達到了線性劃分數據集的目的,也沒有增加復雜的運算,其中被稱為核函數(kernel function),這種方法被稱為核技巧(kernel trick)。
現實任務中,一般是不知道要對數據應用怎樣的升維函數才能使得數據集線性可分,那么自然就難以求得計算高維空間的核函數
,甚至不知道某函數是否能被用作核函數。
簡單來說,一個函數要能被當做核函數,需要滿足Mercer's condition,即對稱函數的核矩陣必須滿足恒為半正定矩陣。
常用的核函數有如下幾種:
核函數 | 表達式 | 說明 |
---|---|---|
linear | 計算原始空間的內積 | |
polynomial | 計算d維空間的內積 | |
Radial Basis Function | - | |
sigmoid | - |
軟間隔SVM
注意:軟間隔相當于SVM的正則化
到目前為止,以上討論都是假設SVM在原始空間或者高維空間將數據集完全線性分割開來,但是將數據完美的線性分開是否會產生或擬合?由此引出軟間隔SVM。先前討論的SVM約束條件為:
這表示的是所有樣本都在該類對應的支持向量的外側,那么,現在允許一定數量的樣本不在外側,而在內側,需要滿足的條件變為:
其中為松弛變量。顯然,這個變量不能過大,否則約束就無意義了,需要對它進行限制,將其加入到最小化目標函數中,原SVM的優化問題就變成了:
其中為權衡系數,其值越大對松弛變量的約束越大。此時的拉格朗日函數變為:
令得:
將最優帶入得:
可以看到需要最大化的目標函數是一樣的,只不過多了一個約束項,完整寫出來如下所示:
SVM的具體優化算法請參閱SMO一章,實現指導也在那一章。這里只放出完整代碼:完整代碼
SVR
(待補充)
SVM V.S. LR
SVM與LR是經常被用來比較的一對模型。
首先,從數學形式上來作對比,然后再去探究背后的根源。對于機器學習模型而言,最核心的部分就是其損失函數或目標函數,該函數決定了算法的目的與優化方法。
LR的損失函數為:
SVM的損失函數為:
不難發現,SVM中的項,在
時為0,即SVM實際上對正確分類的樣本是不計入loss的。而反觀LR,不難發現LR在數學形式上的loss是無法取得
值的,這是因為sigmoid函數的性質就不允許模型精確地輸出
值,理論上只有在無窮遠處才能取得。可以假設一個存在離群點的場景,若SVM對該離群點已能正確分類,那么在訓練時就不會再將該點考慮進去,而LR則會收該離群點的影響。所以可以看出,SVM對離群點的抗性要高于LR。而且,LR的決策邊界會受兩個類別樣本分布的影響,而SVM則不會,其決策邊界只受支持向量的影響。
同時還在損失函數中發現,SVM自帶L2正則項,LR則不帶。
然后,兩者的出發點就不同。LR是從概率的思想出發,使用一個線性回歸去擬合正反事件的對數機率;而SVM的思想是啟發性的,直接學習一個最大間隔超平面去將兩個類別分開。
然后再看兩者的輸出函數,LR的預測函數:
SVM的預測函數:
由于SMV的預測函數中存在兩訓練樣本的內積項,所以核技巧能很自然而然的與SVM相結合;除了這個原因之外,SVM中的拉格朗日參數,非支持向量的該參數值是為
的,所以在計算決策邊界時的計算量并不高,這也是核技巧常用于SVM的原因之一。
最后,兩者的優化復雜度不一樣,LR由于模型本身簡單,可以使用迭代的梯度下降法進行優化;而SVM目前成熟的優化方法就是SMO算法。另外,由于SVM使用了“距離”的概念,所以對數據做歸一化處理是有好處的,還由于維度詛咒的原因,在高維空間下距離的概念會變得十分抽象,所以在高維情況下,會更傾向于實用LR。