支持向量機SVM基本理論

轉自:http://www.cnblogs.com/steven-yang/p/5658362.html

基本概念

  • SVM - Support Vector Machine。支持向量機,其含義是通過支持向量運算的分類器。其中“機”的意思是機器,可以理解爲分類器。
    什麼是支持向量呢?在求解的過程中,會發現只根據部分數據就可以確定分類器,這些數據稱爲支持向量。
    見下圖,在一個二維環境中,其中點R,S,G點和其它靠近中間黑線的點可以看作爲支持向量,它們可以決定分類器,也就是黑線的具體參數。
    Figure SVM 1

  • 分類器:就是分類函數。

  • 線性分類:可以理解爲在2維空間中,可以通過一條直線來分類。在p維空間中,可以通過一個p-1維的超平面來分類。

  • 向量:有多個屬性的變量。在多維空間中的一個點就是一個向量。比如 x=(x1,x2,...,xn)x=(x1,x2,...,xn)。下面的ww也是向量。

  • 約束條件(subject to) : 在求一個函數的最優值時需要滿足的約束條件。

  • 向量相乘: xwT=ni=1wixixwT=∑i=1nwixi

  • 內積: x,y=ni=1xiyi⟨x,y⟩=∑i=1nxiyi

解決的問題:

  • 線性分類
    在訓練數據中,每個數據都有n個的屬性和一個二類類別標誌,我們可以認爲這些數據在一個n維空間裏。我們的目標是找到一個n-1維的超平面(hyperplane),這個超平面可以將數據分成兩部分,每部分數據都屬於同一個類別。
    其實這樣的超平面有很多,我們要找到一個最佳的。因此,增加一個約束條件:這個超平面到每邊最近數據點的距離是最大的。也成爲最大間隔超平面(maximum-margin hyperplane)。這個分類器也成爲最大間隔分類器(maximum-margin classifier)。
    支持向量機是一個二類分類器。

  • 非線性分類
    SVM的一個優勢是支持非線性分類。它結合使用拉格朗日乘子法和KKT條件,以及核函數可以產生非線性分類器。

  • 分類器1 - 線性分類器
    是一個線性函數,可以用於線性分類。一個優勢是不需要樣本數據。
    classifier 1:

    f(x)=xwT+b(1)(1)f(x)=xwT+b

    ww 和 bb 是訓練數據後產生的值。

  • 分類器2 - 非線性分類器
    支持線性分類和非線性分類。需要部分樣本數據(支持向量),也就是αi0αi≠0的數據。

    w=ni=1αiyixiw=∑i=1nαiyixi

    classifier 2:

    f(x)=ni=1αiyiK(xi,x)+bherexi : training data iyi : label value of training data iαi : Lagrange multiplier of training data iK(x1,x2)=exp(x1x222σ2) : kernel function(2)(2)f(x)=∑i=1nαiyiK(xi,x)+bherexi : training data iyi : label value of training data iαi : Lagrange multiplier of training data iK(x1,x2)=exp(−∥x1−x2∥22σ2) : kernel function

    αασσ 和 bb 是訓練數據後產生的值。
    可以通過調節σσ來匹配維度的大小,σσ越大,維度越低。

核心思想

  • SVM的目的是要找到一個線性分類的最佳超平面 f(x)=xwT+b=0f(x)=xwT+b=0。求 ww 和 bb
  • 首先通過兩個分類的最近點,找到f(x)f(x)的約束條件。
  • 有了約束條件,就可以通過拉格朗日乘子法和KKT條件來求解,這時,問題變成了求拉格朗日乘子αiαi 和 bb
  • 對於異常點的情況,加入鬆弛變量ξξ來處理。
  • 使用SMO來求拉格朗日乘子αiαibb。這時,我們會發現有些αi=0αi=0,這些點就可以不用在分類器中考慮了。
  • 驚喜! 不用求ww了,可以使用拉格朗日乘子αiαibb作爲分類器的參數。
  • 非線性分類的問題:映射到高維度、使用核函數。

詳解

線性分類及其約束條件

