機器學習之支持向量機(二):SMO算法

注:關於支持向量機系列文章是借鑑大神的神做,加以本身的理解寫成的;若對原做者有損請告知,我會及時處理。轉載請標明來源。html

序:

我在支持向量機系列中主要講支持向量機的公式推導,第一部分講到推出拉格朗日對偶函數的對偶因子α;第二部分是SMO算法對於對偶因子的求解;第三部分是核函數的原理與應用,講核函數的推理及經常使用的核函數有哪些;第四部分是支持向量機的應用,按照機器學習實戰的代碼詳細解讀。算法

機器學習之支持向量機(一):支持向量機的公式推導機器學習

機器學習之支持向量機(二):SMO算法函數

機器學習之支持向量機(三):核函數和KKT條件的理解post

機器學習之支持向量機(四):支持向量機的Python語言實現學習

1 SMO算法的概念

這裏補充一點,後面的K () 函數是核函數,是把低維度的數據投射到高維度中,即把非線性轉換成線性分類。知道k 是核函數就能夠了,後面會再詳細講解k 函數。咱們在上篇中獲得關於對偶因子的式子,對其求 α 極大,如今添加符號轉化成求極小,二者等價。優化

轉化後的目標函數:atom

其中 約束條件中 C 是懲罰係數,由對非線性加上鬆弛因子獲得的。url

1998年,由Platt提出的序列最小最優化算法(SMO)能夠高效的求解上述SVM問題,它把原始求解N個參數二次規劃問題分解成不少個子二次規劃問題分別求解,每一個子問題只須要求解2個參數,方法相似於座標上升,節省時間成本和下降了內存需求。每次啓發式選擇兩個變量進行優化,不斷循環,直到達到函數最優值。spa

2 SMO算法原理分析

咱們的目標:求解對偶因子 α (α1, α2, ... , αN

2.1 目標函數化成二元函數

SMO算法是經過必定的規定選擇兩個參數進行優化,並固定其他 N - 2 個參數,假如選取優化的參數是 α1, α2 ,固定α3, α4 , .., α,對目標函數進行化簡成二元函數得:

  

 

 

這裏強調一下,式子中的 Kij 是核函數,知道意思就能夠,不瞭解不太影響SMO算法的推導。

 2.2 將二元函數化成一元函數

 約束條件:

    獲得     ,其中 ζ 是一個定值。

讓兩邊同時乘以y,化簡獲得:

 

將(2)式帶入到(1)中可得:

              

2.3 對一元函數求極值點

對(3)式求導並等於0,得:

假設求解獲得的值,記爲α1new α2new 優化前的解記爲α1old α2old ,由約束條件知:

   獲得:       

再設支持向量機超平面模型爲:f (x) = ωTx + b ,  ω = Σ αyi xi  即 f (xi) 爲樣本xi 的預測值,yi 表示 xi 的真實值,則令Ei 表示偏差值。

      

因爲   可得:

     

     

將上面的式子(4)(6)(7)帶入求導公式中,此時解出的 α2new  沒有考慮到約束條件,先記爲 α2new unclipped  ,得:

 

 帶入(5)式子,得:

   

2.4 求得最終的對偶因子

 以上求得的 α2new unclipped 沒考慮約束條件:

clip_image025clip_image027異號時,也就是一個爲1,一個爲-1時,他們能夠表示成一條直線,斜率爲1。

 

 橫軸是clip_image009[9],縱軸是clip_image012[4]clip_image009[10]clip_image012[5]既要在矩形方框內,也要在直線上,所以 L  <= α2new   <= H

最終獲得的值:

再根據  獲得 α1new 

   

2.5 臨界狀況的求值

對於大部分狀況 η = K11 + K22 - 2K12 > 0 ,求解方式如上;但 η <= 0 , α2new 取臨界點L或H。

η<0時,目標函數爲凸函數,沒有極小值,極值在定義域邊界處取得。 
η=0時,目標函數爲單調函數,一樣在邊界處取極值。 

計算方法:

3 啓發式選取變量

 3.1 對第一個變量的選取

第一個變量的選擇稱爲外循環,首先遍歷整個樣本集,選擇違反KKT條件的αi做爲第一個變量,接着依據相關規則選擇第二個變量(見下面分析),對這兩個變量採用上述方法進行優化。當遍歷完整個樣本集後,遍歷非邊界樣本集(0<αi<C)中違反KKT的αi做爲第一個變量,一樣依據相關規則選擇第二個變量,對此兩個變量進行優化。當遍歷完非邊界樣本集後,再次回到遍歷整個樣本集中尋找,即在整個樣本集與非邊界樣本集上來回切換,尋找違反KKT條件的αi做爲第一個變量。直到遍歷整個樣本集後,沒有違反KKT條件αi,而後退出。 

 

3.2 對第二個變量的選取

SMO稱第二個變量的選擇過程爲內循環,假設在外循環中找個第一個變量記爲α1,第二個變量的選擇但願能使α2有較大的變化,因爲α2是依賴於|E1E2|,當E1爲正時,那麼選擇最小的Ei做爲E2,若是E1爲負,選擇最大Ei做爲E2,一般爲每一個樣本的Ei保存在一個列表中,選擇最大的|E1E2|來近似最大化步長。 

 4 閾值b的計算

每完成兩個變量的優化後,都要對閾值 b 進行更新,由於關係到 f(x) 的計算,即關係到下次優化時計算。

 

這部分結束了,經過SMO算法解出的對偶因子的值,能夠獲得最優的超平面方程 f (x) = ωTx + b ,即對樣本可以劃分。以上大多借鑑了臺的blog 文章,他寫的已經很清晰,我只是在他的基礎上

 增長或刪去很差理解的內容。下篇是對核函數和KKT條件的解釋。

機器學習之支持向量機(一):支持向量機的公式推導

機器學習之支持向量機(二):SMO算法

機器學習之支持向量機(三):核函數和KKT條件的理解

機器學習之支持向量機(四):支持向量機的Python語言實現

參考:

1 【機器學習詳解】SMO算法剖析  http://blog.csdn.net/luoshixian099/article/details/51227754 

2  支持向量機(五)SMO算法

3 支持向量機通俗導論(理解SVM的三層境界)

相關文章
相關標籤/搜索