1. 程式人生 > >SVM演算法原理以及sklearn例項

SVM演算法原理以及sklearn例項

今天重新學習了一遍SVM的內容,發現好多以前看不懂的推導公式都能理解了,趕緊記錄下來。作者屬於菜鳥級別,文中如有錯誤認識還請大家不吝賜教!
SVM(support vector machine,支援向量機),是一種可應用與線性或非線性的一種分類器。以下我們按照SVM的發展順序以及問題求解依次介紹。
1. 線性支援向量機(LSVM)

我們先假設樣本集線性可分,也就是最簡單的情況。由於是線性分類器,所以分割平面方程為`w*x+b=0`,和感知器類似。SVM的輸出為$+-1$,當點位於超平面上方時輸出為+1,下方輸出-1.

這裡寫圖片描述

我們將離超平面最近的點叫做支援向量,支援向量到超平面的距離叫做間距(margin)。SVM分類的特點就是間距最大化,由於能將樣本分類的超平面可能有多個,他們對樣本的適用性都很好,但是能使間距最大化的超平面會使分類更加公平,從而使測試誤差降到最低。

支援向量到超平面距離為這裡寫圖片描述其中x表示支援向量。由於超平面不確定時支援向量也不確定,為了便於分析,我們規定支援向量滿足w*x+b=1w*x+b=-1(實際上通過變化w和b總能實現),這樣優化問題變成這裡寫圖片描述 後面的約束條件是指保證支援向量在w*x+b=+-1上,其他點都都遠離支援向量。
由拉格朗日運算元αj 乘以約束條件,得到
這裡寫圖片描述,對w,b分別求偏導數並令其為0,然後將解出的式子重新代入上式得到
這裡寫圖片描述
這樣就通過拉普拉斯運算元轉化為了對偶問題(dural problem),於是轉化為求LD的最值,對α求導得到W,b表達形式
這裡寫圖片描述


求出w後將其代入任一個支援向量,就可以算出b。
以上是硬分類模型,是指樣本完全是線性可分的。當然有硬分類就有軟分類,是說當有若干點A類的點跑到B類裡去了,你中有我我中有你的情況,造成了不完全線性可分(注意不是非線性),
這裡寫圖片描述
這時候就要加一些鬆弛變數,優化公式變成了下面這樣
這裡寫圖片描述,如右下方藍色的點它本來不滿足|w*x+b|>1的條件,但是加上鬆弛變數之後,就可以滿足了。
下面仍轉化為對偶問題求解
這裡寫圖片描述
求解後發現LD的表達形式和加鬆弛變數前沒有變化只是α得上限變成了C,也就是鬆弛項的係數。

2.非線性問題

SVM同時能處理非線性問題,比如

這裡寫圖片描述
SVM將原來的資料集對映到一個新的空間中去,將一個非線性問題轉化為線性問題,於是非線性又變成了熟悉的線性,但往往新的特徵空間的維度都要比對映前空間要高。這就出現了兩個問題,如何對映才會是非線性問題線性化,以及維度升高使運算更加困難問題。下面我們一一進行解釋,事實上對映方式是特定的幾個,由核函式來確定。第二在高維向量運算中由於SVM的基本運算是向量內積,而通過數學推導,高維空間的向量內積完全可以等價成變換前空間中向量內積的運算形式,如
這裡寫圖片描述

,我們把低維空間向量的運算用核(kernal)函式表示,這樣對映到高維空間的運算完全用低維下的核函式來代替就好了。
這裡寫圖片描述
常用的核函式有
這裡寫圖片描述
多項式核對應的SVM是一個d次多項式分類器,高斯核會把資料對映到無窮維,雖然難以想象但我們完全不用管這些,通過核函式便等價在原空間的維度計算了。在不知道使用何種核函式進行對映的時候,我們一般選擇徑向基(高斯)核函式,準確率比較高,其實當前對核函式選擇並沒有比較好的方法,以實驗為主。

以下是對sklearn庫中svm的介紹:

class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None, random_state=None)
引數:

C:
C-SVC的懲罰引數C,也就是優化函式中鬆弛變數的係數,預設值是1.0。 C越大,相當於懲罰鬆弛力度越強,(由於懲罰項是加在後面的而且求的是函式最小值),對訓練集分類要求更嚴格,這樣對訓練集測試時準確率很高,但泛化能力弱。C值小,對誤分類的懲罰減小,允許容錯,將他們當成噪聲點,泛化能力較強。
kernel: 
核函式,預設是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ 

0 – 線性:u'v
1 – 多項式:(gamma*u'*v + coef0)^degree
2 – RBF函式:exp(-gamma|u-v|^2)
3 –sigmoid:tanh(gamma*u'*v + coef0)

degree :多項式poly函式的維度,預設是3,選擇其他核函式時會被忽略。

gamma:
‘rbf’,‘poly’ 和‘sigmoid’的核函式引數。預設是’auto’,則會選擇1/n_features
coef0 :
核函式的常數項。對於‘poly’和 ‘sigmoid’有用。