支持向量機(SVM)原理詳解

SVM簡介

  支持向量機(support vector machines, SVM)是一種二分類模型,它的基本模型是定義在特徵空間上的間隔最大的線性分類器,間隔最大使它有別於感知機;SVM還包括核技巧,這使它成爲實質上的非線性分類器。SVM的的學習策略就是間隔最大化,可形式化爲一個求解凸二次規劃的問題,也等價於正則化的合頁損失函數的最小化問題。SVM的的學習算法就是求解凸二次規劃的最優化算法。html

1、支持向量與超平面

    在瞭解svm算法以前,咱們首先須要瞭解一下線性分類器這個概念。好比給定一系列的數據樣本,每一個樣本都有對應的一個標籤。爲了使得描述更加直觀,咱們採用二維平面進行解釋,高維空間原理也是同樣。舉個簡單子:以下圖所示是一個二維平面,平面上有兩類不一樣的數據,分別用圓圈和方塊表示。咱們能夠很簡單地找到一條直線使得兩類數據正好可以徹底分開。可是能將據點徹底劃開直線不止一條,那麼在如此衆多的直線中咱們應該選擇哪一條呢?從直觀感受上看圖中的幾條直線,是否是要更好一些呢?是的,咱們就是但願尋找到這樣的直線,使得距離這條直線最近的點到這條直線的距離最短。這讀起來有些拗口,咱們從以下右圖直觀來解釋這一句話就是要求的兩條外面的線之間的間隔最大。這是能夠理解的,由於假如數據樣本是隨機出現的,那麼這樣分割以後數據點落入到其類別一側的機率越高那麼最終預測的準確率也會越高。在高維空間中這樣的直線稱之爲超平面,由於當維數大於三的時候咱們已經沒法想象出這個平面的具體樣子。那些距離這個超平面最近的點就是所謂支持向量,實際上若是肯定了支持向量也就肯定了這個超平面,找到這些支持向量以後其餘樣本就不會起做用了。算法

                                                                    

2、SVM算法原理

  2.1 點到超平面的距離公式

      既然這樣的直線是存在的,那麼咱們怎樣尋找出這樣的直線呢?與二維空間相似,超平面的方程也能夠寫成一下形式:函數

                                                                                             (1)學習

  有了超平面的表達式以後以後,咱們就能夠計算樣本點到平面的距離了。假設爲樣本的中的一個點,其中表示爲第個特徵變量。那麼該點到超平面的距離就能夠用以下公式進行計算:優化

                                                                         (2) spa

  其中||W||爲超平面的範數,常數b相似於直線方程中的截距。3d

  上面的公式能夠利用解析幾何或高中平面幾何知識進行推導,這裏不作進一步解釋。htm

  2.2 最大間隔的優化模型

    如今咱們已經知道了如何去求數據點到超平面的距離,在超平面肯定的狀況下,咱們就可以找出全部支持向量,而後計算出間隔margin。每個超平面都對應着一個margin,咱們的目標就是找出全部margin中最大的那個值對應的超平面。所以用數學語言描述就是肯定w、b使得margin最大。這是一個優化問題其目標函數能夠寫成:blog

                         (3)get

  其中表示數據點的標籤,且其爲-1或1。距離用計算,這是就能體會出-1和1的好處了。若是數據點在平面的正方向(即+1類)那麼是一個正數,而當數據點在平面的負方向時(即-1類),依然是一個正數,這樣就可以保證始終大於零了。注意到當w和b等比例放大時,d的結果是不會改變的。所以咱們能夠令全部支持向量的u爲1,而其餘點的u大1這是能夠辦經過調節w和b求到的。所以上面的問題能夠簡化爲:

                    (4)

  爲了後面計算的方便,咱們將目標函數等價替換爲:

                                                               (5)

  這是一個凸二次規劃問題。能直接用現成的優化計算包求解,但咱們能夠有更高效的辦法。 

  2.3 學習的對偶算法

  爲了求解線性可分支持向量機的最優化問題,將它做爲原始最優化問題,應用拉格朗日對偶性,經過求解對偶問題獲得原始問題的最優解,這就是線性可分支持向量的對偶算法。這樣的優勢:

  • 對偶問題每每更容易求解

  • 天然引入核函數,進而推廣到非線性分類問題

  • 改變了問題的複雜度。由求特徵向量w轉化爲求比例係數a,在原始問題下,求解的複雜度與樣本的維度有關,即w的維度。在對偶問題下,只與樣本數量有關。

  首先構建拉格朗日函數。爲此,對每一個不等式約束引進拉格朗日乘子$a_{i}\geq 0,i=1,2,...,N$,定義拉格朗日函數:

$L(w,b,a)=\frac{1}{2}\left \| w \right \|^{2}-\sum_{i=1}^{N}a\left [ (w^{T}+b)-1 \right ]$  (6)

  其中$a_{i}> 0$ 

  根據拉格朗日函數對偶性,原始問題的對偶問題是極大極小問題:

$max_{a}min_{w,b}L(w,b,a)$ (7)

  因此,爲了求解問題的解,須要先求求$L(w,b,a)$對$w,b$的極小,再求對$a$的極大。  

  (1) 求$min_{w,b}L(w,b,a)$

  將拉格朗日函數$L(w,b,a)$分別對$w,b$求偏導數令其等於0:

$\bigtriangledown _{w}L(w,b,a)=w-\sum_{i=1}^{N}a_{i}y_{i}x_{i}=0$  (8)

$\bigtriangledown _{b}L(w,b,a)=\sum_{i=1}^{N}a_{i}y_{i}=0$  (9)

  得:

$w=\sum_{i=1}^{N}a_{i}y_{i}x_{i}$(10)

$\sum_{i=1}^{N}a_{i}y_{i}=0$(11)

  將式(10)代入拉格朗日函數(6)並利用式(11),即得:

$L(w,b,a)=\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}a_{i}a_{j}y_{i}y_{j}(x_{i}x_{j})-\sum_{i=1}^{N}a_{i}\left [ y_{i} \right ((\sum_{j=1}^{N}a_{i}y_{j}x_{j})x_{i}+b)-1]+\sum_{i=1}^{N}a_{i}
=-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}a_{i}a_{j}y_{i}y_{j}(x_{i}\cdot x_{j})+\sum_{i=1}^{N}a_{i}$  (12)

  (2)$max_{w,b}L(w,b,a)$對$a$的極大

 $max_{a} \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}a_{i}a_{j}y_{i}y_{j}(x_{i}\cdot x_{j})+\sum_{i=1}^{N}a_{i}$   (13)

  subject to

$\sum_{i=1}^{N}a_{i}y_{i}=0$

 $a_{i}\geq 0,i=1,2,...,N$

  將上式的目標函數由極大轉換成極小,就獲得下面與之等價的對偶最優化問題:

$min_{a} \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}a_{i}a_{j}y_{i}y_{j}(x_{i}\cdot x_{j})+\sum_{i=1}^{N}a_{i}$  (14)

  subject to

$\sum_{i=1}^{N}a_{i}y_{i}=0$

$a_{i}\geq 0,i=1,2,...,N$

  從對偶問題解出的是原式中的拉格朗日乘子。注意到原式中有不等式約束,所以上述過程須要知足KKT條件,即要求:

$\left\{\begin{matrix}
a_{i}\geq 0\\ 
y_{i}f(x_{i})-1\geq 0\\ 
a_{i}(y_{i}f(x_{i})-1)=0
\end{matrix}\right.$  (15)

  因而,對於訓練數據$(x_{i},y_{i})$,總有$a_{i}=0$或$y_{i}f(x_{i})=1$。若$a_{i}=0$,則該樣本不會出如今上述求和公式中,也就不會對$f(x)$產生任何影響;若$a_{i}>0$則必有$y_{i}f(x_{i})=1$,所對應樣本點位於最大間隔上,是一個支撐向量。這裏顯示出支持向量機的一個重要性質:訓練完成後,大部分的訓練樣本都不需保留,最終模型僅與支持向量相關。

  那麼如何求解式(14)不難發現,這是一個二次規劃問題,可以使用通用的二次規劃算法求解;然而,該問題的規模正比於訓練樣本數,這會在實際任務中形成很大的開銷。爲了避開這個障礙,人們經過利用問題自己的特性,提出了不少高校的算法,SMO(Sequential Minimal Optimization)是其中一個著名的表明。

  2.4 鬆弛變量

    由上一節的分析咱們知道實際中不少樣本數據都不可以用一個超平面把數據徹底分開。若是數據集中存在噪點的話,那麼在求超平的時候就會出現很大問題。從下圖中能夠看出其中一個藍點誤差太大,若是把它做爲支持向量的話所求出來的margin就會比不算入它時要小得多。更糟糕的狀況是若是這個藍點落在了紅點之間那麼就找不出超平面了。

                                   

  所以引入一個鬆弛變量ξ來容許一些數據能夠處於分隔面錯誤的一側。這時新的約束條件變爲:

  (16)

  式中ξi的含義爲容許第i個數據點容許偏離的間隔。若是讓ξ任意大的話,那麼任意的超平面都是符合條件的了。因此在原有目標的基礎之上,咱們也儘量的讓ξ的總量也儘量地小。因此新的目標函數變爲:

(17)

(18)

  其中的C是用於控制「最大化間隔」和「保證大部分的點的函數間隔都小於1」這兩個目標的權重。將上述模型完整的寫下來就是:

(19)

  新的拉格朗日函數變爲:

(20)

  接下來將拉格朗日函數轉化爲其對偶函數,首先對分別求ξ的偏導,並令其爲0,結果以下:

(21)

  代入原式化簡以後獲得和原來同樣的目標函數:

(22)

  可是因爲咱們獲得,所以有因此對偶問題寫成:

(23)

  通過添加鬆弛變量的方法,咱們如今可以解決數據更加混亂的問題。經過修改參數C,咱們能夠獲得不一樣的結果而C的大小到底取多少比較合適,須要根據實際問題進行調節。

  2.5核函數

    以上討論的都是在線性可分狀況進行討論的,可是實際問題中給出的數據並非都是線性可分的,好比有些數據多是以下圖樣子。

     

  那麼這種非線性可分的數據是否就不能用svm算法來求解呢?答案是否認的。事實上,對於低維平面內不可分的數據,放在一個高維空間中去就有可能變得可分。以二維平面的數據爲例,咱們能夠經過找到一個映射將二維平面的點放到三維平面之中。理論上任意的數據樣本都可以找到一個合適的映射使得這些在低維空間不能劃分的樣本到高維空間中以後可以線性可分。咱們再來看一下以前的目標函數:

(24)

  定義一個映射使得將全部映射到更高維空間以後等價於求解上述問題的對偶問題:

(25)

  這樣對於線性不可分的問題就解決了,如今只須要找出一個合適的映射便可。當特徵變量很是多的時候在,高維空間中計算內積的運算量是很是龐大的。考慮到咱們的目的並非爲找到這樣一個映射而是爲了計算其在高維空間的內積,所以若是咱們可以找到計算高維空間下內積的公式,那麼就可以避免這樣龐大的計算量,咱們的問題也就解決了。實際上這就是咱們要找的核函數,即兩個向量在隱式映射後的空間中的內積。下面的一個簡單例子能夠幫助咱們更好地理解核函數。

  經過以上例子,咱們能夠很明顯地看到核函數是怎樣運做的。上述問題的對偶問題能夠寫成以下形式:

(26)

  那麼怎樣的函數才能夠做爲核函數呢?下面的一個定理能夠幫助咱們判斷。

  Mercer定理:任何半正定的函數均可以做爲核函數。其中所謂半正定函數是指擁有訓練集數據集合,咱們定義一個矩陣的元素,這個矩陣是的矩陣,若是這個矩陣是半正定的,那麼就稱爲半正定函數。

  值得注意的是,上述定理中所給出的條件是充分條件而非充要條件。由於有些非正定函數也能夠做爲核函數。

  下面是一些經常使用的核函數:

核函數名稱

核函數表達式

核函數名稱

核函數表達式

線性核

指數核

多項式核

拉普拉斯核

高斯核

Sigmoid核

    如今咱們已經瞭解了一些支持向量機的理論基礎,咱們經過對偶問題的的轉化將最開始求的問題轉化爲求的對偶問題。只要找到全部的(即找出全部支持向量),咱們就可以肯定。而後就能夠經過計算數據點到這個超平面的距離從而判斷出該數據點的類別。

3、SMO 算法

  SMO算法是支持向量機學習的一種快速算法,其特色是不斷地將原二次規劃問題分解爲只有兩個變量的二次規劃子問題,並對子問題進行解析求解,知道全部變量知足KKT條件爲止。這樣經過啓發式的方法獲得原二次規劃問題的最優解。由於子問題有解析解,因此每次計算子問題都很快,雖然計算子問題次數不少,但在整體上仍是高效的。 

 

參考

《統計學習方法(第2版)》 李航 著

https://zhuanlan.zhihu.com/p/31886934

http://www.javashuo.com/article/p-amywfhfu-nz.html

https://www.zybuluo.com/77qingliu/note/1137445

http://www.360doc.com/content/18/0424/21/47919125_748467297.shtml

相關文章
相關標籤/搜索