支持向量機(Support Vector Machine,SVM)詳解
主要內容
- 支持向量機簡介
- 數據線性可分的情況
- 間隔與支持向量
- 對偶問題
- SMO算法
- 數據非線性可分的情況
1、支持向量機簡介
支持向量機(support vector machine)是一種二分類模型,其基本模型定義是特徵空間上的間隔最大的線性分類器(當採用線性核時),即支持向量機的學習策略是間隔最大化,最終可轉化爲一個凸二次規劃問題的求解。
支持向量機於1995年正式發表,由於在文本分類任務中顯示出卓越性能,很快成爲機器學習的主流技術,並直接掀起了“統計學習”在2000年前後的高潮。但實際上,支持向量的概念早在二十世紀六十年代就已出現,統計學習理論在七十年代就已成型。對核函數的研究更早,Mercer定理可追溯到1909年,RKHS則在四十年代就已被研究,但在統計學習興起之後,核技巧才真正成爲機器學習的通用基本技術。
支持向量機的求解通常是藉助於凸優化技術。如何提高效率,使SVM能適用於大規模數據一直是研究重點。對線性核SVM已有很多成果,例如基於割平面法的SVM具有線性複雜度,基於隨機梯度下降的Pegasos速度甚至更快,而座標下降法則在稀疏數據上有很高的效率。非線性核SVM的時間複雜度在理論上不可能低於 ,因此研究重點是設計快速近似算法,如基於採樣的CVM、基於低秩逼近的Nyström方法、基於隨機傅里葉特徵的方法等。最近有研究顯示,當核矩陣特徵值有很大差別時,Nyström方法往往優於隨機傅里葉特徵方法。
支持向量機是針對二分類任務設計的,對多分類任務要進行專門的推廣,對帶結構輸出的任務也已有相應的算法。
核函數直接決定了支持向量機與核方法的最終性能,但遺憾的是,核函數的選擇是一個未決問題。多核學習使用多個核函數並通過學習獲得其最優凸組合作爲最終的核函數,這實際上是在藉助集成學習機制。
SVM已有很多軟件包,比較著名的有LIBSVM [Chang and Lin,2011]和LIBLINEAR [Fan et al.,2008]等。
2、數據線性可分的情況
2.1 間隔與支持向量
給定訓練樣本集 , ,分類學習最基本的想法就是基於訓練集 在樣本空間中找到一個劃分超平面,將不同類別的樣本分開。但能將訓練樣本分開的劃分超平面可能有很多,如圖1所示,那麼應該選取哪一個呢?
圖 1
直觀上看,應該尋找位於兩類訓練樣本“正中間”的劃分超平面,即圖1中紅色的那個,因爲該劃分超平面對訓練樣本局部擾動的“容忍”性最好。例如,由於訓練集的侷限性或噪聲的因素,訓練集外的樣本可能比圖1中的訓練樣本更接近兩個類的分隔界,這將使許多劃分超平面出現錯誤,而紅色的超平面受影響最小。換言之,這個劃分超平面所產生的分類結果是最魯棒的,對未見示例的泛化能力最強。
在樣本空間中,劃分超平面可通過如下線性方程來描述:
假設超平面 能將訓練樣本正確分類,即對於 ,若 ,則有 ;若 ,則有 。令
如圖2所示,距離超平面最近的這幾個訓練樣本點使式(3)的等號成立,它們被稱爲“支持向量”(support vector),兩個異類支持向量到超平面的距離之和爲:
圖 2
欲找到具有“最大間隔”(maximum margin)的劃分超平面,也就是要找到能夠滿足式(3)中約束的參數 和 ,使得 最大,即
顯然,爲了最大化間隔,僅需最大化 ,這等價於最小化 。於是,式(5)可重寫爲:
這就是支持向量機(support vector machine,SVM)基本模型。
2.2 對偶問題
我們希望求解式(6)來得到最大間隔劃分超平面所對應的模型:
對式(6)使用拉格朗日乘子法可得到其“對偶問題”(dual problem)。具體來說,對式(6)的每條約束添加拉格朗日乘子 ,則該問題的拉格朗日函數可寫爲:
從對偶問題(11)解出的 是式(8)中的拉格朗日乘子,它恰對應着訓練樣本 。注意到式(6)中有不等式約束,因此上述過程需滿足KKT(Karush-Kuhn-Tucker)條件,即要求
2.3 SMO算法
那麼,如何求解式(11)呢?不難發現,這是一個二次規劃問題,可使用通用的二次規劃算法來求解;然而,該問題的規模正比於訓練樣本數,這會在實際任務中造成很大的開銷。爲了避免這個障礙,人們通過利用問題本身的特性,提出了很多高效算法,SMO(Sequential Minimal Optimization)是其中一個著名的代表 [Platt, 1998]。
SMO的基本思路是先固定 之外的所有參數,然後求 上的極值。由於存在約束 ,若固定 之外的其他變量,則 可由其他變量導出。於是,SMO每次選擇兩個變量 和 ,並固定其他參數。這樣,在參數初始化後,SMO不斷執行如下兩個步驟直至收斂:
- 選取一對需更新的變量 和 ;
- 固定 和 以外的參數,求解式(11)獲得更新後的 和 。
注意到只需選取的 和 中有一個不滿足KKT條件(13),目標函數就會在迭代後增大 [Osuna et al., 1997]。直觀來看,KKT條件違背的程度越大,則變量更新後可能導致的目標函數值增幅越大。於是,SMO先選取違背KKT條件程度最大的變量。第二個變量應選擇一個使目標函數值增長最快的變量,但由於比較各變量所對應的目標函數值增幅的複雜度過高,因此SMO採用了一個啓發式:使選取的兩變量所對應樣本之間的間隔最大。一種直觀的解釋是,這樣的兩個變量有很大的差別,與對兩個相似的變量進行更新相比,對他們進行更新會帶給目標函數值更大的變化。
SMO算法之所以高效,恰由於在固定其他參數後,僅優化兩個參數的過程能做到非常高效。具體來說,僅考慮 和 時,式(11)中的約束可重寫爲:
如何確定偏移項 呢?注意到對任意支持向量 都有 ,即
3、數據非線性可分的情況
當數據線性不可分時,主要思路:通過恰當的核函數,將原始樣本空間映射至一個更高維的特徵空間,使得樣本在這個更高維的特徵空間線性可分。
SVM常用的核函數有以下幾種:
公式(11)中 被稱爲線性核函數,能夠有效處理線性可分的情況。當數據線性不可分時,可以通過上表中其他核函數代替公式(11)中的線性核函數,從而將原始樣本空間映射至一個更高維的特徵空間,使得樣本在這個更高維的特徵空間線性可分。
當通過訓練樣本訓練SVM時,該如何選取核函數呢?一是利用專家的先驗知識預先選定核函數;二是採用交叉驗證方法,即在進行核函數選取時,分別試用不同的核函數,歸納誤差最小的核函數就是最優的核函數。就分類效果來說,非線性核比線性核好一些,當然也需要更多的計算開銷;對於線性核函數,沒有專門需要設置的參數。
情況1:當訓練集不大,而屬性特徵比較多的時候,可以採用線性核,因爲較多的屬性特徵就已經可以給線性核提供不錯的variance去fit訓練集。
情況2:當訓練集相對可觀,而屬性特徵比較少的時候,可以採用非線性核,因爲需要算法提供更多的variance去fit訓練集。
情況3:當屬性特徵比較少,而訓練集非常龐大的時候,可以採用線性核,因爲非線性核需要的計算量太大了,而龐大的訓練集,本身就可以給非線性核提供很好的分類效果。
注:如果很難確定合適的核函數使訓練集在特徵空間有效分開,可以通過軟間隔,即通過損失函數去解決(加入損失函數的約束),當然損失函數中可以加入正則解決過擬合問題。