機器學習--SVM支持向量機

SVM思想

SVM用於解決二分類的問題(也可以擴展到解決多分類問題和迴歸問題),它的思想是在特徵的向量空間中找到一個分界超平面,使得離超平面最近的點儘可能的大,這些距離超平面最近的點也稱爲支持向量。

SVM算法過程

點到平面的距離 .

distance(x;w,b)=|wTx+b|||w||

證明:
在平面上找一個點x ,則需要做的是把xx 投影到垂直於該平面的法向量上,也就是wT
distance(x;w,b)=|wT||w||(xx)|

展開:
distance(x;w,b)=1||w|||(wTx+b)|

去除絕對值

d(x)=1||w|||(wTx+b)| 公式中的絕對值不方便運算,加入yi :

d(x)>0yi=+1
d(x)<0yi=1
.
原來的距離公式變爲:
distance(x;w,b)=yi(wTx+b)||w||

對偶問題

根據SVM的思想,目標函數是:

argmaxw,b{1||w||mini{yi(wTxi+b)}}

mini{yi[wTxi+b]} 即是找到支持向量的點,找出離分界平面最近的點,然後使這個距離最大化,這是一個對偶問題,應該先找出分界平面再找支持向量,但是可以轉化爲先最小化這些距離,再最大化與分界平面的距離。

放縮

mini{yi(wTxi+b)} 要找到最小的點,通過放縮使得yi(wTxi+b)>1 那麼1就是這個最小的點。同時由於進行了放縮要加入一個約束條件。同時求最大值那部分,求1||w|| 的最大值,可以轉化爲求12w2 的最小值,1/2是爲了方便求導。所以目標函數變爲:

minw,b12w2

st:yi(wTxi+b)>=1

拉格朗日乘子法

L(w,b,α)=12w2i=1mαi(yi(wTxi+b)1)

w,b 求偏導數可以得到:
w=i=1mαiyixi
0=i=1mαiyi

帶不等式的約束條件的函數,用拉格朗日乘子法的時候需要滿足KTT條件,也就是所有的αi>=0
將上面兩式帶入原方程可以得到問題轉化爲:
maxαi=1mαi12i=1mj=1mαiαjyiyjxiTxj

此時可以求偏導數解出αi 的值,回代求出w,b 就可以求出分界平面。

SVM優化操作

SMO優化

如果樣本數很多,則需要計算的αi 的數量很多,爲了降低運算的複雜度,提出了很多的優化方法,其中比較經典的SMO,SMO的方法是固定其他的變量,單獨更新兩個變量,迭代進行這個過程知道收斂:

  • 選取需要更新的一對αiαj
  • 固定這兩個參數以外的參數,求解獲得更新後的αiαj

對於αi 的選擇是選擇與KKT條件違背最大的變量,而對於αj 應該選擇令目標函數增長最多的變量,但是這樣遍歷複雜度太高,SMO採用了一個啓發式的操作:使選取的兩個向量之間間隔最大。

核函數

有一些樣本,在特徵空間裏面不能找到一個線性的分界超平面,例如異或問題在二維空間上找不到線性的分界線,這時候可以將特徵空間映射到更高維度的空間上,在高維的空間中找線性分界超平面,但是可以注意到maxαi=1mαi12i=1mj=1mαiαjyiyjxiTxj ,中xiTxj 是一項求內積的操作,如果映射到高維空間,因爲高維空間的維度可以是正無窮,這樣會使得運算複雜度可能變得非常的大。這時可以做一個核函數的變換,做完映射再求內積和做完內積再映射是一樣的,所以可以先做內積,再放入核函數裏面進行映射,也就是xiTxj 變爲:k(xi,xj) , 原方程變爲:

maxαi=1mαi12i=1mj=1mαiαjyiyjk(xiT,xj)

k(,) 就是核函數,常用的核函數有:
  • 線性核函數
  • 多項式核函數
  • 高斯核函數
  • 拉普拉斯核函數
  • simoid核函數

核函數隱式的定義了特徵空間,所以核函數的選擇成爲了支持向量機最大的變數,核函數也可以通過函數組合而成:ak1+bk2k1k2

軟間隔

樣本可能會有一些離羣點,爲了這些很少的離羣點修改分界平面,會使訓練的模型過擬合,失去泛化能力,這時候引入“軟間隔”的概念,允許部分樣本不滿足放縮約束:

st:yi(wTxi+b)>=1

這時候優化目標變爲:
minw,b12w2+Ci=1ml0/1(yi(wTxi+b)1)

其中l0/1 是0/1損失函數:
l0/1(z)=1,if z<0
l0/1(z)=0, otherwise

C是在用SKlearn時候需要調的一個超參數

C越大,約束條件越強,趨於無窮大時,相當於考慮所有的點,C越小,約束條件越寬鬆。
用上述的拉格朗日乘子法解可以得到:
原來的條件:

αi>=0

變爲:
0<=αi<=C

0/1損失函數數學性質不好,非凸,不連續,一般會對這個損失函數進行變換,經典的有三個:
  • hinge損失:lhinge(z)=max(0,1z)
  • 指數損失: lexp(z)=exp(z)
  • 對率損失:llog(z)=log(1+exp(z))

SVM擴展

SVR 支持向量迴歸

SVM也可以解決迴歸的問題,形式化爲:

minw,b12w2+Ci=1mlϵ(f(xi)y)

引入鬆弛變量ξi1ξi2 ,引入兩個是左右兩邊的鬆弛程度可以不同,最後變爲:
minw,b12w2+Ci=1m(ξi1+ξi2)

後面解法同之前的拉格朗日解法。

SVM解決多分類問題

擴展爲多分類有三種方法:一對多法(one-versus-rest,簡稱OVR SVMs),一對一法(one-versus-one,簡稱OVO SVMs或者pairwise)和 層次支持向量機。

OVR

訓練時依次把某個類別的樣本歸爲一類,其他剩餘的樣本歸爲另一類,這樣k個類別的樣本就構造出了k個SVM。分類時將未知樣本分類爲具有最大分類函數值的那類。
缺陷在於:訓練集的正負樣本是1:m,存在這嚴重的不平衡問題。

OVO

其做法是在任意兩類樣本之間設計一個SVM,因此k個類別的樣本就需要設計k(k-1)/2個SVM。當對一個未知樣本進行分類時,最後得票最多的類別即爲該未知樣本的類別。

層次支持向量機

層次分類法首先將所有類別分成兩個子類,再將子類進一步劃分成兩個次級子類,如此循環,直到得到一個單獨的類別爲止。

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