【機器學習】支持向量機SVM原理及推導

參考:http://blog.csdn.net/ajianyingxiaoqinghan/article/details/72897399 部分圖片來自於上面博客。

0 由來

在二分類問題中,咱們能夠計算數據代入模型後獲得的結果,若是這個結果有明顯的區別,這就說明模型能夠把數據分開。那麼,怎麼表示「區別」這個詞呢,拿最簡單的二維問題來說,「區別」能夠是數據點分佈在一條直線的兩側,而數據點代入方程後獲得的結果符號是不一樣的,這就達到了分類的目的。 而SVM的思想也是這樣,目的就是找到一個超平面,將數據點都正確地分在超平面的兩側。那麼,又怎麼表示這個「都正確」呢?能夠這樣考慮:就是讓那些「頗有可能不正確」的數據點彼此分開得明顯一點就能夠了。對於其它「不那麼可能不正確」或者說「一看就很正確」的數據點,就能夠不用管了。這也是SVM名稱的由來,模型是由那些支持向量(Support Vector)決定的。這也是爲何SVM對outlier不敏感。

1 間隔

遵循上面的邏輯,咱們去假設空間裏找模型了。可是一會兒出來好多個模型都符合咱們的要求,怎麼辦?天然咱們想要找到「最優」的那一個模型。那麼,怎麼衡量這個「最優」呢?根據【超平面】【數據點】【分開】這幾個詞,咱們能夠想到最優的模型必然是最大程度地將數據點劃分開的模型,不能靠近負樣本也不能靠近正樣本,要不偏不倚,而且與全部Support Vector的距離儘可能大才能夠。這就引出了間隔的討論。

上圖中 x0 x 在超平面上的投影, ω 是超平面的法向量,兩者平行能夠獲得:web

xx0=γωω(1.1)
兩邊同乘 ωT 並利用 ωTx0+b=0,ωTω=ω2 獲得:
γ=ωT+bω=f(x)ω(1.2)
固然,上式是帶正負號的,若是要獲得正值,即點到超平面的距離,乘上數據點的類別就好:
γ~=yγ(1.3)

2 最大間隔分類器

上面咱們推導出了間隔的表達式,天然的,咱們想讓數據點離超平面越遠越好。

回顧一下,在這樣的模型中,咱們只考慮那些支持向量就能夠了,對於那些顯然能夠分類成功的數據點,咱們順帶着討論它們就能夠。
不妨令那些「有可能分類不成功的點」,即靠近超平面的點,分佈在超平面 ωTx+b=±1 上,這裏的取值 1 只是爲了方便推導,後面咱們能夠看到,這個值不影響最後的優化過程。
這樣,支持向量到達咱們要優化的超平面 ωTx+b=0 的距離就是 1ω ,兩側的距離加起來就是 2ω ,同時,咱們要求模型對正負樣本要作到「不偏不倚」,對於這一條,咱們加上限制條件 y(ωT+b)1 就好。因而咱們獲得了不等式約束優化問題:算法

max2ωs.t.yi(ωTxi+b)1,i=1,2,...,m(2.1)
爲了方便推導,上式能夠等價地寫成:

min12ω2s.t.yi(ωTxi+b)1,i=1,2,...,m(2.2)

3 拉格朗日乘子法對偶問題

(2.2) 的優化目標是二次的,約束是線性的,總體是一個凸二次規劃問題。有現成的優化包能夠求解。但將其轉化爲拉格朗日對偶問題後求解更容易,也方便咱們後面引入核函數。app

對式 (2.2) 的每個不等式約束條件(m個數據點共有m個不等式)設置對應的拉格朗日乘子 αi>0 ,獲得原始問題的拉格朗日函數:svg

L(ω,b,α)=12ω2+i=1mαi[1yi(ωTxi+b)](3.1)
目標是讓拉格朗如函數 L(ω,b,α) 針對 α 達到最大值。爲何可以這麼寫呢,咱們能夠這樣想,哪怕有一個 yi(ωTxi+b)1 不知足,只要讓對應的 αi 是正無窮就行了。因此,若是 L(ω,b,α) 有有限的最大值,那麼那些不等式條件是天然知足的。 以後,咱們再讓 L(ω,b,α) 針對 ω,b 達到最小值,就能夠了。 從而,咱們的目標函數變成:
minω,bmaxαL(ω,b,α)=p(3.2)
爲方便求解,咱們將 min 和 max 的位置交換一下:
maxαminω,bL(ω,b,α)=d(3.3)
能夠證實, dp ,能夠經過求解 d 而近似求解 p 。(3.3)即爲原始問題的對偶問題。 因爲原始優化問題中有不等式條件,這裏的對偶問題須要知足下面形式的KKT條件纔能有解:

αi0yi(ωTxi+b)10αi[yi(ωTxi+b)1]=0(3.4)

這裏知道到咱們到目前爲止的推導是須要知足KKT條件的就行了。函數

下面咱們看一下具體怎樣求解對偶問題 (3.3) :優化

3.1 ω,b 的部分

咱們先看一下 minω,b 的部分。分別令 L(ω,b,α) ω,b 的導數等於0:atom

L(ω,b,α)ω=ωi=1mαiyixi=0(3.5)
L(ω,b,α)b=i=1mαiyi=0(3.6)
將(3.5)(3.6)代入(3.1):
L(ω,b,α)=12ω2+i=1mαi[1yi(ωTxi+b)]=12i=1mαiyixi2+i=1mαiωTi=1mαiyixi=i=1mαi+12ωTi=1mαiyixiωTi=1mαiyixi=i=1mαi(i=1mαiyixTi)(i=1mαiyixi)=i=1mαii=1mj=1mαiαjyiyjxTixj(3.7)
問題就變爲了:

maxαs.t.i=1mαii=1mj=1mαiαjyiyjxTixji=1mαiyi=0αi0(3.8)

3.2 α 的部分

獲得(3.8)以後怎麼求解呢?不難發現這是一個二次規劃問題。,但若是樣本數過多,則計算量過大。SMO是高效求解這個問題的算法表明。spa

咱們選取兩個變量 αi,αj ,(3.8)中的其它變量保持固定。獲得:.net

αiyi+αjyj=ki,jmαkyk=c(3.9)
能夠將 αj 消掉,只保留 αi ,(3.8)就變成了關於 αi 的單變量二次規劃問題,約束是 αi0 ,有**閉式解**。這樣算起來確定快。 那麼,怎樣找這兩個變量 αi,αj 比較好呢?第一個變量 αi 咱們確定選取那個最不知足KKT條件的 α ,第二個咱們須要選讓目標函數增加得最多的 α ,但每次計算太過麻煩。因此有一個啓發式的方法:咱們選取那個與 αi 所對應的樣本間隔最大的樣本所對應的 α 做爲 αj 。這樣與更新兩個類似的樣本相比,目標函數值變化更大。這裏的具體推導能夠參考 http://blog.csdn.net/ajianyingxiaoqinghan/article/details/73087304 。具體來講,咱們能夠用**預測值與真實值之差**來衡量這個「樣本間的差別」,若是 αi 對應的樣本預測值與真實值之差爲負的,那麼咱們就儘可能找一個差值爲正的且絕對值較大的,反之咱們就找一個差值爲負的且絕對值較大的。在幾何上能夠理解爲找那些暫時被分類錯誤的樣本。 固然,若是獲得的 αj 不能使函數值降低不少,那麼咱們還能夠乾脆就暴力找一個讓函數值降低最多的 αj ,或者再找一個不符合KKT條件的 αj 當作第二個 α 。 求解出 αnewi αnewj 以後,由KKT條件(3.4)可得,若 αnewi>0 ,則:
yi(i=1mαiyixi+b)=1(3.10)
就能夠對 b 進行更新,更新以後將預測值與真實值之差的列表更新一遍,以供下次循環使用。 固然,若是 αnewj>0 ,也能夠計算出相應的 b 值,若是兩個 b 值相等就取該值。 若是不相等就取平均值。 還有一種作法就是,對目前模型中全部的 α>0 ,都計算一個 b ,取平均值。 等到算法中止,b 也計算好了, ω 由(3.5)式得:

ω=i=1mαiyixi(3.11)

這樣,原始優化問題就解完了。xml

4 核函數

