機器學習——支援向量機(SVM)

SongpingWang發表於2018-05-28

一、SVM 概念

  1. 將樣本的兩種特徵用 一條直線或者超平面分開,並且間隔最大。
  2. 非線性問題,因為其複雜性,需要使用複雜模型,引數多,容易過擬合,而 SVM既能解決複雜問題,又不容易過擬合(但不能保證不會過擬合)
    這裡寫圖片描述

二、支援向量機演算法基本原理

2.1 線性 SVM
線性(SVM):找到最好的決策邊界
最大化 Margin: 決策邊界最近的距離
最小的Margin之和最大化              

這裡寫圖片描述

2.1 非線性(SVM)超平面
低維對映到高維再處理,找到最優的(核方法)
    一條直線方程,其中m是斜率,c是直線在y軸的截距:y= mx +c 
    二維空間裡面,一條直線的方程可以表示為:Ax+By+C=0
    三維空間裡面,平面的方程可以表示為:Ax+By+Cz+D=0
    那麼超平面方程:

wTx=0wT·x+b=0
w^T x = 0 也可以寫作(w^T·x+b=0)
其中 w 和 x 是向量,w^T是兩個向量的點積。向量w通常被稱為權重。
w , x皆為向量, wx+b=0就是a1*x1+a2*x2+...an*xn+b=0  
2.2 超平面公式推導
超平面之間的距離

這裡寫圖片描述

樣本點到超平面之間的距離

這裡寫圖片描述

樣本的正確分類 - 拉格朗日方法(對偶演算法):
  • 約束最優化問題
    對於線(w,b)可以通過縮放使得其結果值|y|>=1    
    ~~~
    yi(wTΦ(xi)+b)1
    y_i(w^ T\Phi (x_i)+b)\geqslant 1

    argmaxw,b{1wmini[yi(wTΦ(xi)+b)]}
    arg max_{w,b} \left \{ \frac{1}{{\left \| w \right \|}}min_i[y_i(w^ T\Phi (x_i)+b)] \right \}

    即(目標函式):argmaxw,b1w
    arg max_{w,b}\frac{1}{{\left \| w \right \|}}
    yi(wTΦ(xi)+b)1
    y_i(w^ T\Phi (x_i)+b)\geqslant 1

      argminw,b12w2

~~~~~~轉換成求最小值:arg min_{w,b}\frac{1}{2}w^2
yi(wTΦ(xi)+b)1
y_i(w^ T\Phi (x_i)+b)\geqslant 1

  • 拉格朗日乘子法標準格式:
    minf(x)
    min f(x)

    s.tgi(x)0,i=1,2...m
    s.t g_i(x) \leqslant 0 ,i = 1,2...m
  • 樣本正確分類(拉格朗日方法):
    1. f(x)=wTx+b
      f(x) = w^Tx + b
    2. 構造拉格朗日方程:
      s.t.yi(wTx+b)1,   i=1,2,3...m
      s.t.y_i( w^Tx + b) \geq 1,~~~i = 1,2,3...m

      gi(x)=1yi(wTxi+b)0,   i=1,2,3...m
      g_i(x) =1- y_i( w^Tx_i + b) \leq 0,~~~i = 1,2,3...m

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

~~~~~~~~~~~~~~~~~~~~~L(w,b,\alpha) = \frac{1}{2} || w||^2+\sum_{i=1}^{m}\alpha_i(1- y_i( w^Tx_i + b))

2.3 拉格朗日乘子法-超平面推論

對偶演算法-1
對偶演算法-2
對偶演算法-3
對偶演算法-4
對偶演算法-5

2.4 示例:拉格朗日乘子法求超平面

例題:已知如圖訓練集:
正例點x1=(3,3)T,x2=(4,3)T,x3=(1,1)T

x_1=(3,3)^T,x_2=(4,3)^T,負例點 x_3=(1,1)^T

試求最大間隔分離超平面。
這裡寫圖片描述
對偶演算法-6
對偶演算法-7

2.5 鬆弛因子

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

在 SVM 中設定一個引數「C」;從而你可以在兩種結果中權衡:
    1. 擁有很寬的間隔;
    2. 精確分離訓練資料;
C 的值越大,意味著在訓練資料中允許的誤差越少。
必需強調一下這是一個權衡的過程。如果想要更好地分類訓練資料,那麼代價就是間隔會更寬。 
以下幾個圖展示了在不同的 C 值中分類器和間隔的變化(未顯示支援向量)。

這裡寫圖片描述

三、核函式

