支持向量機(SVM)——原理篇
目錄
SVM簡介
線性SVM演算法原理非線性SVM演算法原理
SVM簡介
支持向量機(support vector machines, SVM)是一種二分類模型,它的基本模型是定義在特徵空間上的間隔最大的線性分類器,間隔最大使它有別於感知機;SVM還包括核技巧,這使它成為實質上的非線性分類器。SVM的的學習策略就是間隔最大化,可形式化為一個求解凸二次規劃的問題,也等價於正則化的合頁損失函數的最小化問題。SVM的的學習演算法就是求解凸二次規劃的最優化演算法。
SVM演算法原理
SVM學習的基本想法是求解能夠正確劃分訓練數據集並且幾何間隔最大的分離超平面。如下圖所示, 即為分離超平面,對於線性可分的數據集來說,這樣的超平面有無窮多個(即感知機),但是幾何間隔最大的分離超平面卻是唯一的。
在推導之前,先給出一些定義。假設給定一個特徵空間上的訓練數據集
其中, , , 為第 個特徵向量, 為類標記,當它等於+1時為正例;為-1時為負例。再假設訓練數據集是線性可分的。
幾何間隔:對於給定的數據集 和超平面 ,定義超平面關於樣本點 的幾何間隔為
超平面關於所有樣本點的幾何間隔的最小值為
實際上這個距離就是我們所謂的支持向量到超平面的距離。
根據以上定義,SVM模型的求解最大分割超平面問題可以表示為以下約束最優化問題
將約束條件兩邊同時除以 ,得到
因為 都是標量,所以為了表達式簡潔起見,令
得到
又因為最大化 ,等價於最大化 ,也就等價於最小化 ( 是為了後面求導以後形式簡潔,不影響結果),因此SVM模型的求解最大分割超平面問題又可以表示為以下約束最優化問題
這是一個含有不等式約束的凸二次規劃問題,可以對其使用拉格朗日乘子法得到其對偶問題(dual problem)。
首先,我們將有約束的原始目標函數轉換為無約束的新構造的拉格朗日目標函數
其中 為拉格朗日乘子,且 。現在我們令
當樣本點不滿足約束條件時,即在可行解區域外:
此時,將 設置為無窮大,則 也為無窮大。
當滿本點滿足約束條件時,即在可行解區域內:
此時, 為原函數本身。於是,將兩種情況合併起來就可以得到我們新的目標函數
於是原約束問題就等價於
看一下我們的新目標函數,先求最大值,再求最小值。這樣的話,我們首先就要面對帶有需要求解的參數 和 的方程,而 又是不等式約束,這個求解過程不好做。所以,我們需要使用拉格朗日函數對偶性,將最小和最大的位置交換一下,這樣就變成了:
要有 ,需要滿足兩個條件:
① 優化問題是凸優化問題
② 滿足KKT條件
首先,本優化問題顯然是一個凸優化問題,所以條件一滿足,而要滿足條件二,即要求
為了得到求解對偶問題的具體形式,令 對 和 的偏導為0,可得
將以上兩個等式帶入拉格朗日目標函數,消去 和 , 得
即
求 對 的極大,即是對偶問題
把目標式子加一個負號,將求解極大轉換為求解極小
現在我們的優化問題變成了如上的形式。對於這個問題,我們有更高效的優化演算法,即序列最小優化(SMO)演算法。這裡暫時不展開關於使用SMO演算法求解以上優化問題的細節,下一篇文章再加以詳細推導。
我們通過這個優化演算法能得到 ,再根據 ,我們就可以求解出 和 ,進而求得我們最初的目的:找到超平面,即」決策平面」。
前面的推導都是假設滿足KKT條件下成立的,KKT條件如下
另外,根據前面的推導,還有下面兩個式子成立
由此可知在 中,至少存在一個 (反證法可以證明,若全為0,則 ,矛盾),對此 有
因此可以得到
對於任意訓練樣本 ,總有 或者 。若 ,則該樣本不會在最後求解模型參數的式子中出現。若 ,則必有 ,所對應的樣本點位於最大間隔邊界上,是一個支持向量。這顯示出支持向量機的一個重要性質:訓練完成後,大部分的訓練樣本都不需要保留,最終模型僅與支持向量有關。
到這裡都是基於訓練集數據線性可分的假設下進行的,但是實際情況下幾乎不存在完全線性可分的數據,為了解決這個問題,引入了「軟間隔」的概念,即允許某些點不滿足約束
採用hinge損失,將原優化問題改寫為
其中 為「鬆弛變數」, ,即一個hinge損失函數。每一個樣本都有一個對應的鬆弛變數,表徵該樣本不滿足約束的程度。 稱為懲罰參數, 值越大,對分類的懲罰越大。跟線性可分求解的思路一致,同樣這裡先用拉格朗日乘子法得到拉格朗日函數,再求其對偶問題。
綜合以上討論,我們可以得到線性支持向量機學習演算法如下:
輸入:訓練數據集 其中,, ;
輸出:分離超平面和分類決策函數
(1)選擇懲罰參數 ,構造並求解凸二次規劃問題
得到最優解
(2)計算
選擇 的一個分量 滿足條件 ,計算
(3)求分離超平面
分類決策函數:
非線性SVM演算法原理
對於輸入空間中的非線性分類問題,可以通過非線性變換將它轉化為某個維特徵空間中的線性分類問題,在高維特徵空間中學習線性支持向量機。由於在線性支持向量機學習的對偶問題里,目標函數和分類決策函數都只涉及實例和實例之間的內積,所以不需要顯式地指定非線性變換,而是用核函數替換當中的內積。核函數表示,通過一個非線性轉換後的兩個實例間的內積。具體地, 是一個函數,或正定核,意味著存在一個從輸入空間到特徵空間的映射 ,對任意輸入空間中的 ,有
在線性支持向量機學習的對偶問題中,用核函數 替代內積,求解得到的就是非線性支持向量機
綜合以上討論,我們可以得到非線性支持向量機學習演算法如下:
輸入:訓練數據集 其中,, ;
輸出:分離超平面和分類決策函數
(1)選取適當的核函數 和懲罰參數 ,構造並求解凸二次規劃問題
得到最優解
(2)計算
選擇 的一個分量 滿足條件 ,計算
(3)分類決策函數:
介紹一個常用的核函數——高斯核函數
對應的SVM是高斯徑向基函數分類器,在此情況下,分類決策函數為
參考
[1]《統計學習方法》 李航
[2]《機器學習》周志華
[3]Python3《機器學習實戰》學習筆記(八):支持向量機原理篇之手撕線性SVM Jack-Cui
[4]深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件
[5]支持向量機通俗導論(理解SVM的三層境界)
[6]Support Vector Machines for Classification
推薦閱讀:
※阿里巴巴大數據之路-日誌採集
※又到求職黃金季,這些技能助你一臂之力【阿里直聘優先錄取】
※程序猿看過來!程序猿學數據靠譜嗎?
※大數據產業即將破萬億之際,浪潮天元數據在全力做一件事