SVM(Support Vector Machine)分類器詳解


1. 拉格朗日乘子(Lagrange multiplier)法求解條件極值

1.1 拉格朗日乘子的簡單描述

簡單的條件極值問題可以描述為:求函數 z=f(x,y) 的最大值,且 x,y 滿足約束條件 φ(x,y)=M ( M 已知)。
拉格朗日乘子的求解步驟為:

  • 設置一個聯合函數,令:
    F(x,y,λ)=f(x,y)+λ(Mφ(x,y))

  • F(x,y,λ) 分別對變量 x,y,λ 求偏導,然后令偏導數為0
    F(x,y,λ)x=0
    F(x,y,λ)y=0
    F(x,y,λ)λ=0

  • 根據上式分別求解出所有滿足條件的 (x,y,λ) ,然后將所有的 (x,y) 值對代入函數 f(x,y) 中,取其最大最小值分別為函數在滿足約束條件下的最大最小值。

簡單的求解例子:
1. 給定橢球 x2a2+y2b2+z2c2=1 ,求橢球的最大內接長方體體積。
橢球內接長方體體積為 f(x,y,z)=xyz ,因此可以轉換為求函數 f(x,y,z) 的最大值。通過拉格朗日乘子法轉化為:
F(x,y,z,λ)=f(x,y,z)+λ(Mφ(x,y,z))=8xyz+λ(1x2a2+y2b2+z2c2)
分別對 x,y,z,λ 求偏導,得:
F(x,y,z,λ)x=8yz2λxa2=0F(x,y,z,λ)y=8xz2λya2=0F(x,y,z,λ)z=8xy2λza2=0F(x,y,z,λ)λ=1x2a2+y2b2+z2c2=0
最后解得:
x=33ay=33bz=33cλ=433abcfmax(x,y,z)=39abc

  1. 求拋物旋轉面 z=x2+y2 與平面 x+y+z=1 的交線到坐標原點的最近最遠點。
    目標函數為 f(x,y,z)=x2+y2+z2 ,限制條件為 φ1(x,y,z)=zx2y2 φ2(x,y,z)=1xyz
    F(x,y,z,λ1,λ2)=x2+y2+z2+λ1(zx2y2)+λ2(1xyz)
    分別對 x,y,z,λ1,λ2 求偏導,得:
    F(x,y,z,λ1,λ2)x=2x2λ1xλ2=0F(x,y,z,λ1,λ2)y=2y2λ1yλ2=0F(x,y,z,λ1,λ2)z=2z2λ1zλ2=0F(x,y,z,λ1,λ2)λ1=zx2y2=0F(x,y,z,λ1,λ2)λ2=1xyz=0
    解得兩個候選點為:
    M1(1+32,1+32,2+3)M2(312,312,23)
    求得
    OM1=9+53OM2=953
    因此 f(x,y,z) 的最大值為 9+53 ,最小值為 953

1.2 拉格朗日乘子法的一般性描述

x⃗ =(x1,x2,,xm) 滿足約束條件:
hi(x⃗ )=Hii=1,2,,n
f(x⃗ ) 的極值問題。
此時,令:
F(x⃗ ,λ1,λ2,,λn)=f(x⃗ )+λ1(H1h1(x⃗ ))λ2(H2h2(x⃗ ))λn(Hnhn(x⃗ ))
然后 F(x⃗ ,λ1,λ2,,λn) 分別對 x1,x2,,xn,λ1,λ2,,λn 求偏導,得:
F(x⃗ ,λ⃗ )xi=0i=1,2,mF(x⃗ ,λ⃗ )λj=0j=1,2,n
最后求出 x⃗  的候選值,代入 f(x⃗ ) 取其最小值即可。

2. 具有不等式約束條件(Karush–Kuhn–Tucker conditions KKT)下的極值問題