核函式特點
如果資料集中有 n 個點,SVM 只需要將所有點兩兩配對的點積以尋找分類器。僅此而已。
當我們需要將資料對映到高維空間的時候也是這樣,不需要向 SVM 提供準確的對映
而是提供對映空間中所有點兩兩配對的點積
3.1 核函式定義
假設X是輸入空間,H是特徵空間,存在一個對映ϕ使得X中的點x能夠計算得到H空間中的點h ,對於所有的X中的點都成立:

h=ϕ(x)
h=\phi(x)
若x,z是X空間中的點,函式k(x,z)滿足下述條件,那麼都成立,則稱k為核函式,而ϕ為對映函式:

k(x,z)=ϕ(x)ϕ(z)
k(x,z)=\phi (x)\cdot \phi (z)
3.2 常用核函式
線性核
線性核,主要用於線性可分的情況,我們可以看到特徵空間到輸入空間的維度是
一樣的,其引數少速度快,對於線性可分資料,其分類效果很理想。
K(xi,xj)=xiT,xj
K(x_i,x_j) = x_i^T,x_j
多項式核
將低維的輸入空間對映到高緯的特徵空間,但是多項式核函式的引數多,當多項式的階數比較高的時候,核矩陣的元素值將趨於無窮大,計算複雜度會大到無法計算。(d≥1為多項式的次數)
K(xi,xj)=(xiT,xj)d
K(x_i,x_j) = (x_i^T,x_j)^d
高斯(RBF)核函式
高斯徑向基函式是一種區域性性強的核函式,可以將一個樣本對映到一個更高維的空間內,該核函式是應用最廣的一個,無論大樣本還是小樣本都有比較好的效能,(相對於多項式核函式引數要少)。
因此大多數情況下在不知道用什麼核函式的時候,優先使用高斯核函式多項式核。
(σ
(\sigma
>0 為高斯核的寬頻)
K(xi,xj)=exp(||xiT,xj||22σ2)
K(x_i,x_j) = exp(- \frac{||x_i^T,x_j||^2}{2\sigma^2})

這裡寫圖片描述
sigmoid核函式
採用sigmoid核函式,支援向量機實現的就是一種多層神經網路。
(tanh為雙曲正切函式,β>0,θ<0)
K(xi,xj)=tanh(βxiTxj+θ)
K(x_i,x_j) = tanh(βx_i^Tx_j+θ)
核函式選擇依據

如果特徵的數量大到和樣本數量差不多,則選用LR或者線性核的SVM;
如果特徵的數量小,樣本的數量正常,則選用SVM+高斯核函式;
如果特徵的數量小,而樣本的數量很大,則需要手工新增一些特徵從而變成第一種情況。

這裡寫圖片描述
這裡寫圖片描述

3.3 核矩陣

這裡寫圖片描述
對於一個二位空間 對映到 三維空間:P(x,y)=(x2,2xy,y2)

P(x,y)=(x^2,\sqrt{2}xy,y^2)

這裡寫圖片描述
考慮到核函式:K(v1,v2)=<v1,v2>2
K(v1,v2)=<v1,v2>^2,
即“內積平方”
設二維空間存在:v1=(x1,y1),v2=(x2,y2)
v1=(x_1,y_1) , v2=(x_2,y_2)
兩點:
可證
這裡寫圖片描述

三、支援向量機程式碼演示

from sklearn.svm.import SVC
svc = SVC(
            C = 1.0,
            lernel = '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越大,越容易過擬合
kernel  --核引數,'linear','poly','rbf','sigmoid'
gamma   --當kernel為'poly','rbf','sigmoid'時,預設1/n_feature

四、支援向量機引數優化

parameters = {
               'C':[0.001,0.01,0.1,1,10,1000],
               'kernel':['linear','poly','rbf','sigmoid']
               'gamma':[0.0001,0.001]
             }
svm= SVC()
grid_search = GridSearchCV(svm,parameters,scoring = 'accuracy',cv = 5)
grid_search.fit(x,y)

五、支援向量機總結

支援向量機是一個‘超平面分類演算法’
最佳超平面-->支援向量Margin(間隔)最大的超平面
支援向量就是離超平面最近的資料點
資料低維--kernel() -->高維,使其線性分開
SVM 主要引數調優:C,gamma,kernel
SVM只支援數值型變數,分型別變數-->onehot編碼
SVM對缺失值敏感,需提取處理

這裡寫圖片描述
SVM沒有處理缺失值的策略(決策樹有)。而SVM希望樣本在特徵空間中線性可分,所以特徵空間的好壞對SVM的效能很重要。缺失特徵資料將影響訓練結果的好壞。

相關文章