【Python機器學習】之 SVM 支持向量機算法(一)

SVM 支持向量機(一)

1、感知機

1.1、感知機模型

  假設現在要判斷是否給某個客戶辦理信用卡,已有的是用戶的性別、年齡、學歷、工作年限、負債情況等信息,用戶個人金融信息統計如下表所示:

用戶 \ 特徵 性別 年齡 學歷 工作年限 負債情況(元)
用戶1 23 本科 1 5000
用戶2 25 高中 6 6000
用戶3 27 碩士 1 1200
用戶4 26 碩士 1 1000

  可以將每個用戶看成一個向量 xi ,i=12,...x_i \ , i=12,...,向量的維度由用戶的性別、年齡、學歷、工作年限、負債情況等信息組成,即 xi=(xi(1)  xi(2) ,... ,xi(n)x_i=( x^{(1)}_i\,\, x^{(2)}_i \ ,...\ , x^{(n}_i ),那麼一種簡單的判別方法就是對用戶各個維度求一個加權和,並且爲每一個維度賦予一個權重wj ,j=1,2,...,nw_j \ , j=1,2,...,n,當這個加權和超過某一個門限值,就判定可以給該用戶辦理信用卡,低於門限值則拒絕,如:

  • 如果j=1nwjxi(j) threshold\sum\limits^n_{j=1}w_jx_i^{(j)} \ ≥ threshold,則可以給用xix_i辦理信用卡
  • 如果j=1nwjxi(j) threshold\sum\limits^n_{j=1}w_jx_i^{(j)} \ \le threshold,則拒絕給用xix_i辦理信用卡

  可以將是否給辦理的結果用 “+1” 和 “-1” 來表示,這樣,上面的判決式可以進行一定變形,即不等式左右分別減去閾值“thresholdthreshold”,從而可以得到一個符號函數,即:
h(xi)=sign[(j=1nwjxi(j)) threshold ] h(x_i)=sign[(\sum\limits^n_{j=1}w_jx_i^{(j)}) -\ threshold \ ]
  這樣,公式(1)中的 h(x)h(x) 就被稱爲感知機函數,可以再進一步變形得到兩個向量內積的形式,即:
h(xi)=sign[(j=1nwjxi(j)) threshold ]=sign[(j=1nwjxi(j))+ b ]=sign(wx+b) \begin{aligned} h(x_i) &= sign[(\sum\limits^n_{j=1}w_jx_i^{(j)}) -\ threshold \ ] \\ &= sign[(\sum\limits^n_{j=1}w_jx_i^{(j)}) +\ \mathbf{b} \ ] \\ &= sign(\mathbf{w\cdot x + b}) \end{aligned}
  其中,w=(w1,w2,...,wn)\mathbf{w}=(w_1, w_2 ,..., w_n)是各個特徵權重組成的向量;x=(x1,x2,...,xn)\mathbf {x = (x_1, x_2 ,..., x_n)}是數據的特徵向量;b=threshold\mathbf b = - thresholds 是閾值(取負,也叫偏置常數)。

  所以,由以上可得感知機模型的函數如下:
h(x)= sign(wx+b)={+1,wx+b>01,wx+b<0 \begin{aligned} h(x) &= \ sign(\mathbf{w\cdot x + b}) \\ \\ &= \begin{cases} +1 ,\quad \mathbf{w\cdot x + b}>0 \\ -1 , \quad \mathbf{w\cdot x + b}<0 \\ \end{cases} \end{aligned}
  當 x\mathbf x 的維度爲2時,可以得到二維平面的一些點,而感知機的分界線對應的是一條直線,即感知機的分界函數爲:b+w1x1+w2x2=0\mathbf b +w_1x^{1}+w_2x^{2}=0此時 x(1)  x(2)x^{(1)} \ 和\ x^{(2)}分別對應 x 軸和 y 軸,常數項 b 對應的是截距,如下圖:

  感知機對應於輸入空間將實例劃分爲正負兩類的分割超平面wx+b=0\mathbf{w\cdot x + b} = 0,屬於判別模型。

1.2、感知機學習方法

  感知機模型學習的目的是爲了確定參數 w,b\mathbf {w,b},所以假設訓練集爲T={(x1,y1),(x2,y2),...,(x2,y2)}T=\{ (\mathbf x_1,y_1) ,(\mathbf x_2,y_2) ,..., (\mathbf x_2,y_2) \}

  感知機和支持向量機的重要前提均是 訓練數據集線性可分,則感知機學習的目標就是求得一個能夠將訓練數據集中正負樣本完全區分的超平面。

  對二維來說,即希望能到的超平面(分割直線)離紅色最近的點與藍色最近的點的距離儘可能的遠,這樣能夠很明顯的將兩類進行區分。感知器求解採用的是損失函數最小的方法,即定義一個損失函數,通過將損失函數最小化來求解 w,b\mathbf {w,b}

​ 感知機模型選擇的損失函數是 誤分類點 到分類超平面 SS 的總距離。樣本點中任意一點 xix_i 到分類超平面 SS 的距離爲:
d=wxi+bw2 d = \frac{| \mathbf {w\cdot x_i + b} |}{ ||\mathbf w||_2}
​ 其中,w2||\mathbf w||_2 爲向量 w\mathbf w 的模,也叫 L2 範數。

​ 應用感知機模型函數,對於樣本點 xix_i 有:
h(xi)= sign(wxi+b)={+1,wxi+b>01,wxi+b<0 \begin{aligned} h(x_i) &= \ sign(\mathbf{w\cdot x_i + b}) \\ \\ &= \begin{cases} +1 ,\quad \mathbf{w\cdot x_i + b}>0 \\ -1 , \quad \mathbf{w\cdot x_i + b}<0 \\ \end{cases} \end{aligned}
​ 對於上面公式,可得:

  • 對於分類正確的樣本點,有 yi(wx+b)1>0y_i ( \mathbf{w\cdot x + b} ) ≥1 > 0 恆成立,即:

    • yi=+1y_i = +1時,有wx+b>0\mathbf{w\cdot x + b} >0 ;
    • yi=1y_i = -1時,有wx+b<0\mathbf{w\cdot x + b}<0
  • 對於分類錯誤的樣本點,有 yi(wx+b)1<0y_i ( \mathbf{w\cdot x + b} ) ≤ -1 < 0 恆成立,即:

    • yi=+1y_i = +1時,有wx+b<0\mathbf{w\cdot x + b}<0 ;
    • yi=1y_i = -1時,有wx+b>0\mathbf{w\cdot x + b}>0

    所以,對於誤分類點 (xi,yi)(x_i, y_i) 到超平面 SS 的距離可等價爲如下表達式:
    d =wxi+bw2=yiwxi+bw2=yi(wxi+b)w2 \begin{aligned} d^{\ '} &= \frac{| \mathbf {w\cdot x_i + b} |}{ ||\mathbf w||_2} \\ \\ &= \frac{|y_i| \cdot| \mathbf {w\cdot x_i + b} |}{ ||\mathbf w||_2} \\ \\ &= \frac{- y_i \cdot( \mathbf {w\cdot x_i + b} )}{ ||\mathbf w||_2} \end{aligned}

     最終,將所有錯誤分類點歸爲一個集合M,則它們到超平面的距離的總和定義爲損失函數
    L(w,b)=1w2xiMyi(wx+b) L({\mathbf {w,b}}) = -\frac{1}{||\mathbf w||_2 \cdot } \cdot \sum\limits_{x_i \in M} y_i\cdot ( \mathbf {w\cdot x + b} )

     所以,當所有錯誤分類點到超平面的距離最小的時候,損失函數是最小的,這是得到的模型是最優的,而又因爲所有樣本點到超平面的距離公式中分母w2||\mathbf w||_2是相同的,所以公式(7)的損失函數最終可變形爲:
    L(w,b)=xiMyi(wx+b) L({\mathbf {w,b}}) = - \sum\limits_{\mathbf x_i \in M} y_i\cdot ( \mathbf {w\cdot x + b} )

2、感知機模型實現

2.1、感知機優化算法

  對於求解感知機最優模型的問題轉換爲最優解,即求損失函數的最小值時對應的參數即爲模型參數,採用梯度下降法進行求解,分別對參數求偏導:
{wL(w,b)=w[xiMyi(wxi+b)]=xiMyixiwL(w,b)=b[xiMyi(wxi+b)]=xiMyi \begin{cases} \frac{\partial}{\partial \mathbf w} L(\mathbf {w, b}) = \frac{\partial}{\partial \mathbf w} [-\sum\limits_{x_i \in M}y_i\cdot(w \cdot \mathbf x_i + \mathbf b) ] = -\sum\limits_{x_i \in M}y_i\mathbf x_i \\ \\ \frac{\partial}{\partial \mathbf w} L(\mathbf {w, b}) = \frac{\partial}{\partial \mathbf b} [-\sum\limits_{x_i \in M}y_i\cdot(w \cdot \mathbf x_i + \mathbf b) ] = -\sum\limits_{x_i \in M}y_i \\ \end{cases} \\
 其中,w=(w1,w2,...,wn)\mathbf w = (w_1, w_2 ,..., w_n) 是各個特徵對應的權重向量 ;xi=(xi(1)  xi(2) ,... ,xi(m)\mathbf x_i = ( x^{(1)}_i\,\, x^{(2)}_i \ ,...\ , x^{(m}_i )

 求解過程即每次隨機選取一個誤分類樣本點xi,yi(x_i , y_i),對w,b\mathbf {w, b} 進行一次更新,迭代計算公式如下:
ww+ηyixibb+ηyi \begin{aligned} \mathbf w^{‘} &\leftarrow \mathbf w + \eta y_i\mathbf x_i \\ \mathbf b^{‘} &\leftarrow \mathbf b + \eta y_i \end{aligned}
  其中,0η10 ≤ \eta ≤ 1是算法的學習率,即步長。通過梯度下降法不停迭代使得損失函數L(w,b)L({\mathbf {w,b}})快速地不斷減小,直到滿足要求。

2.2、感知機模型求解

輸入:線性可分訓練集 T={(x1,y1),(x2,y2),...,(xn,yn)}T=\{ (\mathbf x_1 ,y_1) ,(\mathbf x_2 ,y_2), ..., (\mathbf x_n ,y_n) \},且 yi{1,1}y_i \in \{-1,1\},學習率 η\eta

輸出:感知機模型函數 h(x)=sign(wx+b)h(\mathbf x) =sign(\mathbf {w\cdot x + b})

求解步驟:

  1. 選取初始值向量w\mathbf w 和偏置常數b\mathbf b .

  2. 在訓練集中選取數據(xi,yi)(\mathbf x_i , y_i) .

  3. 求解計算yi(wx+b)<0y_i ( \mathbf{w\cdot x + b} ) <0 (判定爲誤分類點),則進行更新.
    ww+ηyixibb+ηyi \begin{aligned} \mathbf w^{‘} &\leftarrow \mathbf w + \eta y_i\mathbf x_i \\ \mathbf b^{‘} &\leftarrow \mathbf b + \eta y_i \end{aligned}

  4. 重複第2步和第3步,直至訓練集中沒有誤分類點或滿足迭代終止條件,得到感知機模型 h(x)=sign(wx+b)h(\mathbf x) =sign(\mathbf {w \cdot x + b}).

3、感知機模型總結

​ 感知機模型的基本思想是:西安隨機選擇一個超平面,對樣本點進行劃分,然後當一個實例點被誤分類,即位於分類超平面錯誤一側時,調整初始值向量w\mathbf w 和偏置常數b\mathbf b ,使分類超平面向該誤分類點的一側移動,直至超平面越過該誤分類點爲止。所以,如果給的初始值不同,則最後得到的分割超平面 wx+b=0\mathbf{w\cdot x + b} = 0 也可能不同,即感知機模型存在多個分割超平面。

注意:感知機模型有兩個問題:

  1. 使用前提是數據集必須爲線性可分,當數據集線性不可分的時候,感知記得學習算法不收斂,迭代過程會發生震盪;
  2. 感知機模型僅適用於二分類問題,在實際應用中存在一定限制。

文中實例及參考:


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