【機器學習】十二、一文看懂支持向量機原理

說明:本文是一篇學習筆記,在看完很多大佬對SVM的講解之後,自己Copy和整理的,僅供學習使用,碼字不易,喜歡請點贊!!!
在這裏插入圖片描述

一、SVM簡介

支持向量機,英文名Support Vector Machine,因此簡稱SVM。SVM是應用最廣泛、並且效果很不錯分類算法。李航的《統計學習方法》對SVM的原理進行了詳細的推導,CSDN的博客專家July也對SVM的數學原理進行了完整的總結。本文在看了這些大佬的文章後,做出了自己的整理,希望供自己日後學習使用,也提供給大家學習參考使用。本文主要包括以下部分:

  • 線性可分SVM
  • 線性不可分SVM
  • SVM公式推導用到的知識簡介
  • 離羣點處理
  • 主要參數

二、線性可分情況下的SVM

2.1 線性可分簡介
對於二分類問題,如果線性可分的話,你可能首先想到的是邏輯迴歸,前面我們分享過邏輯迴歸的原理,知道邏輯迴歸通過將線性迴歸的值使用Sigmoid函數映射到區間(0,1)之間,然後根據預測值與0的大小關係對比,來判斷y屬於哪一類。
在這裏插入圖片描述在邏輯迴歸裏面使用的是θTx\theta ^Tx來表示分割超平面,其中有:

θTx=θ0+θ1x1+θ2x2+...+θnxn\theta ^Tx=\theta _0+\theta _1x_1+\theta _2x_2+...+\theta _nx_n

因此邏輯迴歸分類的結果,只和θTx\theta ^Tx的正負有關,即:

ifif θTx>0\theta ^Tx>0 thenthen y=1y=1elseelse ifif θTx<0\theta ^Tx<0 thenthen y=0y=0

這裏令θ0=b\theta _0=bθ1x1+θ2x2+...+θnxn=wTx\theta _1x_1+\theta _2x_2+...+\theta _nx_n = w^Tx

則有:

θTx=wTx+b\theta ^Tx= w^Tx+b

在邏輯迴歸中,y的值取0和1,這裏我們將分類的y的值取-1和1(即將分類標籤0使用-1替換)。則有:

ifif wTx+b>0w^Tx+b>0 thenthen y=1y=1elseelse ifif wTx+b<0w^Tx+b<0 thenthen y=1y=-1

並且我們有y(wTx+b)>0y(w^Tx + b) >0,則分類正確。

在這裏插入圖片描述
所以我們需要找到一個超平面,使得能分開兩類數據。那麼怎麼分開效果更好呢,下圖明顯課件綠色分割平面由於紅色分割平面。那麼分開的標準是什麼呢?請看下一節。
在這裏插入圖片描述
2.2 函數間隔 and 幾何間隔
這部分參考了知乎朋友Jason對函數間隔和集合間隔的解釋,參考鏈接見文末參考文獻。

我麼知道SVM是通過超平面來講樣本分成兩類的,在超平面wTx+b=0w^Tx+b=0確定的情況下,那麼wTx+b|w^Tx+b|可以表示點x距離超平面的相對距離,爲什麼是相對距離呢?一會兒你就知道了。
前面說了,y(wTx+b)>0y(w^Tx + b) >0,則分類正確,否則分類錯誤。並且有y(wTx+b)y(w^Tx + b)的值越大,則分類的可信度越高,反之亦然。
所以樣本點(xi,yi)(x_i,y_i)到超平面(w,b)(w,b)函數間隔定義爲:

γi=yi(wTxi+b)\gamma_i=y_i(w^Tx_i + b)

但是你會發現,如果wwbb同比例增大的話,超平面不變,而函數間隔會變大,這也是爲什麼函數間隔只能給出點到平面的相對距離大小。

幾何間隔定義如下:

γi=yi(wTxi+b)w\gamma_i=\frac{y_i(w^Tx_i + b)}{||w||}

實際上,幾何間隔就是點到超平面的距離。而函數距離就是未歸一化的距離。

而訓練集到超平面的最小几何間隔即爲這些樣本到超平面的幾何間隔。

2.3 最大間隔分類器
SVM訓練分類器的方法是尋找到超平面,使正負樣本在超平面的兩側,且樣本到超平面的幾何間隔最大。
在這裏插入圖片描述
所以SVM可以表述爲求解下列優化問題:

maxw,bγ\max \limits_{w,b} {\gamma}

s.t.yi(wTxi+b)w>=γs.t. \frac{y_i(w^Tx_i + b)}{||w||}>=\gamma

前面說了函數間隔中wwbb同比例增大的話,超平面不變,因此可以令函數間隔爲1,即:

yi(wTxi+b)=1y_i(w^Tx_i + b)=1

因此幾何間隔爲:1w\frac{1}{||w||}

同時,目標函數變化爲:

maxw,b1w\max \limits_{w,b} {\frac{1}{||w||}}

s.t.s.t. yi(wTxi+b)>=1y_i(w^Tx_i + b)>=1

