1. 程式人生 > >機器學習筆記之十二——SVM原理及推導

機器學習筆記之十二——SVM原理及推導

svm(support vector machine)是一種二分類演算法,它的目標在於尋找一個能將兩種點分離的直線或平面或超平面。

如圖(來自wiki):

圖中的紅線將兩邊資料點分開,這條線就是分割直線,同樣的,在三維座標軸中,將兩邊資料點分開的平面,稱為分割平面;更高維的空間座標軸,統稱為分割超平面。

  對於svm來說,找到這個分割超平面的準則或者是思路使離分割平面較近的點(這種點被稱為支援向量),儘可能的原理這個分割平面。

 (再簡單一些理解,就是如圖中的虛線。虛線是穿過較近的一個點,以分割直線為平行線的一條直線。這個虛線距離分割直線的距離越大,效果越好。)

一、SVM的優化目標

   既然 支援向量到分割平面的距離越大,模型效果越好,那麼我們就可以將這個距離作為優化目標。

  假設分割直線為:w^T\cdot x_i+b=0 , 支援向量到分割直線的x軸距離(對映在x軸上的距離)為1,那麼根據高中的點到線的距離(或線到線的距離公式)可得到:

       支援向量到分割平面的距離為: \frac{1}{\left \| w \right \|^2_2} ,     (w的二範數的平方,即w這個向量的平方和)

  同時,我們還要滿足一個條件,那就是樣本如何判定正負(也就是如何分為兩類)。假設y_i

是預測結果(值域(1,-1)),則w^T+by_i有如下關係。  

             w^T+b \geq 0,y_i=+1

              w^T+b\leq 0,y_i=-1 ,       可轉化為:    y_i\cdot (w^T+b)\geq 1

  將條件加入優化目標,最終可以優化目標為一個帶不等式約束的求最優值問題

                      {\max_{w,b}\frac{1}{\left \|w\right \|_2^2}}

 ,{s.t.y_i\cdot (w^T+b)\geq 1,i=1,2,.....,m}

  當然,可以將max轉化為min,這樣就和以前的求最小值看起來很類似的:

                     {\min_{w,b}{\left \|w\right \|_2^2}}  ,  {s.t.y_i\cdot (w^T+b)\geq 1,i=1,2,.....,m}

 

二、KKT條件

   如上    {\min_{w,b}{\left \|w\right \|_2^2}}  ,  {s.t.y_i\cdot (w^T+b)\geq 1,i=1,2,.....,m},該如何求解?

  首先引入一個概念,上面這個公式首先是一個二次項的,其次,它帶有一個不等式形式的約束條件。

  對於這種帶有不等式約束的優化問題,我們可以使用KKT條件轉化。

  KKT條件轉化是拉格朗日乘子法在不等式約束上的擴充套件(這裡不再展開敘述),其作用是能夠將不等式約束以一種形式融合到優化目標的公式中,使其成為一個完整的公式。

那麼我們的優化目標就能轉化為:

      L(w,b,\beta ) = \frac{1}{2}\left \| w \right \|^2_2+\sum^m_{i=1}[1-y_i(w^T+b)],\beta _i\geq 0, (w前的二分之一是為了方便求導加上的。後面的部分就是不等式約束右KKT條件轉化得到。)

 

三、優化目標求解

  附上,從最初的優化目標到最終最簡函式。(這一步並不能得到最終解,因為目前有三類變數需要確定,這一步最終使得三類變數化為一類。)

 

 

四、軟間隔SVM

  之前描述的svm對錯誤的訓練樣本完全沒有容忍程度,但是現實中的資料集很少有完全乾淨的,那麼為了讓svm對錯誤的樣本有一個容忍能力,提高svm泛化能力,我們引入一個引數ε,這樣的svm稱為軟間隔SVM,之前的稱為硬間隔SVM

在影象座標中表現為:y_i(w^Tx_i+b)\geq 1-\epsilon,\epsilon\geq 0,i=1,2,....,m

(ε越大,容忍能力越強)

  最初的優化目標改寫成: \frac{1}{2}\left \| w \right \|_2^2+C\sum^m_{i=1}\epsilon _i,i=1,2,...,m.

 按照之前的推導過程,最後可以得到:

到此,也就得到了一個只關於β的損失函式,怎麼求解,在第六部分的SMO講解。

 

 

五、非線性SVM

  之前討論的無論是軟間隔還是硬間隔的SVM,都只是在線性可分的角度去考慮,那麼如果是一個線性不可分的問題呢?如下圖(圖來自wiki):

   直線無法分割,需要這樣的曲線才能分開。但是在svm中我們不去找這樣的曲線,而是將目標投向高維空間。

  低維空間線性不可分的資料,在更高維的某一空間,可能會轉化為線性可分的資料。

 那麼如何將資料對映到高維空間?

 很簡單,比如原來是一個二維資料,擁有資料特徵x1,x2,藉助線性迴歸中學習的多項式擴充套件可以將其轉化為(x1,x2,x1x2,x1的平方,x2的平方)這樣的五維資料,svm就是採用這樣的方式,但是直接去多項式擴充套件有個致命的問題:

  當原始資料的維數本就很大,而且多項式擴充套件的次數還很高的時候,其計算使用的資源是指數級上升的。必須想一種辦法能夠得到一樣的效果,還可以不用那麼大的計算量。

  於是核函式就出現了。

核函式(kernel function)

 將樣本x和z經過一個k(x,z)的對映,能夠計算出和(x,z,xz,x的平方,z的平方,x的三次方……)一樣的結果,我們就稱這個k(x,z)為核函式

常見的核函式有:

 線性核函式雖然叫做核函式,但是和原先沒有區別……

多項式核函式就是多項式展開了,可以看到裡面的引數d就代表了多項式的次數(是次數,不是展開的維數)。

而高斯核函式才是真正的最優的,可以模擬高維空間,而且計算量並不大的核函式。為什麼e^{-\gamma|\left|x-z|\right|}^2可以模擬多項式展開的計算結果呢?

 證明結果如下:

  

 

 

六、SMO(Sequencial Minimal Optimization)

   上述得到的優化結果為:

l(\beta )=\sum^m_{i=1}\beta _i-\frac{1}{2}\sum^m_{i=1}\sum^m_{j=1}\beta _i\beta _jy_iy_jx_i^Tx_j  ,  s.t. \sum_{i=1}^m\beta _iy_i=0,\beta _i\geq 0,i=1,2,.....,m

 只剩下了一類需要求解的變數β,但是β並不是一個,而是每個樣本對應一個βi,這樣常規的計算又很麻煩了。

沒關係,大佬提出了SMO演算法,專門解決這個問題。

SMO演算法基本思想:先確定其中的兩個引數βi(確定方法為尋找違反KKT條件最大的βi),只更新這兩個,別的不管。更新完成後,再來找一對βi進行更新,如此迭代,直到所有的βi都符合條件。

  小問題1:為什麼每次迭代更新兩個引數?一個可以嗎?

  答:不可以,因為有如下約束條件,只改變一個βi會導致約束等式不成立:

  小問題2:每一次更新,按照什麼準則選擇兩個引數βi?

  答:更新兩個是因為不得已必須更新兩個。那麼第一個要選擇的βi自然是我們最想解決的那個,也就是違反我們目標條件最大的那個。目標條件由推導過程得到,是βi與yig*(x)i的關係,如下:

 

SMO筆記