SVM的解決問題的思路是找到離超平面的最近點,通過其約束條件求出最優解。
Figure SVM 1
對於訓練數據集T,其數據可以分爲兩類C1和C2。
對於函數:f(x)=xwT+bf(x)=xwT+b
對於C1類的數據 xwT+b1xwT+b⩾1。其中至少有一個點xixi, f(xi)=1f(xi)=1。這個點稱之爲最近點。
對於C2類的數據 xwT+b1xwT+b⩽−1。其中至少有一個點xixi, f(xi)=1f(xi)=−1。這個點稱也是最近點。
上面兩個約束條件可以合併爲:
yif(xi)=yi(xiwT+b)1yif(xi)=yi(xiwT+b)⩾1
yiyi是點xixi對應的分類值(-1或者1)。
wwbb.
則超平面函數是xwT+b=0xwT+b=0
爲了求最優的f(x), 期望訓練數據中的每個點到超平面的距離最大。
(解釋1: 這裏需要理解一個事情,根據上圖,我們可以給每個點做一條平行於超平面的平行線(超平行面),因此,這個最大化相當於求最近點到超平面距離的最大化。)

總結,現在我們的公式是:
Formula 6.1

f(x)=xwT+bsubject toyif(xi)=yi(xiwT+b)1,i=1,...,n(3)(3)f(x)=xwT+bsubject toyif(xi)=yi(xiwT+b)⩾1,i=1,...,n

幾個訓練腦筋的小問題:

  • Q: y是否可以是其它非{-1, 1}的值?
    A: 將y值定義爲{-1, 1}是最簡化的方案。你的分類可以是cat和dog,只要將cat對應到1, dog對應到-1就可以了。你也可以將y值定義爲其它數比如: -2, 2或者2, 3之類的,但是這樣就需要修改超平面函數和約束條件,增加了沒必要的繁瑣,實際上和y值定義爲{-1, 1}是等價的。

  • Q: 如果兩組數據裏的太近或者太遠,是不是可能就找不到xwT+b=1xwT+b=1 和xwT+b=1xwT+b=−1的這兩個點?
    A: 不會。假設可以找到xiwT+b=cxiwT+b=c 和 xjwT+b=cxjwT+b=−cc>0andc<>1c>0andc<>1。其超平面函數爲xwT+b=0xwT+b=0.
    上面公式左右同時除以c, 則:
    xiwT/c+b/c=1xiwT/c+b/c=1
    xjwT/c+b/c=1xjwT/c+b/c=−1
    令:
    w=w/cw′=w/c
    b=b/cb′=b/c
    有:
    xiwT+b=1xiw′T+b′=1
    xjwT+b=1xjw′T+b′=−1
    可以找到超平面函數:
    xwT+b=0xwT+b′=0
    因此,總是可以找到y是{-1, 1}的超平面,如果有的話。

最大幾何間隔(geometrical margin)

f(x)f(x)爲函數間隔γγ
如果求max yf(x)max yf(x),有個問題,就是w和b可以等比例增大,導致yf(x)yf(x)的間隔可以無限大。因此需要變成求等價的最大幾何間隔:

γ¯=yf(x)wsubject toyif(xi)=yi(xiwT+b)1,i=1,...,n(4)(4)γ¯=yf(x)∥w∥subject toyif(xi)=yi(xiwT+b)⩾1,i=1,...,n

w∥w∥ : 二階範數,也就是各項目平方和的平方根。 ni=1w2i∑i=1nwi2

根據上面的解釋,這個問題可以轉變爲:

max 1wsubject toyi(xiwT+b)1,i=1,...,n(5)(5)max 1∥w∥subject toyi(xiwT+b)⩾1,i=1,...,n

再做一次等價轉換:
Formula 6.2

min 12w2subject toyi(xiwT+b)1,i=1,...,n(6)(6)min 12∥w∥2subject toyi(xiwT+b)⩾1,i=1,...,n

求解問題w,bαi,bw,b⇔αi,b