x⃗  滿足不等式約束條件時,求 f(x⃗ ) 的極值,即當 x 滿足 gk(x⃗ )0 f(x) 的極值, k=1,2,,n
下面先定義一個函數 L(x,μ) 來將 f(x) gk(x) 結合到一起:
L(x,μ)=f(x)+k=1nμkgk(x)
注意 x,μ 都是向量,其滿足如下兩個約束條件:
{uk0gk(x)0=>μkgk(x)0k=1,2,,n
因此
maxuL(x,μ)=f(x)
則:
minxf(x)=minxmaxμL(x,μ)
接下來,先求 maxμminxL(x,μ) 的值。
maxμminxL(x,μ)=maxμ[minxf(x)+minxk=1nμkgk(x)]=maxμminxf(x)+maxμminxk=1nμkgk(x)=minxf(x)+maxμminxk=1nμkgk(x)
又由於:
{uk0gk(x)0=>minxukgk(x)={0uk=0orgk(x)=0uk>0andgk(x)<0
因此:
maxμminxk=1nukgk(x)=0
當且僅當 μ=0 或者 g(x)=0 ,故:
maxμminxL(x,μ)=minxf(x)+maxμminxk=1nμkgk(x)=minxf(x)
由上面的式子可得:
minxf(x)=minxmaxμL(x,μ)=maxμminxL(x,μ)
因此我們把 maxμminxL(x,μ) 稱為原問題 minxmaxμL(x,μ) 對偶問題(dual problem)
更一般的,求 minf(x) ,我們同時加上等式約束和不等式約束:
hi(x)=0gj(x)0
令:
L(x,α,β)=f(x)+αhi(x)+βgj(x)
我們對 g(x) 加上一個松弛變量 t ,即令 gj(x)=gj(x)+t2 ,且滿足:
gj(x)=gj(x)+t2=0
則:
L(x,α,β,t)=f(x)+αhi(x)+β(gj(x)+t2)
接下來使用拉格朗日乘子法解決之:
L(x,α,β,t)xL(x,α,β,t)αL(x,α,β,t)βL(x,α,β,t)t=f(x)x+αhi(x)x+βgi(x)x=0=hi(x)=0=gi(x)+t2=0=2tβ=0
代入求得:
maxμminxL(x,α,β)=minxf(x)=f(x)
x 滿足條件:
hi(x)=0βgj(x)=0
又由於 gj(x)0 ,則必須要滿足 β=0 或者 gj(x)=0

3. 為何拉格朗日乘子法和 KKT 條件能夠得到最優值

設目標函數 z=f(x) x 是向量,先將 f(x) 投影到 x 所在的平面上,因此可以得到一系列等高線:
這里寫圖片描述
其中虛線是等高線,現假設紅線是約束 g(x)=M ,其中紅線與等高線的交點就是滿足約束條件的所有 x ,但交點肯定不是最優值,因為相交意味着肯定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函數的交點的值更大或者更小,只有到等高線與目標函數的曲線相切的時候,可能取得最優值,即等高線和目標函數的曲線在該點的法向量必須有相同方向,所以最優值必須滿足: f(x)x=αgi(x)x α 是常數,表示左右兩邊同向。這個等式就是 L(x,α) 對參數求導的結果。
至於 KKT 由於可以使用朗格朗日法求解,方法同上。

4. 求解 supportvector 和超平面 hyperplane

在樣本空間中,超平面上的點都滿足以下條件:
wTx+b=0
其中 w 是一個向量,表示超平面的方向, b 是一個標量,決定超平面和坐標原點之間的距離,因此超平面可以被 w b 唯一確定。空間中 x 到超平面的距離為:
d=|wTx+b||w|
詳情請見高中數學課本~^_^~。
假設超平面可對樣本正確分類,則對於正類 y(i)=1 的情況,有 wTx+bγ1 ,對於負類 y(i)=1 的情況,有 wTx+bγ2 。由於超平面到兩邊樣本的正中間,所以 γ1=γ2=γ 。故:
{wTx+b+γy(i)=+1wTx+bγy(i)=1i=1,2,,n
距離超平面最近的幾個訓練樣本使得上面的式子取等號,這些樣本被稱為支持向量(support vector)。兩類樣本到超平面的距離之和為:
d=2γ|w|
要求最大間隔 d ,就是要求最小的|w|,為了計算方便,將問題歸結為求解:
minw,b12|w|2s.t.y(i)(wTx+b)1
此處將常數項 γ 進行了縮放,不會影響組后的結果。

f(w)=12w2
滿足約束條件
1y(i)(wTx+b)0
注意,此處自變量是 w 而非 x ,且 w 是向量。
利用上面的 KKT 和拉格朗日乘子,令:
L(w,b,α)=f(w)+i=1mαi(1y(i)(wTx+b))=12w2+i=1mαi(1y(i)(wTx+b))
分別對 w,b,α 求偏導數,得:
L(w,b,α)wL(w,b,α)bL(w,b,α)α=wi=1mαiyixi=0=i=1n(αiyi)=0=i=1n(1y(i)(wTx+b))=0
最后解得:
L(w,b,α)=12i=1mj=1my(i)y(j)αiαjx(i)Tx(j)i=1mj=1my(i)y(j)αiαjx(i)Tx(j)+i=1mαiy(i)b+i=1nαi=i=1nαi12i=1nj=1ny(i)y(j)αiαjx(i)Tx(j)
根據上面的定理,有:
minxf(x)=minxmaxμL(x,μ)=maxμminxL(x,μ)
因此現在要求的是 maxμminxL(x,μ) ,即求 L(w,b,α) 的最大值, w,b,α 滿足下面的約束條件(詳情見2中說明):
αi0αi(1y(i)(wTx(i)+b))=01y(i)(wTx(i)+b)0i=1,2,,n
最后還可以求得:
b=maxy(i)=1wTx(i)+miny(i)=1wTx(i)2
最后解得的超平面為:
f(x)=b+i=1mαiyix(i)Tx(i)
對於訓練樣本 (x(i),y(i)) ,總有 αi=0 或者 1yi(wTx+b)=0 (注意,此處有多少訓練樣本,就有多少個 α 參數)。若 αi=0 ,則第 i 個樣本不是支持向量,也不會在上面的求和公式中出現。若 αi>0 ,此時 (x(i),y(i)) 是一個支持向量,必有 y(i)(wTx(i)+b)=1 。這表示,最終的模型僅與支持向量有關。
至此完成的超平面的全部計算。

5. 核函數(kernels)

由於SVM的核心工作是找到一個超平面來正確地將正負樣本分開,這就要求原來的數據本來就應該是線性可分的(可有少量誤分類)。但是對於某些線性不可分問題,就不能直接這樣求解,因此就需要用到核函數(kernel function)。核函數的功能是:將數據從原來的維度映射到一個更高的維度,在這個維度里面,數據是線性可分的。如果不考慮過擬合問題,對於任何數據,總能找到一個高維的空間,使得映射后的數據完全線性可分(准確率達到100%)。
根據上面的推導,SVM的目標函數為:
L(w,b,α)=i=1nαi12i=1nj=1ny(i)y(j)αiαjx(i)Tx(j)
由於 (x(i),y(i)) 都是已知值,因此上式是一個關於 αi 的函數,記為:
W(α⃗ )=i=1nαi12i=1nj=1ny(i)y(j)αiαjx(i)Tx(j)
為了方便,記 x(i)Tx(j) 為: x(i),x(j) ,表示向量內積。
假設我們需要將向量 a⃗  映射為 a⃗  ,其中 a⃗ Rm,b⃗ Rn,n>m ,令這個映射為:
Φ(x):{x|xRm}>{x|xRn}
那么加入這種映射以后,目標函數為:
W(α⃗ )=i=1nαi12i=1nj=1ny(i)y(j)αiαjΦ(x(i)),Φ(x(j))
在高維空間中,要想計算 Φ(x(i)),Φ(x(j)) ,我們就需要核函數:Kernel。
定義:
Kernel(x,z)=Φ(x),Φ(z)
核函數是一個非常抽象的東西,一般情況下,我們只需要將 W(α⃗ ) 計算出來即可,並不需要深入到那個映射以后的高維空間中去看看映射后的數據是什么樣子,某些情況下這甚至是不可能的。打個比方,你要計算 a1+b1+c1+d1+...(a1+b1+c1+d1+...) ,你不需要深入到把前后兩個加法全算出來,相反,只需要計算其中部分即可(事實上結果為0)。雖然不太貼切,但是思想差不多,就是通過 x,z 直接計算出 Φ(x),Φ(z) ,但你卻並不需要知道 Φ(x) Φ(z) 到底是什么。事實上,如果最后的計算涉及到求 x(i),x(j) ,都可以使用核函數。
下面來計算一個式子:
K(x,z)=(xT,z)2=(i=1nxizi)(j=1nxjzj)=i=1nj=1n(xixj)(zizj)
因此令
Φ(x)=x1x1x1x2x1x3x2x1x2x2x2x3x3x1x3x2x3x3
假設 K(x,z)=(xTz+c)2 ,則:
K(x,z)=i=1nj=1n(xixj)(zizj)+i=1n(2cxi)(2czi)+c2=Φ(x),Φ(z)
則:
Φ(x)=x1x1x1x2x1x3x2x1x2x2x2x3x3x1x3x2x3x32cx12cx22cx3cΦ(z)=z1z1z1z2z1z3z2z1z2z2z2z3z3x1z3z2z3z32cz12cz22cz3c
假設
K(x,z)=e||x⃗ z⃗ ||2
泰勒展開,得:
K(x,z)=ex2ez2k=12k(x)k(z)kk!
這樣得到的 Φ(x) 是一個無窮維度:
Φ(x)=2ex2x2ex2x22kk!ex2xk
此時 Φ(x) 是一個無窮維的向量(當然這里 x,k 假設只是一個一維的,更高維度的情況復雜,此處不列舉)。對於一般的 K(x,z)=(xTz+c)d ,此處 x 的維度將會由 n 變成 ni=1id 維度,將會呈現爆炸性增長。

判斷一個 Kernel 是一個合法的 Kernel :
假設數據點為 {x(1),,x(m)} 設計矩陣:
M=k(x(1),x(2)),k(x(1),x(3)),,k(x(1),x(m))k(x(2),x(1)),k(x(2),x(2)),,k(x(2),x(m))k(x(i),x(j))k(x(m),x(1)),k(x(m),x(2)),,k(x(m),x(m))

則:
zTMz=i=1mj=1mzikijzj=i=1mj=1mziΦ(x(i)T)Φ(x(j)T)zj=t=1n(i=1mΦ(x(i))zi)20
因此 ValidKernel 的充要條件是:矩陣M(由m個點中的任意個點組成的矩陣)是一個半正定矩陣,即 k(x,x)0
常用的核函數有:

  • Linear Kernel(線性核)
    k(x,z)=xTy+c
  • Polynomial Kernel(多項式核)
    k(x,z)=(axTy+c)d
  • RBF(Radial Basis Function 徑向基核函數)
    k(x,z)=eγ||xz||2
  • Gaussian Kernel(高斯核)