支持向量機(Support Vector Machine,SVM)詳解

支持向量機(Support Vector Machine,SVM)詳解

  • 主要內容

    • 支持向量機簡介
    • 數據線性可分的情況
      • 間隔與支持向量
      • 對偶問題
      • SMO算法
    • 數據非線性可分的情況

1、支持向量機簡介
  支持向量機(support vector machine)是一種二分類模型,其基本模型定義是特徵空間上的間隔最大的線性分類器(當採用線性核時),即支持向量機的學習策略是間隔最大化,最終可轉化爲一個凸二次規劃問題的求解。
   支持向量機於1995年正式發表,由於在文本分類任務中顯示出卓越性能,很快成爲機器學習的主流技術,並直接掀起了“統計學習”在2000年前後的高潮。但實際上,支持向量的概念早在二十世紀六十年代就已出現,統計學習理論在七十年代就已成型。對核函數的研究更早,Mercer定理可追溯到1909年,RKHS則在四十年代就已被研究,但在統計學習興起之後,核技巧才真正成爲機器學習的通用基本技術。
  支持向量機的求解通常是藉助於凸優化技術。如何提高效率,使SVM能適用於大規模數據一直是研究重點。對線性核SVM已有很多成果,例如基於割平面法的SVM具有線性複雜度,基於隨機梯度下降的Pegasos速度甚至更快,而座標下降法則在稀疏數據上有很高的效率。非線性核SVM的時間複雜度在理論上不可能低於O(m2) ,因此研究重點是設計快速近似算法,如基於採樣的CVM、基於低秩逼近的Nyström方法、基於隨機傅里葉特徵的方法等。最近有研究顯示,當核矩陣特徵值有很大差別時,Nyström方法往往優於隨機傅里葉特徵方法。
  支持向量機是針對二分類任務設計的,對多分類任務要進行專門的推廣,對帶結構輸出的任務也已有相應的算法。
  核函數直接決定了支持向量機與核方法的最終性能,但遺憾的是,核函數的選擇是一個未決問題。多核學習使用多個核函數並通過學習獲得其最優凸組合作爲最終的核函數,這實際上是在藉助集成學習機制。
  SVM已有很多軟件包,比較著名的有LIBSVM [Chang and Lin,2011]和LIBLINEAR [Fan et al.,2008]等。

2、數據線性可分的情況
2.1 間隔與支持向量
  給定訓練樣本集D={(x1,y1),(x2,y2),...,(xm,ym)}yi{1,+1} ,分類學習最基本的想法就是基於訓練集D 在樣本空間中找到一個劃分超平面,將不同類別的樣本分開。但能將訓練樣本分開的劃分超平面可能有很多,如圖1所示,那麼應該選取哪一個呢?

這裏寫圖片描述
圖 1

  直觀上看,應該尋找位於兩類訓練樣本“正中間”的劃分超平面,即圖1中紅色的那個,因爲該劃分超平面對訓練樣本局部擾動的“容忍”性最好。例如,由於訓練集的侷限性或噪聲的因素,訓練集外的樣本可能比圖1中的訓練樣本更接近兩個類的分隔界,這將使許多劃分超平面出現錯誤,而紅色的超平面受影響最小。換言之,這個劃分超平面所產生的分類結果是最魯棒的,對未見示例的泛化能力最強。
  在樣本空間中,劃分超平面可通過如下線性方程來描述:
(3286)wTx+b=0     (1)
其中,w=(w1;w2;...;wd) 爲法向量,決定了超平面的方向,d 爲樣本屬性個數;b 爲位移項,決定了超平面與原點之間的距離。顯然,劃分超平面可被法向量w 和位移b 確定,我們將其記爲(w,b) 。樣本空間中任意點x 到超平面(w,b) 的距離可寫爲:
(3287)r=|wTx+b|||w||     (2)
其中,||w|| 爲歐幾里得泛數,||w||=ww=w12+w22+...+wd2
  假設超平面(w,b) 能將訓練樣本正確分類,即對於(xi,yi)D ,若yi=+1 ,則有wTx+b>0 ;若yi=1 ,則有wTx+b<0 。令
{wTxi+b+1,yi=+1wTxi+b1,yi=1     (3)

  如圖2所示,距離超平面最近的這幾個訓練樣本點使式(3)的等號成立,它們被稱爲“支持向量”(support vector),兩個異類支持向量到超平面的距離之和爲:
(3288)γ=2||w||     (4)
它被稱爲“間隔”(margin)。
這裏寫圖片描述
圖 2

  欲找到具有“最大間隔”(maximum margin)的劃分超平面,也就是要找到能夠滿足式(3)中約束的參數wb ,使得γ 最大,即
(3289)maxw,b 2||w||     (5)s.t. yi(wTxi+b)1, i=1,2,...,m

  顯然,爲了最大化間隔,僅需最大化||w||1 ,這等價於最小化||w||2 。於是,式(5)可重寫爲:
(3290)minw,b 12||w||2     (6)s.t. yi(wTxi+b)1, i=1,2,...,m

這就是支持向量機(support vector machine,SVM)基本模型。

2.2 對偶問題
  我們希望求解式(6)來得到最大間隔劃分超平面所對應的模型:

(3291)f(x)=wTx+b     (7)
其中,wb 是模型參數。注意到式(6)本身是一個凸二次規劃(convex quadratic programming)問題,能直接用現成的優化計劃包求解,但我們可以有更高效的方法。
  對式(6)使用拉格朗日乘子法可得到其“對偶問題”(dual problem)。具體來說,對式(6)的每條約束添加拉格朗日乘子αi0 ,則該問題的拉格朗日函數可寫爲:
(3292)L(w,b,α)=12||w||2+i=1mαi(1yi(wTxi+b))     (8)
其中,α=(α1;α2;...;αm) 。令L(w,b,α)wb 的偏導爲零,可得:
(3293)w=i=1mαiyixi     (9)0=i=1mαiyi     (10)
將式(9)代入(8),即可將L(w,b,α) 中的wb 消去,再考慮式(10)的約束,就得到式(6)的對偶問題:
(3294)maxα i=1mαi12i=1mj=1mαiαjyiyjxiTxj      (11)s.t. i=1mαiyi=0, αi0, i=1,2,...,m
解出α 後,求出wb 即可得到模型:
(3295)f(x)=wTx+b=i=1mαiyixiTx+b     (12)

  從對偶問題(11)解出的αi 是式(8)中的拉格朗日乘子,它恰對應着訓練樣本(xi,yi) 。注意到式(6)中有不等式約束,因此上述過程需滿足KKT(Karush-Kuhn-Tucker)條件,即要求
{αi0yif(xi)10αi(yif(xi)1)=0     (13)
於是,對任意訓練樣本(xi,yi) ,總有αi=0yif(xi)=1 。若αi=0 ,則該樣本將不會在式(12)的求和中出現,也就不會對f(x) 有任何影響;若αi>0 ,則必有yif(xi)=1 ,所對應的樣本點位於最大間隔邊界上,是一個支持向量。這顯示出支持向量機的一個重要性質:訓練完成後,大部分的訓練樣本都不需要保留,最終模型僅與支持向量有關。

2.3 SMO算法
  那麼,如何求解式(11)呢?不難發現,這是一個二次規劃問題,可使用通用的二次規劃算法來求解;然而,該問題的規模正比於訓練樣本數,這會在實際任務中造成很大的開銷。爲了避免這個障礙,人們通過利用問題本身的特性,提出了很多高效算法,SMO(Sequential Minimal Optimization)是其中一個著名的代表 [Platt, 1998]。
  SMO的基本思路是先固定αi 之外的所有參數,然後求αi 上的極值。由於存在約束i=1mαiyi=0 ,若固定αi 之外的其他變量,則αi 可由其他變量導出。於是,SMO每次選擇兩個變量αiαj ,並固定其他參數。這樣,在參數初始化後,SMO不斷執行如下兩個步驟直至收斂:

  • 選取一對需更新的變量αiαj
  • 固定αiαj 以外的參數,求解式(11)獲得更新後的αiαj

  注意到只需選取的αiαj 中有一個不滿足KKT條件(13),目標函數就會在迭代後增大 [Osuna et al., 1997]。直觀來看,KKT條件違背的程度越大,則變量更新後可能導致的目標函數值增幅越大。於是,SMO先選取違背KKT條件程度最大的變量。第二個變量應選擇一個使目標函數值增長最快的變量,但由於比較各變量所對應的目標函數值增幅的複雜度過高,因此SMO採用了一個啓發式:使選取的兩變量所對應樣本之間的間隔最大。一種直觀的解釋是,這樣的兩個變量有很大的差別,與對兩個相似的變量進行更新相比,對他們進行更新會帶給目標函數值更大的變化。
  SMO算法之所以高效,恰由於在固定其他參數後,僅優化兩個參數的過程能做到非常高效。具體來說,僅考慮αiαj 時,式(11)中的約束可重寫爲:

(3296)αiyi+αjyj=c, αi0, αj0     (14)
其中
(3297)c=ki,jαkyk     (15)
是使i=1mαiyi=0 成立的常數。用
(3298)αiyi+αjyj=c     (16)
消去式(11)中的變量αj ,則得到一個關於αi 的單變量二次規劃問題,僅有的約束是αi0 。不難發現,這樣的二次規劃問題具有閉式解,於是不必調用數值優化算法即可高效地計算出更新後的αiαj
  如何確定偏移項b 呢?注意到對任意支持向量(xs,ys) 都有ysf(xs)=1 ,即
(3299)ys(iSαiyixiTxs+b)=1     (17)
其中,S={i|αi>0,i=1,2...,m} 爲所有支持向量的下標集。理論上,可選取任意支持向量並通過求解式(17)獲得b ,但現實任務中常採用一種更爲魯棒的做法:使用所有支持向量求解的均值:
(3300)b=1|S|sS(ysiSαiyixiTxs)     (18)

3、數據非線性可分的情況
  當數據線性不可分時,主要思路:通過恰當的核函數,將原始樣本空間映射至一個更高維的特徵空間,使得樣本在這個更高維的特徵空間線性可分。
  SVM常用的核函數有以下幾種:

這裏寫圖片描述

  公式(11)中 xiTxj 被稱爲線性核函數,能夠有效處理線性可分的情況。當數據線性不可分時,可以通過上表中其他核函數代替公式(11)中的線性核函數,從而將原始樣本空間映射至一個更高維的特徵空間,使得樣本在這個更高維的特徵空間線性可分。
  當通過訓練樣本訓練SVM時,該如何選取核函數呢?一是利用專家的先驗知識預先選定核函數;二是採用交叉驗證方法,即在進行核函數選取時,分別試用不同的核函數,歸納誤差最小的核函數就是最優的核函數。就分類效果來說,非線性核比線性核好一些,當然也需要更多的計算開銷;對於線性核函數,沒有專門需要設置的參數。
  情況1:當訓練集不大,而屬性特徵比較多的時候,可以採用線性核,因爲較多的屬性特徵就已經可以給線性核提供不錯的variance去fit訓練集。
  情況2:當訓練集相對可觀,而屬性特徵比較少的時候,可以採用非線性核,因爲需要算法提供更多的variance去fit訓練集。
  情況3:當屬性特徵比較少,而訓練集非常龐大的時候,可以採用線性核,因爲非線性核需要的計算量太大了,而龐大的訓練集,本身就可以給非線性核提供很好的分類效果。
  注:如果很難確定合適的核函數使訓練集在特徵空間有效分開,可以通過軟間隔,即通過損失函數去解決(加入損失函數的約束),當然損失函數中可以加入正則解決過擬合問題。

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