我們使用拉格朗日乘子法和KKT條件來求wwbb,一個重要原因是使用拉格朗日乘子法後,還可以解決非線性劃分問題。
拉格朗日乘子法和KKT條件可以解決下面這個問題:

  1. 求一個最優化問題 f(x)f(x)
    剛好對應我們的問題:min12w2min12∥w∥2
  2. 如果存在不等式約束gk(x)<=0,k=1,,qgk(x)<=0,k=1,…,q
    對應 subject to 1yi(xiwT+b)<=0,i=1,...,nsubject to 1−yi(xiwT+b)<=0,i=1,...,n
  3. F(x)必須是凸函數。這個也滿足。

SVM的問題滿足使用拉格朗日乘子法的條件。因此問題變成:
Formula 6.3

maxα W(α)=L(w,b,α)=12w2ni=1αi(yi(xiwT+b)1)subject toαi>=0,i=1,...,nni=1αiyi=01yi(xiwT+b)<=0,i=1,...,nw=ni=1αiyixihereαi : Lagrange multiplier of training data i(7)(7)maxα W(α)=L(w,b,α)=12∥w∥2−∑i=1nαi(yi(xiwT+b)−1)subject toαi>=0,i=1,...,n∑i=1nαiyi=01−yi(xiwT+b)<=0,i=1,...,nw=∑i=1nαiyixihereαi : Lagrange multiplier of training data i

消除ww之後變爲:
Formula 6.4

maxα W(α)=L(w,b,α)=ni=1αi12ni,j=1αiαjyiyjxTixjsubject toαi>=0,i=1,...,nni=1αiyi=0αi(1yi(nj=1αjyjxj,xi+b))=0,i=1,...,n(8)(8)maxα W(α)=L(w,b,α)=∑i=1nαi−12∑i,j=1nαiαjyiyjxiTxjsubject toαi>=0,i=1,...,n∑i=1nαiyi=0αi(1−yi(∑j=1nαjyj⟨xj,xi⟩+b))=0,i=1,...,n

xj,xi⟨xj,xi⟩xjxj 和 xixi的內積,相當於xixTjxixjT
可見使用拉格朗日乘子法和KKT條件後,求w,bw,b的問題變成了求拉格朗日乘子αiαibb的問題。
到後面更有趣,變成了不求ww了,因爲αiαi可以直接使用到分類器中去,並且可以使用αiαi支持非線性的情況(xwT+bxwT+b是線性函數,支持不了非線性的情況哦)。

以上的具體證明請看:
解密SVM系列(二):SVM的理論基礎
關於拉格朗日乘子法和KKT條件,請看:
深入理解拉格朗日乘子法(Lagrange Multiplier)和KKT條件

處理異常點(outliers)

outliers image
如上圖:點w是一個異常點,導致無法找到一個合適的超平面,爲了解決這個問題,我們引入鬆弛變量(slack variable)ξξ
修改之間的約束條件爲:xiwT+b>=1ξifor all i = 1, …, nxiwT+b>=1–ξifor all i = 1, …, n
則運用拉格朗日乘子法之後的公式變爲:
Formula 6.5

maxα W(α)=L(w,b,α)=ni=1αi12ni,j=1αiαjyiyjxjxTisubject to0αiC,i=1,...,nni=1αiyi=0αi(1yi(nj=1αjyjxj,xi+b))=0,i=1,...,n(9)(9)maxα W(α)=L(w,b,α)=∑i=1nαi−12∑i,j=1nαiαjyiyjxjxiTsubject to0⩽αi⩽C,i=1,...,n∑i=1nαiyi=0αi(1−yi(∑j=1nαjyj⟨xj,xi⟩+b))=0,i=1,...,n

輸入參數:

  • 參數CC,越大表明影響越嚴重。CC應該一個大於0值。其實CC也不能太小,太小了就約束αiαi了,比如200。
  • 參數ξξ,對所有樣本數據起效的鬆弛變量,比如:0.0001。
    具體證明請看:
    解密SVM系列(二):SVM的理論基礎

求解αα - 使用SMO方法

1996年,John Platt發佈了一個稱爲SMO的強大算法,用於訓練SVM。SMO表示序列最小優化(Sequential Minimal Optimization)。
SMO方法:
概要:SMO方法的中心思想是每次取一對αiαiαjαj,調整這兩個值。
參數: 訓練數據/分類數據/CC/ξξ/最大迭代數
過程:

