SVM支持向量機原理(四)SMO算法原理

轉自http://www.cnblogs.com/pinard/p/6111471.html


在SVM的前三篇裏,我們優化的目標函數最終都是一個關於α α向量的函數。而怎麼極小化這個函數,求出對應的α α向量,進而求出分離超平面我們沒有講。本篇就對優化這個關於α α向量的函數的SMO算法做一個總結。

1. 回顧SVM優化目標函數

    我們首先回顧下我們的優化目標函數:

min        α 12  i=1,j=1 m α i α j y i y j K(x i ,x j ) i=1 m α i  
s.t. i=1 m α i y i =0 
0α i C 

    我們的解要滿足的KKT條件的對偶互補條件爲:

α  i (y i (w  ϕ(x i )+b  )1)=0 

    根據這個KKT條件的對偶互補條件,我們有:

α  i =0y i (w  ϕ(x i )+b)1 
0α  i Cy i (w  ϕ(x i )+b)=1 
α  i =Cy i (w  ϕ(x i )+b)1 

     由於w  = j=1 m α  j y j ϕ(x j ) ,我們令g(x)=w  ϕ(x)+b= j=1 m α  j y j K(x,x j )+b   ,則有:

α  i =0y i g(x i )1 
0α  i Cy i g(x i )=1 
α  i =Cy i g(x i )1 

2. SMO算法的基本思想

    上面這個優化式子比較複雜,裏面有m個變量組成的向量α 需要在目標函數極小化的時候求出。直接優化時很難的。SMO算法則採用了一種啓發式的方法。它每次只優化兩個變量,將其他的變量都視爲常數。由於 i=1 m α i y i =0 .假如將α 3 ,α 4 ,...,α m      固定,那麼α 1 ,α 2  之間的關係也確定了。這樣SMO算法將一個複雜的優化算法轉化爲一個比較簡單的兩變量優化問題。

    爲了後面表示方便,我們定義K ij =ϕ(x i )ϕ(x j ) 

    由於α 3 ,α 4 ,...,α m          都成了常量,所有的常量我們都從目標函數去除,這樣我們上一節的目標優化函數變成下式:

min        α 1 ,α 1  12 K 11 α 2 1 +12 K 22 α 2 2 +y 1 y 2 K 12 α 1 α 2 (α 1 +α 2 )+y 1 α 1  i=3 m y i α i K i1 +y 2 α 2  i=3 m y i α i K i2  
s.t.α 1 y 1 +α 2 y 2 = i=3 m y i α i =ς 
0α i Ci=1,2 

3. SMO算法目標函數的優化

    爲了求解上面含有這兩個變量的目標優化問題,我們首先分析約束條件,所有的α 1 ,α 2  都要滿足約束條件,然後在約束條件下求最小。

    根據上面的約束條件α 1 y 1 +α 2 y 2 =ς0α i Ci=1,2 ,又由於y 1 ,y 2  均只能取值1或者-1, 這樣α 1 ,α 2  在[0,C]和[0,C]形成的盒子裏面,並且兩者的關係直線的斜率只能爲1或者-1,也就是說α 1 ,α 2  的關係直線平行於[0,C]和[0,C]形成的盒子的對角線,如下圖所示:

     由於α 1 ,α 2  的關係被限制在盒子裏的一條線段上,所以兩變量的優化問題實際上僅僅是一個變量的優化問題。不妨我們假設最終是α 2  的優化問題。由於我們採用的是啓發式的迭代法,假設我們上一輪迭代得到的解是α old 1 ,α old 2  ,假設沿着約束方向α 2  未經剪輯的解是α new,unc 2  .本輪迭代完成後的解爲α new 1 ,α new 2  

    由於α new 2  必須滿足上圖中的線段約束。假設L和H分別是上圖中α new 2  所在的線段的邊界。那麼很顯然我們有:

Lα new 2 H 

    而對於L和H,我們也有限制條件如果是上面左圖中的情況,則

