SVM支持向量機詳解

支持向量機(support vector machines, SVM)是二分類算法,所謂二分類即把具備多個特性(屬性)的數據分爲兩類,目前主流機器學習算法中,神經網絡等其餘機器學習模型已經能很好完成二分類、多分類,學習和研究SVM,理解SVM背後豐富算法知識,對之後研究其餘算法大有裨益;在實現SVM過程當中,會綜合利用以前介紹的一維搜索、KKT條件、懲罰函數等相關知識。本篇首先經過詳解SVM原理,後介紹如何利用python從零實現SVM算法。python

    爲便於理解,假設樣本有兩個屬性,能夠把屬性值分別對應到二維空間軸的x,y軸上,以下圖所示:算法

二維座標.png

實例中樣本明顯的分爲兩類,黑色實心點不妨爲類別一,空心圓點可命名爲類別二,在實際應用中會把類別數值化,好比類別一用1表示,類別二用-1表示,稱數值化後的類別爲標籤。每一個類別分別對應於標籤一、仍是-1表示沒有硬性規定,能夠根據本身喜愛便可,須要注意的是,因爲SVM算法標籤也會參與數學運算,這裏不能把類別標籤設爲0。網絡

    仍是對應於上圖,若是能須要找到一條直線,將上述的實心點與空心點分爲兩個部分,當下次還有其餘樣本點時,將其屬性值做爲座標繪製到座標軸上後,根據新樣本點與直線位置關係,就能夠判斷出其類別。知足這樣直線有無數條,SVM是要找到最合適一條:觀察上圖,綠線確定不行,該條分類直線在沒有驗證集前提下已經錯了;而藍色線和紅色均可以實現分類,藍色線與實心黑點靠的太近,相比而言,紅色線更‘公允’些。紅色線就是SVM須要找出的分類直線,數學語言描述紅線的‘公允’特性可表述爲:將黑點和空心點視爲兩個集合,若是找到一個直線,使得黑點集合中的一些點離直線最近,這些點到該直線距離爲d;空心點集合中也能找到一系列的點,離直線最近,距離一樣也是d,則該直線就是咱們要找到線性分類器,同時稱兩個集合中離直線最近的點爲支持向量,SVM支持向量機就是由此得名的。koa

    一些算法書籍中這樣描述SVM算法,找出一個直線,使得直線與兩邊集合最近的點的間隔空間最大,從上圖也能夠看出來,黑色點離藍線最近的點,其距離小於到紅線距離(直角的斜邊)。能找到支持向量就必定找到分類直線,反之亦然,以上是針對兩個屬性值,經過觀察二維平面便可以引出SVM的算法的特色,若是樣本屬性很是多呢,如何概括算法的規律性?首先說下凸集可分離定理,該定理不只是SVM的核心理論支持,更是機器學習算法的基石。機器學習

1、凸集可分離定理函數

    仍是以二維空間爲例,中學時代咱們就學過直線方程,好比有直線方程y=2x-1,以下圖所示:學習

超平面.png

把直線方程y=2x-1寫成內積形式:優化

內積一.gif

向量(-2,1)對應上圖中OA向量,把OA向量變爲單位向量,即方向與OA相同,模爲1向量OS,S的座標爲 座標1.gif,將直線方程兩邊同除以52.gif,可得:url

內積一.gif

(x,y)表明直線y=2x-1上任意一點,上式說明y=2x-1上任意一點與單位向量S:座標1.gif的內積是標準內積1.gif,圖中向量OP的長度爲標準內積3.gif,取負號是由於OP向量方向與OS方向相反;上圖中向量v一、v2在OS向量上投影都是OP,這個例子說明:經過引入一個向量OS,直線y=2x-1上無數的點在向量OS上均可以用標準內積1.gif來表示,或者說,直線y=2x-1在向量OS上均可以用座標(0,標準內積1.gif)表示。經過內積投影的方式,能夠把高維數據變爲向量上一個實數,這是一個線性泛函的過程,數學領域中經常使用內積來下降數據維度,把多維數據處理成一個實數便於後期分析、處理。spa

    引伸到任意維度時,上面方程可用集合公式表達:S:{x | pTx=α}  x∈Rn。對應於上圖:p向量對應向量OS,x爲直線上任意一點,在SVM算法中,稱x點構成的集合S爲超平面。有時高維數據集合投影到向量p的內積值是一個範圍:好比{x | pTx>=α}或{y | pTy<=-α},高維數據被投影到向量p的兩個區間上:

凸集.png

接下來介紹凸集分離定理:

上圖中X,Y在高維空間中都是凸集,且X∩Y=Φ;將X、Y投影到向量p上後,能夠獲得兩個凸集X',Y',在向量p上X'、Y'必定處在向量p的兩端,即X',Y'兩個凸集是可分離的。

    注意定理中有兩個條件,一是X,Y是凸集,二是X,Y交集爲空集。X',Y'可分離意味着在向量p上能夠將二者區分開,而X與X'、Y與Y'都是一一映射,X',Y'可區分開就間接地意味着X,Y也可區分開,這裏所謂的'可區分開'也就是SVM所要實現的二分法。凸集可分離定理說明兩個沒有交集的凸集是線性可分的,同時,若是兩個數據集不能線性分開時,能夠經過核函數將數據變爲兩個凸集,因此凸集可分離定理對核函數生成也有着指導意義。