在這裏插入圖片描述
2.4 SVM求解
上面說到,SVM在給定函數間隔爲1的情況下,目標函數如下:

maxw,b1w\max \limits_{w,b} {\frac{1}{||w||}}

s.t.s.t. yi(wTxi+b)>=1i=1,2...ny_i(w^Tx_i + b)>=1 ,i=1,2,... ,n

我們知道 maxw,b1w\max \limits_{w,b} {\frac{1}{||w||}} 等價於 minw,b12w2\min \limits_{w,b} {\frac{1}{2}||w||^2},因此目標函數可以轉換爲:

minw,b12w2\min \limits_{w,b} {\frac{1}{2}||w||^2}

s.t.s.t. yi(wTxi+b)>=1i=1,2...ny_i(w^Tx_i + b)>=1 ,i=1,2,... ,n

目標函數爲二次的,約束條件是線性的,因此是一個凸二次規劃問題(對於凸集、凸函數以及凸優化的講解見第四部分)。
但是這裏這個問題可以引入拉格朗日對偶性,然後可以通過求解原始問題的對偶問題來得到原始問題的最優解,這樣將會更容易求解。引入拉格朗日乘子α\alpha後的拉格朗日函數爲:

L(w,b,α)=12w2i=1n[αi(yi(wTxi+b)1)]L(w,b,\alpha)= {\frac{1}{2}||w||^2} - \sum_{i=1}^{n}[\alpha _i(y_i(w^Tx_i + b)-1)]

然後我們自定義函數θ(w)\theta (w),並且令:

θ(w)=maxαi>=0L(w,b,α)\theta (w)=\max \limits_{\alpha_i>=0}{L(w,b,\alpha)}

那麼,我們可以知道,但某個約束條件不滿足,即yi(wTxi+b)<1y_i(w^Tx_i + b) < 1時,則會有θ(w)\theta (w)\infty。而當所有約束條件滿足的時候,則有

θ(w)=12w2\theta (w)={\frac{1}{2}||w||^2}。因此最小化12w2{\frac{1}{2}||w||^2},即等價於最小化θ(w)\theta (w)

因此,目標函數等價於:

minw,bθ(w)=minw,bmaxαi>=0L(w,b,α)=p\min \limits_{w,b}{\theta (w)}=\min \limits_{w,b}\max \limits_{\alpha_i>=0}{L(w,b,\alpha)}=p^*

這裏用pp^*表示這個問題的最優值,且和最初的問題是等價的。如果直接求解,那麼一上來便得面對w和b兩個參數,而αi\alpha _i又是不等式約束,這個求解過程不好做。不妨把最小和最大的位置交換一下,變成:

maxαi>=0minw,bL(w,b,α)=d\max \limits_{\alpha_i>=0}\min \limits_{w,b}{L(w,b,\alpha)}=d^*

交換以後的問題是原問題的對偶問題,並且有 d<=pd^*<=p^*,在滿足某些條件的情況下,這兩者相等,這個時候就可以通過求解對偶問題來間接地求解原始問題。

然後求解這個maxmin問題。
(1)首先我們固定α\alpha,我們知道求解minw,bL(w,b,α)\min \limits_{w,b}{L(w,b,\alpha)}這個最小值,可以對L(w,b,α)L(w,b,\alpha)進行求導,然後令Lw\frac{∂L}{∂w}Lb\frac{∂L}{∂b}的結果等於0即可。
在這裏插入圖片描述
將計算結果帶入L(w,b,α)L(w,b,\alpha),則有:
在這裏插入圖片描述因此有:
在這裏插入圖片描述(2)然後求對α\alpha的極大值。這裏的目標函數如下:
在這裏插入圖片描述
因此只要求出α\alpha,就能根據上一步的結果求得wwbb的值。從而得到分割的最優超平面。
而這裏求解α\alpha的值,需要用到SMO算法來求解對偶問題中的拉格朗日乘子α\alpha。而想看SMO算法原理的可以參考附件的參考文獻。

三、線性不可分SVM

3.1 核函數
從上面的推導我們有:w=i=1nαiyixiw=\sum_{i=1}^n\alpha _iy_ix_i,帶入超平面得到:

f(x)=wTx+b=(i=1nαiyixi)Tx+b=i=1nαiyi<xiT,x>+bf(x)=w^Tx+b=(\sum_{i=1}^n\alpha _iy_ix_i)^Tx+b=\sum_{i=1}^n\alpha _iy_i<x_i^T,x>+b

其中<xiT,x>+b<x_i^T,x>+b表示的是向量內積。從這裏可以看出,新的點xx的預測值,只和少量的support vector的內積有關,而對於不是support vector的點,其係數α=0\alpha=0,因此新點的預測不需要和所有的訓練數據進行計算。
到現在的話,我們的SVM只能處理線性可分的情況,而對於如下圖的情況,我們就需要引入核函數來處理。
在這裏插入圖片描述
核函數可以將低維數據映射到高維空間,然後在高維空間中,得到分離超平面,如下圖:
在這裏插入圖片描述核函數相當於在原來的分類函數上套了一層函數:

f(x)=wTx+b=i=1nαiyi<xiT,x>+bf(x)=w^Tx+b=\sum_{i=1}^n\alpha _iy_i<x_i^T,x>+b

在增加核函數kk之後,f(x)f(x)映射成爲:

f(x)=wTx+b=i=1nαiyi<ϕ(xiT),ϕ(x)>+bf(x)=w^Tx+b=\sum_{i=1}^n\alpha _iy_i<\phi (x_i^T),\phi (x)>+b

其中k<xi,x>=<ϕ(xi),ϕ(x)>k<x_i,x>=<\phi (x_i),\phi (x)>

因此對偶問題爲:
在這裏插入圖片描述

3.2 核函數舉例
核函數有很多種,常見的核函數見4.4小節。這裏舉例子展示一下多項式核函數,我們知道上面的提到的下圖需要用圓來定義劃分超平面,涉及到x1,x12,x2,x22,x1x2x_1,x_1^2,x_2,x_2^2,x_1x_2這樣的五維空間來計算,如果直接定義五維空間也行,但是如果是3個變量將變成19維空間,後面呈指數爆炸型增長,因此不可取。
而核函數則可以在低維空間計算,然後將結果映射到高維空間,比如這裏取下面多項式核函數:

(k<x1,x2>+1)2(k<x_1,x_2>+1)^2,則只需要在二維空間中計算,然後結果同樣是映射到了5維空間,大大的減少了計算量。
在這裏插入圖片描述

四、SVM公式推導用到的知識簡介

4.1 凸集
SVM需要用到凸優化問題,在瞭解凸優化問題之前,需要先了解凸集和凸函數。
凸集的定義:凸集是一個點集,其中每兩點之間的直線上的點都落在該點集中。
如下圖所示,左邊爲凸集,而右邊爲非凸集。
在這裏插入圖片描述
4.2凸函數
凸函數的定義:一個定義在向量空間的凸子集C(區間)上的實值函數f,如果在其定義域C上的任意兩點x,y以及θ[0,1]\theta∈[0,1]有:

f(θx+(1θ)y)<=θf(x)+(1θ)f(y)f(\theta x + (1-\theta)y)<=\theta f(x)+(1-\theta)f(y)
在這裏插入圖片描述則該函數爲凸函數!凸函數另一個判別方式是:如果一個凸函數是一個二階可微函數,則它的二階導數是非負的。

4.3 凸優化
凸優化定義:凸優化是指一種比較特殊的優化,是指求取最小值的目標函數爲凸函數的一類優化問題。其中,目標函數爲凸函數且定義域爲凸集的優化問題稱爲無約束凸優化問題。而目標函數和不等式約束函數均爲凸函數,等式約束函數爲仿射函數,並且定義域爲凸集的優化問題爲約束優化問題。
在這裏插入圖片描述

4.4常用核函數

  • 線性核函數
    在這裏插入圖片描述
  • 多項式核函數
    在這裏插入圖片描述
  • 高斯RBF核函數
    在這裏插入圖片描述
  • sigmoid核函數
    在這裏插入圖片描述

五、離羣點處理

如下圖,當存在離羣點(outlier)的時候,有時候會對結果產生很大的影響,因爲超平面本身就是隻有少數幾個 support vector 組成的,如果這些 support vector 裏又存在 outlier 的話,其影響就很大了。
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
對於遠離分類平面的點值爲0;對於邊緣上的點值在[0, 1/L]之間,其中,L爲訓練數據集個數,即數據集大小;對於outline數據和內部的數據值爲1/L。

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

六、主要參數

實現SVM現在都有比較好用的包,可以直接調用,但是有幾個主要的參數需要知道。
6.1 參數C
參數C表示的是懲罰係數,即上面說到的對誤差(離羣點)的寬容度,C越高,說明越不能容忍出現誤差,容易過擬合,C越小,容易欠擬合,C過大或過小,泛化能力變差。
6.2 參數kernel
參數kernel爲核函數,默認爲rbf(高斯核函數),其他值還有linear、poly、sigmoid、precomputed等。
6.3 參數gamma
參數gamma是‘rbf’,‘poly’ 和‘sigmoid’核函數參數。隱含地決定了數據映射到新的特徵空間後的分佈,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的個數影響訓練與預測的速度。默認爲1/nfeatures1/n_{features}


歡迎添加個人微信號:liu2536036458。
想進入交流羣的,備註:數據分析交流羣
我們共同學習,共同進步!!!


參考文獻:
李航 《統計學習方法》
https://blog.csdn.net/Asher117/article/details/94733777
https://blog.csdn.net/v_july_v/article/details/7624837
https://www.zhihu.com/question/20466147
https://blog.csdn.net/feilong_csdn/article/details/62427148
https://blog.csdn.net/batuwuhanpei/article/details/52354822
https://zhidao.baidu.com/question/311993614.html
https://www.cnblogs.com/en-heng/p/5965438.html

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