L=max(0,α old 2 α old 1 )H=min(C,C+α old 2 α old 1 ) 

    如果是上面右圖中的情況,我們有:

L=max(0,α old 2 +α old 1 C)H=min(C,α old 2 +α old 1 ) 

     也就是說,假如我們通過求導得到的α new,unc 2  ,則最終的α new 2  應該爲:

α new 2 =⎧ ⎩ ⎨ ⎪ ⎪ Hα new,unc 2 L Lα new,unc 2 >HLα new,unc 2 Hα new,unc 2 <L  
   

    那麼如何求出α new,unc 2  呢?很簡單,我們只需要將目標函數對α 2  求偏導數即可。

    首先我們整理下我們的目標函數。

    爲了簡化敘述,我們令

E i =g(x i )y i = j=1 m α  j y j K(x i ,x j )+by i  

    其中g(x) 就是我們在第一節裏面的提到的

g(x)=w  ϕ(x)+b= j=1 m α  j y j K(x,x j )+b   

    我們令

v i = i=3 m y j α j K(x i ,x j )=g(x i ) i=1 2 y j α j K(x i ,x j )b 

    這樣我們的優化目標函數進一步簡化爲:

W(α 1 ,α 2 )=12 K 11 α 2 1 +12 K 22 α 2 2 +y 1 y 2 K 12 α 1 α 2 (α 1 +α 2 )+y 1 α 1 v 1 +y 2 α 2 v 2  

    由於α 1 y 1 +α 2 y 2 =ς ,並且y 2 i =1 ,可以得到α 1 α 2  表達的式子爲:

α 1 =y 1 (ςα 2 y 2 ) 

    將上式帶入我們的目標優化函數,就可以消除α 1  ,得到僅僅包含α 2  的式子。

W(α 2 )=12 K 11 (ςα 2 y 2 ) 2 +12 K 22 α 2 2 +y 2 K 12 (ςα 2 y 2 )α 2 (α 1 +α 2 )+(ςα 2 y 2 )v 1 +y 2 α 2 v 2  

    忙了半天,我們終於可以開始求α new,unc 2  了,現在我們開始通過求偏導數來得到α new,unc 2  

Wα 2  =K 11 α 2 +K 22 α 2 2K 12 α 2 K 11 ςy 2 +K 12 ςy 2 +y 1 y 2 1v 1 y 2 +y 2 v 2 =0 

    整理上式有:

(K 11 +K 22 2K 12 )α 2 =y 2 (y 2 y 1 +ςK 11 ςK 12 +v 1 v 2 ) 

=y 2 (y 2 y 1 +ςK 11 ςK 12 +(g(x 1 ) j=1 2 y j α j K 1j b)(g(x 2 ) j=1 2 y j α j K 2j b)) 

    將ς=α 1 y 1 +α 2 y 2  帶入上式,我們有:

(K 11 +K 22 2K 12 )α new,unc 2 =y 2 ((K 11 +K 22 2K 12 )α old 2 y 2 +y 2 y 1 +g(x 1 )g(x 2 )) 

=(K 11 +K 22 2K 12 )α old 2 +y2(E 1 E 2 ) 

    我們終於得到了α new,unc 2  的表達式:

α new,unc 2 =α old 2 +y2(E 1 E 2 )K 11 +K 22 2K 12 )  

    利用上面講到的α new,unc 2  α new 2  的關係式,我們就可以得到我們新的α new 2  了。利用α new 2  α new 1  的線性關係,我們也可以得到新的α new 1  

4. SMO算法兩個變量的選擇

    SMO算法需要選擇合適的兩個變量做迭代,其餘的變量做常量來進行優化,那麼怎麼選擇這兩個變量呢?

4.1 第一個變量的選擇

    SMO算法稱選擇第一個變量爲外層循環,這個變量需要選擇在訓練集中違反KKT條件最嚴重的樣本點。對於每個樣本點,要滿足的KKT條件我們在第一節已經講到了: 