2、 SVM算法

2.1 超平面與最大間隔

    前面介紹過,能把數據實現二分類的線性分類器稱爲超平面,SVM算法須要求出最大間隔的超平面,可設超平面爲S:{x|pTx=α},因爲pTx=α等式兩邊可除以一個正數就能夠把p歸一化爲單位向量,不妨設p是一個已經處理後的單位向量,此設定不影響SVM算法。通常文獻中,超平面一般寫成隱函數形式:

S:{x|pTx-α=0}   x∈Rn,p∈Rn,||p||=1

由幾何知識可知,空間任意一點x到超平面S的距離公式爲:

距離公式.gif

屬於兩個分類的支持向量到該超平面的距離都爲d , d>0,因爲支持向量是各自分類數據中,距離超平面最近的點,針對全部數據有如下不等式:

    條件.gif      ⑴

公式(1)兩邊同除以d,可得: 處理1.gif ,使用換元法,令:

設定2.gif                               ⑵

這樣就獲得約束條件常見形式:

條件3.gif                             ⑶

接下來要把公式(3)脫掉絕對值符號,SVM是一個二分類問題:可設定ωTx+b>=1時分類標籤y=1;ωTx+b<=-1時分類標籤y=-1,這樣一來,全部的數據都有不等式:

y(ωTx+b)>=1                  ④

再回過頭來看換元設定,ω=pT/d,等式兩邊取範數運算有:||ω||=||pT||/d=1/d,可得d=1/||ω||,SVM算法須要在知足公式4約束的基礎上,使得間隔距離d最大。假設待分類數據共有m個,實現SVM算法等同於求解一個帶有不等式約束的非線性規劃問題:

svm線性規劃.png

上面的問題也能夠表述爲求最小值的問題:

svm線性規劃22.png ⑤

超平面實現分類效果、以及各個參數之間關係可參考下圖:

1608295305531001632.png

2.2 最大軟間隔

    實踐中因爲異常數據的存在,致使超平面不能徹底將數據分爲兩部分,以下圖:

軟間隔1.png

兩個分類中混雜了少許的異常數據,除去極少數的異常點,上圖中超平面能分離大多數樣本。⑤式引入鬆弛變量後能夠兼容上圖的情形:

鬆弛變量.png(5.1)

軟間隔.jpg

xi.gif正常狀況下等於0,表示樣本點分列在支持向量的兩側;xi.gif>0時表明的是異常數據當0<xi.gif<1時,表明數據在超平面與支持向量之間,如上圖中的點2和點4;而xi.gif>1時表明數據到了對方空間中,如上圖的點1和點3。知足(5.1)式的間隔稱爲軟間隔,軟間隔優化結果不只須要支持向量的間隔最大,還要使得各個xi.gif儘可能的小換句話說超平面肯定後,被定義爲異常數據的樣本個數要儘可能的少。

3、求解帶約束的非線性規劃問題

    SVM算法最後歸結爲求解式(5),這是一個有約束的非線性規劃問題,接下來經過兩種方法求解,一種方案是利用以前介紹懲罰函數,優勢是簡單直接容易理解,不受約束條件數量的限制;另外一種方案是數學解析法,其原理是拉格朗日對偶原理的應用,計算中涉及到對偶問題、鞍點、SMO算法等,解析法是一種理論性較強方法。

 

3.1 拉格朗日對偶 

3.1.1 對偶問題

    爲後期求導方便,將公式(5)的目標函數f(ω)改成:

fw2.gif

乘以一個正數後與以前優化問題是等效的,新的目標函數與約束條件合成一個函數L(ω,b,α):

拉格朗日2.png

L(ω,b,α)稱爲拉格朗日函數,因爲yi(ωTxi+b)-1>=0,αi≥0,在可行區內恆有L(ω,b,α)<=f(ω),若有常數ω*,b*,α*知足下面關係:

L(ω*,b*,α)<=L(ω*,b*,α*)<=L(ω,b,α*)  ⑥

稱ω*,b*,α*是L(ω,b,α)函數的鞍點,此時ω*,b*是原問題的最優解。觀察⑥式,L(ω*,b*,α)是僅含有參數α的函數,產生這個函數的過程是:ω,b分別取不一樣的值,代入L(ω,b,α)後獲得一系列參數爲α的函數簇Φ,當ω=ω*,b=b*時,函數L(ω*,b*,α)是函數簇Φ中下界函數,圖像上看,L(ω*,b*,α)在函數簇Φ全部函數的下方,L(ω*,b*,α)函數可用θ(α)=inf{L(ω,b,α)}表示,inf意爲取得函數簇Φ的下界,當α=α*時,函數θ(α)有最大值,即L(ω*,b*,α)<=L(ω*,b*,α*);而α取不一樣值代入L(ω,b)後獲得一系列參數爲ω,b的函數簇Ψ,L(ω,b,α*)表明函數簇Ψ的上界函數,公式表示:φ(ω,b)=L(ω,b,α*)=sup{L(α)},當ω=ω*,b=b*時φ(ω,b)有最小值L(ω*,b*,α*)。

    ⑥式不等式形式稱爲弱對偶條件,當取等號時,L(ω*,b*,α*)是θ(α)函數最大值,同時也是φ(ω,b)函數最小值,此時爲強對偶條件。SVM默認是知足強對偶條件的,知足強對偶條件時,max{θ(α)}=L(ω*,b*,α*)=min{f(ω)} ,也稱下面的⑦與⑤是拉格朗日對偶問題:

max : θ(α)=inf{L(ω,b,α)}        

s.t. α>=0     ⑦

上面過程沒有給出鞍點就是K-T點證實、強對偶成立的條件,可參考相關資料詳細研究,拉格朗日函數鞍點示意圖以下:

鞍點.png

上圖中紅色虛線表明ω,b分別取不一樣的值,代入L(ω,b,α)後獲得一系列參數爲α的函數簇Φ,綠色點表明函數簇Φ中每一個函數最大值;綠色虛線爲α取不一樣值代入L(ω,b,α)後獲得一系列參數爲ω,b的函數簇Ψ,紅色點表明函數簇Ψ中每一個函數最小值。顯然函數簇Φ中下界函數θ(α)的最大值、函數簇Ψ上界函數φ(ω,b)的最小值,兩點重合,該點爲拉格朗日鞍點。

    求⑦最大值時首選要知道函數θ(α)的具體形式,已經知道,θ(α)是函數簇Φ的下界函數,函數簇Φ是把L(ω,b,α)中α視爲符號常量、ω,b視爲變量,那麼求L(ω,b)最小值時,求導等於0時,ω,b都將是α函數,將ω,b代入L(ω,b,α)中便可獲得θ(α)。

求導1.png

我.png                                  (7.1)

求導二.png                    (7.2)

(7.1)代入拉格朗日函數L(ω,b,α)可得:

代入.png

因爲 等於0.gif ,因此上式可化爲:

θ(α)=theta.png ⑧

求 max:θ(α)便可獲得SVM的最優解,⑧是一個二次凸優化問題,求解⑧通用辦法是利用SMO算法。

3.1.2 SMO算法

    介紹SMO算法以前,先結合軟間隔定義(5.1)式看看參數αi除了知足(7.1)、(7.2)還有其餘哪些特性。軟間隔要求間隔最大基礎上,鬆弛變量xi.gif整體要小,即獲得超平面以後,被定義爲異常數據樣本數量要儘可能的少。按照這個定義生成新的拉格朗日函數:

拉格朗日2.png(8.1)

求解上式最小值的過程當中,逐漸增大C將使xi.gif值變小,C是懲罰係數。按照對偶函數思想,爲獲得下界函數θ(α),先對其餘參數求偏導獲得如下等式組:

約束條件1.png

條件前兩個結果以前已經推導過,最後一個條件說明0≤αi≤C。

   SMO算法用座標上升法來實現參數優化,該方法在以前文章中介紹過,詳細可參考連接:梯度降低法。簡略回顧下,座標上升法選擇一個參數vi同時固定並初始化其餘變量,目標函數此時變爲vi的函數,求導並置零後,vi變爲其餘固定變量的函數,代入初始值後,獲得vi優化值,再切換到下一個變量,重複以上操做直至函數值收斂,獲得最優解。

    因爲有條件條件2.gif存在,若選擇αi之外的變量固定,αi必定是個常量,因此SMO算法一般一次取兩個變量後固定其他的變量。不妨設先取α1 、α2(注意,下標1和2不表明第一個樣本和第二個樣本),此時其餘變量被初始化而固定,獲得如下等式:

a12.gif    

上式中ζ是一個常數,上式代入到⑧式中,目標函數θ(α)變爲只含有α2的函數:

1610453905611058385.png

K(xi,xj)表明利用核函數求兩個樣本向量的泛函,本篇中K是個內積函數,求θ(α2)的梯度:

求導1.png

在α2初始值基礎上,沿着梯度方向前進是最大值方向,這樣就獲得α2新的值:

new.gif           

獲得α2新的值後接下來求α新的值:

等式2.png (10.1)

經過公式⑩獲得α2新的值,實質是沿着梯度方向前進,且步長爲1,若是讀者瞭解一維搜索算法,能看出這裏步長應該是計算出來的,不能盲目直接設置爲1。步長係數的肯定,在SMO算法中體現爲對α一、α2新值的進一步裁剪。再回過頭來看公式⑨,根據y1,y2是否同號,α一、α2會有如下兩種線性關係:

y1≠y2時:α1-α2=k

y1=y2時:α1+α2=k

根據k爲正負狀況,以上兩種線性關係可用下圖表示:

邊界.png

 

餘下文章請點擊連接    SVM詳解

​​

相關文章
相關標籤/搜索