在前面的討論中,咱們假設數據集是線性可分的。可是現實任務中,可能並不存在一個超平面將數據集完美得分開。
這種狀況下,咱們能夠經過將原始空間映射到一個高維空間,若是高維空間中數據集是線性可分的,那麼問題就能夠解決了。
這樣,超平面變爲:

ωTϕ(x)+b=0(4.1)
通過像前面的一頓推導以後咱們獲得:
maxαs.t.i=1mαii=1mj=1mαiαjyiyjϕ(xi)Tϕ(xj)i=1mαiyi=0αi0(4.2)
可見,須要計算 ϕ(xi)Tϕ(xj) ,但不少時候,咱們並不知道高維空間是什麼樣子,也就是咱們根本連 ϕ(x) 是什麼樣子都不知道,更不要說若是高維空間維數很大, ϕ(xi)Tϕ(xj) 計算十分困難。 其實 ϕ(xi)Tϕ(xj) 只是一個實數,若是將它們當作一個總體,它也是關於 xi,xj 的一個函數,因此, 若是存在那麼一個神奇的函數 κ(xi,xj)=ϕ(xi)Tϕ(xj) ,咱們就能夠在低維空間計算出高維空間的點積結果。這個函數 κ(xi,xj) 就叫作**核函數**。 經常使用的核函數有:
名稱 表達式 參數
線型核 κ(xi,xj)=xTixj
多項式核 κ(xi,xj)=(xTixj)d d1 爲多項式次數
高斯核 κ(xi,xj)=exp(xixj22σ2) σ>0 爲高斯核的帶寬
拉普拉斯核 κ(xi,xj)=exp(xixjσ) σ>0
Sigmoid核 κ(xi,xj)=tanh(βxTixj+θ) β>0,θ<0tanh 爲雙曲正切函數

5 鬆弛變量

現實任務中,可能用上核函數仍是不能線性可分。或者即便找到線性可分的超平面,也不能判斷是否是過擬合。所以,咱們將標準放寬一些,容許SVM模型在某些數據點上「出錯」,爲此,要引入「軟間隔」:

前面的推導咱們要求 yi(ωTxi+b)1 ,如今,咱們將條件放寬:

yi(ωTxi+b)1ξi,i=1,2,...,m(5.1)

但同時,咱們但願這個 ξi 儘量小一點,越小不就越接近前面推導的線性可分麼。在目標函數中體現這一點,就獲得新的優化問題(對比2.2式):

mins.t.12ω2+Ci=1mξiyi(ωTxi+b)1,i=1,2,...,mξi>0(5.2)

C是衡量咱們「放寬力度」的常數。
與前面的推導相似,咱們獲得新的拉格朗日函數:

L(ω,b,ξ,α,μ)=12ω2+Ci=1mξi+i=1mαi[1ξiyi(ωTxi+b)]i=1mμiξi(5.3)

分別令 L(ω,b,ξ,α,μ) ω,b,ξi 的導數等於0:

L(ω,b,ξ,α,μ)ω=ωi=1mαiyixi=0(5.4)

L(ω,b,ξ,α,μ)b=i=1mαiyi=0(5.5)

L(ω,b,ξ,α,μ)ξi=Cαiμi=0(5.6)

將(5.4)(5.5)(5.6)代入(5.3)獲得對偶問題:

maxαs.t.i=1mαii=1mj=1mαiαjyiyjxTixji=1mαiyi=00αiC(5.7)

KKT條件:

αi0,μi0yi(ωTxi+b)1+ξi0αi[yi(ωTxi+b)1+ξi]=0ξi0,μiξi=0(5.8)

根據這些條件,用SMO算法求解就能夠了,只是在求解相關變量的時候注意有新的範圍限制。

從另外一個角度觀察(5.2),咱們能夠把 12ω2 當作是一個正則化項,也就是結構風險,描述了咱們但願模型具備某些性質,也就是引入了先驗知識。 Cmi=1ξi 項是經驗風險,用於描述模型與訓練集的契合程度,能夠把 ξi 寫成一個更通常的形式: l(f(xi),yi) ,上面推導的模型咱們能夠認爲 l hinge損失 l(f(xi),yi)=max(0,1yif(xi)) 。 從這裏也能夠看出,引入先驗知識,能夠減少模型求解時的搜索空間,由於咱們給了它一個目標:間隔最大化。