α  i =0y i g(x i )1 
0α  i Cy i g(x i )=1 
α  i =Cy i g(x i )1 

    一般來說,我們首先選擇違反0α  i Cy i g(x i )=1 這個條件的點。如果這些支持向量都滿足KKT條件,再選擇違反α  i =0y i g(x i )1  和 α  i =Cy i g(x i )1 的點。

4.2 第二個變量的選擇

     SMO算法稱選擇第二一個變量爲內層循環,假設我們在外層循環已經找到了α 1  , 第二個變量α 2  的選擇標準是讓|E1E2| 有足夠大的變化。由於α 1  定了的時候,E 1  也確定了,所以要想|E1E2| 最大,只需要在E 1  爲正時,選擇最小的E i  作爲E 2  , 在E 1  爲負時,選擇最大的E i  作爲E 2  ,可以將所有的E i  保存下來加快迭代。

    如果內存循環找到的點不能讓目標函數有足夠的下降, 可以採用遍歷支持向量點來做α 2  ,直到目標函數有足夠的下降, 如果所有的支持向量做α 2  都不能讓目標函數有足夠的下降,可以跳出循環,重新選擇α 1   

4.3 計算閾值b和差值E i   

    在每次完成兩個變量的優化之後,需要重新計算閾值b。當0α new 1 C   時,我們有

y 1  i=1 m α i y i K i1 b 1 =0 

    於是新的b new 1  爲:

b new 1 =y 1  i=3 m α i y i K i1 α new 1 y 1 K 11 α new 2 y 2 K 21  

    計算出E 1  爲:

E 1 =g(x 1 )y 1 = i=3 m α i y i K i1 +α old 1 y 1 K 11 +α old 2 y 2 K 21 +b old y 1  

    可以看到上兩式都有y 1  i=3 m α i y i K i1  ,因此可以將b new 1  E 1  表示爲:

b new 1 =E 1 y 1 K 11 (α new 1 α old 1 )y 2 K 21 (α new 2 α old 2 )+b old  

    同樣的,如果0α new 2 C , 那麼有:

b new 2 =E 2 y 1 K 12 (α new 1 α old 1 )y 2 K 22 (α new 2 α old 2 )+b old  

    最終的b new  爲:

b new =b new 1 +b new 2 2  

    得到了b new  我們需要更新E i  :

E i = S y j α j K(x i ,x j )+b new y i  

    其中,S是所有支持向量x j  的集合。

    好了,SMO算法基本講完了,我們來歸納下SMO算法。

5. SMO算法總結

    輸入是m個樣本(x 1 ,y 1 ),(x 2 ,y 2 ),...,(x m ,y m ), ,                其中x爲n維特徵向量。y爲二元輸出,值爲1,或者-1.精度e。

    輸出是近似解α 

    1)取初值α 0 =0,k=0 

    2)按照4.1節的方法選擇α k 1  ,接着按照4.2節的方法選擇α k 2  ,求出新的α new,unc 2  

α new,unc 2 =α k 2 +y 2 (E 1 E 2 )K 11 +K 22 2K 12 )  

    3)按照下式求出α k+1 2  

α k+1 2 =⎧ ⎩ ⎨ ⎪ ⎪ Hα new,unc 2 L Lα new,unc 2 >HLα new,unc 2 Hα new,unc 2 <L  

    4)利用α k+1 2  α k+1 1  的關係求出α k+1 1  

    5)按照4.3節的方法計算b k+1  E i  

    6)在精度e範圍內檢查是否滿足如下的終止條件:

 i=1 m α i y i =0 
0α i C,i=1,2...m 
α k+1 i =0y i g(x i )1 
0α k+1 i Cy i g(x i )=1 
α k+1 i =Cy i g(x i )1 

    7)如果滿足則結束,返回α k+1  ,否則轉到步驟2)。

 

    SMO算法終於寫完了,這塊在以前學的時候是非常痛苦的,不過弄明白就豁然開朗了。希望大家也是一樣。寫完這一篇, SVM系列就只剩下支持向量迴歸了,勝利在望!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章