初始化αα爲0;
在每次迭代中 (小於等於最大迭代數),
- 找到第一個不滿足KKT條件的訓練數據,對應的αiαi
- 在其它不滿足KKT條件的訓練數據中,找到誤差最大的x,對應的index的αjαj
αiαiαjαj組成了一對,根據約束條件調整αiαiαjαj

不滿足KKT條件的公式:
Formula 6.6

(1) yi(uiyi)ξ and αi<C(2) yi(uiyi)ξ and αi>0hereui=nj=1αjyjK(xj,xi)+bK(x1,x2)=x1,x2ξ : slack variable(10)(10)(1) yi(ui−yi)⩽ξ and αi<C(2) yi(ui−yi)⩾ξ and αi>0hereui=∑j=1nαjyjK(xj,xi)+bK(x1,x2)=⟨x1,x2⟩ξ : slack variable

調整公式:
Formula 6.7
αnew2=αold2y2(E1E2)ηαnew1=αold1+y1y2(αold2αnew2)b1=boldE1y1(αnew1αold1)K(x1,x1)y2(αnew2αold2)K(x1,x2)b2=boldE2y1(αnew1αold1)K(x1,x2)y2(αnew2αold2)K(x2,x2)b=b1b2b1+b22if 0αnew1Cif 0αnew2CotherwisehereEi=uiyiη=2K(x1,x2)K(x1,x1)K(x2,x2)ui=nj=1αjyjK(xj,xi)+bK(x1,x2)=x1,x2(11)(11)α2new=α2old−y2(E1−E2)ηα1new=α1old+y1y2(α2old−α2new)b1=bold−E1−y1(α1new−α1old)K(x1,x1)−y2(α2new−α2old)K(x1,x2)b2=bold−E2−y1(α1new−α1old)K(x1,x2)−y2(α2new−α2old)K(x2,x2)b={b1if 0⩽α1new⩽Cb2if 0⩽α2new⩽Cb1+b22otherwisehereEi=ui−yiη=2K(x1,x2)−K(x1,x1)−K(x2,x2)ui=∑j=1nαjyjK(xj,xi)+bK(x1,x2)=⟨x1,x2⟩

具體證明請參照:
解密SVM系列(三):SMO算法原理與實戰求解

最後一步:解決非線性分類

根據機器學習的理論,非線性問題可以通過映射到高維度後,變成一個線性問題。
比如:二維下的一個點<x1,x2><x1,x2>, 可以映射到一個5維空間,這個空間的5個維度分別是:x1,x2,x1x2,x12,x22x1,x2,x1x2,x12,x22
映射到高維度,有兩個問題:一個是如何映射?另外一個問題是計算變得更復雜了。
幸運的是我們可以使用核函數(Kernel function)來解決這個問題。
核函數(kernel function)也稱爲核技巧(kernel trick)。
核函數的思想是:

仔細觀察Formula 6.6 和 Formula 6.7,就會發現關於向量xx的計算,總是在計算兩個向量的內積K(x1,x2)=x1,x2K(x1,x2)=⟨x1,x2⟩
因此,在高維空間裏,公式的變化只有計算低維空間下的內積x1,x2⟨x1,x2⟩變成了計算高維空間下的內積x1,x2⟨x1′,x2′⟩
核函數提供了一個方法,通過原始空間的向量值計算高維空間的內積,而不用管映射的方式。
我們可以用核函數代替K(x1,x2)K(x1,x2)

核函數有很多種, 一般可以使用高斯核(徑向基函數(radial basis function))
Formula 6.8

K(x1,x2)=exp(x1x222σ2)(12)(12)K(x1,x2)=exp(−∥x1−x2∥22σ2)

可以通過調節σσ來匹配維度的大小,σσ越大,維度越低,比如10。
可以參照:
解密SVM系列(四):SVM非線性分類原理實驗
支持向量機通俗導論(理解SVM的三層境界)

如何解決多類分類問題

支持向量機是一個二類分類器。基於SVM如何構建多類分類器,建議閱讀C. W. Huset等人發表的一篇論文"A Comparison of Methods for Multiclass Support Vector Machines"。需要對代碼做一些修改。


發佈了4 篇原創文章 · 獲贊 14 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章