機器學(xué)習(xí)算法系列(五)-- 支持向量機(SVM)

機器學(xué)習(xí)算法系列之--支持向量機(揭開SVM的神秘面紗)

支持向量機(Support Vector Machine :SVM):二分類算法模型,數(shù)據(jù)集較小時,分類效果甚至優(yōu)于神經(jīng)網(wǎng)絡(luò)。
其最大的特點在于:能夠造出最大間距的決策邊界,從而提高分類算法的魯棒性。
主要用于解決模式識別領(lǐng)域中的數(shù)據(jù)分類問題,屬于有監(jiān)督學(xué)習(xí)算法的一種

一、算法概述

  • 我們希望尋找到這樣的直線,使得距離這條直線最近的點到這條直線的距離最短。
  • 我們從如下右圖直觀來解釋這一句話就是要求的兩條外面的線之間的間隔最大。
  • 這是可以理解的,因為假如數(shù)據(jù)樣本是隨機出現(xiàn)的,那么這樣分割之后數(shù)據(jù)點落入到其類別一側(cè)的概率越高那么最終預(yù)測的準(zhǔn)確率也會越高。
  • 高維空間中這樣的直線稱之為超平面,因為當(dāng)維數(shù)大于三的時候我們已經(jīng)無法想象出這個平面的具體樣子。
  • 那些距離這個超平面最近的點就是所謂支持向量,實際上如果確定了支持向量也就確定了這個超平面,找到這些支持向量之后其他樣本就不會起作用了。

基本模型是定義在特征空間上的間隔最大的先行分類器,目標(biāo)是找到一個決策邊界(超平面),使得離超平面最近的點到超平面的距離越遠越好。例如下圖,3條線都可以將兩類數(shù)據(jù)分開,如何選擇“最好的”一條線,是支持向量機(SVM)算法思想的核心。

  • 超平面:如果空間是3維的,那么它的超平面是2維平面,而如果空間是2維的,則其超平面是1維線。
image.png

二、算法原理

2.1、線性可分支持向量機

  • 支持向量機最簡單的就是線性可分支持向量機,解決線性可分問題(能由一條線完全分為兩類)。當(dāng)訓(xùn)練數(shù)據(jù)線性可分時,通過硬間隔最大化,學(xué)習(xí)一個線性的分類器,也稱為硬間隔支持向量機,可以表示為凸二次規(guī)劃問題。
  • 有些概念會提到,可能不清楚,但別急,往下看,自然就清楚了。
image.png

2.1.1、算法描述:

  • 給定訓(xùn)練樣本集D = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 標(biāo)簽:y_i\in{-1, +1}
  • 假設(shè)訓(xùn)練樣本的數(shù)據(jù)集是線性可分的。
  • 學(xué)習(xí)得到分離差超平面:w^Tx_i+b=0。(一般化的向量形式)
  • 對應(yīng)分類決策函數(shù):f(x)=sign(w^T+b),其中sign( )為符號函數(shù),
    sign(x)= \begin{cases} +1, x\ge0\\ -1, x\le0 \end{cases};
    目標(biāo):“硬間隔”最大化
    注:(w,b)是帶定參數(shù),其中w是向量,b是常數(shù);w=(w_1,w_2,...,w_n)^T, x_1=(x_1,x_2,...,x_n)^T
    image.png
(1)硬間隔、硬間隔最大化

樣本空間中任意點x到超平面的距離可以寫為
d=\frac{|w^Tx+b|}{||w||}
其中||W||為超平面的范數(shù):\sqrt{w^2},常數(shù)b類似于直線方程中的截距。

  • 二維空間中點(x, y)到直線的距離:(x,y) =\frac{|Ax+By+C|}{\sqrt{A^2+B^2}}

  • 三維空間中點(x, y, z)到平面的距離:(x,y,z)=\frac{|Ax+By+Cz+D|}{\sqrt{A^2+B^2+C^2}}

支持向量:離超平面最近的幾個訓(xùn)練樣本點,使得y_i(w^Tx_i+b)=+1成立.
間隔:兩個異類支持向量到超平面的距離和: d
硬間隔:滿足所有樣本都劃分正確。

image.png

  • 圖中 A 點即為支持向量,由其所在直線表達式可知:|w^Tx+b|=1,

  • 最優(yōu)分隔超平面由支持向量完全決定。

  • 因此,支持向量到分割超平面距離d為:\frac{1}{||w||}+\frac{1}{||w||}=\frac{2}{||w||};因此,離超平面最近的點到超平面的距離越遠越好

  • 對于形狀為“x”的點,必定滿足w^Tx+b\ge1的約束條件;

  • 對于形狀為“·”的點,必定滿足w^Tx+b\le-1的約束條件。

  • 相當(dāng)于使用+1,-1當(dāng)作類別標(biāo)簽,類似于邏輯回歸中的0,1都是為了簡化數(shù)學(xué)表達。

我們要求的就是距離d的最大值,于是可以轉(zhuǎn)化為其等價形式:最小化\frac{1}{2}||w||^2=\frac{1}{2}\sum_{j=1}^{n}w_j^2\\ s.t. :y_i(wx_i+b)-1\ge0,i=1,2,...,N其中\frac{1}{2}是為了便于求導(dǎo)運算加上的,可簡化運算。
這是一個凸二次規(guī)劃問題。

(2)間隔最大化求解----拉格朗日乘子法

一般的極值優(yōu)化問題的三種情況:
? 無約束條件:求導(dǎo)找到極值點、梯度下降: min f(x) ;
? 等式約束條件:拉格朗日乘子法、消元法轉(zhuǎn)化問題
minf(x),\\h(x)=0.
? 不等式約束條件:拉格朗日乘子法 + KKT條件
minf(x),\\g(x)\le0\\h(x)=0.該約束最優(yōu)化問題也就是凸優(yōu)化問題。
其中目標(biāo)函數(shù)f(x)和約束函數(shù)g(x)都是連續(xù)可微凸函數(shù),約束函數(shù)h(x)是仿射函數(shù)。

當(dāng)目標(biāo)函數(shù)是二次函數(shù),且約束函數(shù)g(x)是仿射函數(shù)時,上述凸最優(yōu)化問題成為凸二次規(guī)劃問題。

約束最優(yōu)化問題中,常常利用拉格朗日對偶性將原始問題轉(zhuǎn)換為對偶問題,通過對對偶問題求解得到原問題的解:

  • 第一步:利用拉格朗日乘子法,得到原問題的對偶問題;
  • 第二步:再利用KKT條件,解得最優(yōu)參數(shù)w,b。

二次規(guī)劃的對偶問題
優(yōu)點,是對偶問題往往更容易求解,二,自然引入核函數(shù),進而推廣到非線性分類問題

  • 首先將目標(biāo)函數(shù)與約束條件構(gòu)建成拉格朗日函數(shù)。為此,對每一個不等式約束引入拉格朗日乘子α。


    image.png

根據(jù)拉格朗日的對偶性,原始問題極小極大問題轉(zhuǎn)變?yōu)?strong>對偶問題極大極小問題

image.png

  • 將拉格朗日函數(shù)L(w,b,\alpha) 分別對w, b, α求偏導(dǎo)并令其為0(會涉及矩陣求導(dǎo))。
    image.png

得到:


image.png
  • 將結(jié)果帶入拉格朗日函數(shù)中,消去w,b:


    image.png
  • min_{w,b}L(w,b,\alpha)對\alpha的極大,即得到對偶問題:

    image.png

將其轉(zhuǎn)化為求最小之后,便得到:

min \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_i\\ s.t.:\sum_{i=1}^N\alpha_iy_i=0, (\alpha_i\ge0,i=1,2,...,N)
其中,\alpha=(\alpha_1,...,\alpha_N)是拉格朗日乘子向量。
通常,通過求解對偶問題學(xué)習(xí)線性可分支持向量機,即首先求解對偶問題的最優(yōu)值\alpha^*,然后求最優(yōu)值w^*b^*,得出分隔超平面和分類決策函數(shù)。

KKT條件要求

image.png

由上可得,設(shè)\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_m^*是對偶問題的最優(yōu)解,則存在下標(biāo)j,使得0<\alpha_j^*<C,使得原始問題的最優(yōu)參數(shù)w^*,b^*為:

image.png

2.1.2算法流程總結(jié)

  • 輸入:線性可分訓(xùn)練集D = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 標(biāo)簽:y_i\in{-1, +1}
  • 輸出:分離超平面和分類決策函數(shù)
    ①、構(gòu)造并求解帶約束的最優(yōu)化問題:


    image.png

求得最優(yōu)解(對偶問題的解)\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*)。
②、計算:w^*=\sum_{i=1}^N\alpha_i^*y_ix_i
并選擇\alpha^*的一個正分量\alpha_j^*>0,計算b^*=y_j-\sum_{i=1}^N\alpha_i^*y_ix_i^Tx_j
③、由此求得分離超平面: w^*x+b^*=0;以及分類決策函數(shù): f(x) = sign(w^*x+b^*)

注:

  • 只要D線性可分,那就一定可以求出一個(w,b),存在且唯一存在;若線性不可分,則無法求出。
  • 一句話總結(jié):求解SVM算法,就是在約束條件y_i(w^Tx+b)\ge1的前提下,求解||w||^2的最小值
  • 在決定超平面時只有支持向量起作用,其他樣本點并不起作用,所以這種分類模型稱為支持向量機。
  • 向量的個數(shù)一般很少,所以支持向量機是由“重要的”少量的訓(xùn)練樣本確定的

2.2、線性支持向量機

2.2.1算法描述

前面的討論中,我們一直假定訓(xùn)練樣本在樣本空間中是線性可分的,即存在一個超平面能將不同類的樣本完全劃分開,也就是硬間隔。然而現(xiàn)實任務(wù)中往往不太可能;

因此,我們引入軟間隔,允許支持向量機在某些樣本上出錯。這樣的線性支持向量機也成為軟間隔支持向量機

硬間隔:所有樣本都必須劃分正確
軟間隔:允許一些樣本出錯,也就是允許一些樣本不滿足y_i(w^T+b)\ge1
松弛系數(shù):為了解決無法找到最大間距的分割超平面問題,引入了一個參數(shù)\varepsilon,稱為松弛系數(shù)

此時,為確保在最大化間隔,同時誤分類點盡量少。對每個松弛標(biāo)量付出一定的代價,所以目標(biāo)優(yōu)化函數(shù)變?yōu)?br> min_{w,b,\varepsilon_i} \frac{1}{2}||w||^2+R\sum_{i=1}^m\varepsilon_i
其中m為數(shù)據(jù)集的個數(shù),R為算法參數(shù),其對應(yīng)的約束條件(s.t.)也變成:
y_i(w^Tx+b)\ge1-\varepsilon_i\\ \varepsilon_i\ge0
如何理解松弛系數(shù)?我們可以把\varepsilon_i理解為樣本數(shù)據(jù)違反最大間距規(guī)則的程度,對于正常樣本,即滿足約束條件\varepsilon=0;而對于部分違反最大間距規(guī)則的樣本\varepsilon>0。
參數(shù)R則為懲罰參數(shù),R值大,對誤分類的懲罰增大,反之減小(以一定的步伐變化,找出最好的那個)。

可以看出,引入松弛系數(shù)類似于邏輯回歸里成本函數(shù)引入正則項,目的都是為了糾正過擬合問題,讓支持向量機對噪聲數(shù)據(jù)有更強的適應(yīng)性。

求參數(shù)也是采用拉格朗日乘子法,和上述方法步驟相同(僅多了一個懲罰因子),算法流程也基本相同。

對偶問題

  • 根據(jù)目標(biāo)優(yōu)化函數(shù),通過拉格朗日乘子法得到拉格朗日函數(shù):


    image.png
  • 分別對參數(shù)求偏導(dǎo)并令其為0:


    image.png
  • 將結(jié)果帶入,得到對偶問題:


    image.png

等價于:
min \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_i\\ s.t.:\sum_{i=1}^N\alpha_iy_i=0, \\ (0\le\alpha_i\le C,i=1,2,...,N)

2.2.2算法流程總結(jié)

  • 輸入:線性可分訓(xùn)練集D = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 標(biāo)簽:y_i\in{-1, +1}
  • 輸出:分離超平面和分類決策函數(shù)

①、構(gòu)造并求解帶約束的最優(yōu)化問題:


image.png

求得最優(yōu)解(對偶問題的解)\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*)。
②、計算:w^*=\sum_{i=1}^N\alpha_i^*y_ix_i
并選擇\alpha^*的一個正分量0<\alpha_j^*<C,計算b^*=y_j-\sum_{i=1}^N\alpha_i^*y_ix_i^Tx_j
③、由此求得分離超平面: w^*x+b^*=0;以及分類決策函數(shù): f(x) = sign(w^*x+b^*)
注:此處的解w^*唯一,但b^*不一定

2.3、非線性支持向量機與核函數(shù)

在現(xiàn)實任務(wù)中,原始的樣本空間可能并不存在一個能正確劃分兩類樣本的超平面,因此,需要利用非線性模型才能很好地進行分類。這時可以使用非線性支持向量機,主要特點就是利用核技巧(kernel trick)。

5ebdc586b9bb71cac2e7a6e41201c45.jpg

2.3.1、核技巧

非線性問題往往不好求解,所以我們希望能用解線性分類問題的方法來解決該問題。所以需要采取非線性變換,將非線性問題轉(zhuǎn)變?yōu)榫€性問題,進而求解原來非線性問題。核技巧就屬于這樣的方法:

  • 高維映射:首先使用一個變換將原空間的數(shù)據(jù)映射到新空間(更高的維度);定義從原樣本空間到新空間的變換(映射)函數(shù)為\varphi(x)
  • 然后在新空間里用線性分類學(xué)習(xí)方法從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)分類模型

注:\varphi(x)是無限維。
也就是將樣本映射到一個更高維度的特征空間中,使得其線性可分。

如果原始空間是有限維,即屬性數(shù)有限,那么一定存在一個高維特征空間使樣本可分;且維度越高,越容易被線性劃分

\varphi(x)為將x映射后的特征向量,于是在新的特征空間中劃分超平面可以表示為
f(x)=w^T\varphi(x)+b
使用軟間隔最大化,目標(biāo)函數(shù)為:
min_{w,b,\varepsilon} \frac{1}{2}||w||^2+R\sum_{i=1}^m\varepsilon_i\\ s.t.(約束條件):\begin{cases} y_i(w^T\varphi(x_i)+b)\ge1-\varepsilon_i, 此處將x_i替換為了\varphi(x_i)\\ \varepsilon_i\ge0, i = 1,2,...,m \end{cases}

其中w,b是模型參數(shù),類似有:min_{w,b} \frac{1}{2}||w||^2

對偶問題

image.png

由于特征維數(shù)可能很高,直接計算\phi(x_i)^T\phi(x_j)通常會很困難,因此引入了核函數(shù)。于是,我們將對偶問題重寫

image.png

核函數(shù)帶入之后進行求解,可得分類決策函數(shù)為:


image.png

2.3.2、核函數(shù)

定義:設(shè)\chi是輸入空間,\psi為特征空間,如果存在一個從\chi\psi的映射:\phi(x),使得對所有的x,z\in\chi,函數(shù)K(x,z)滿足條件
K(x,z)=\phi(x)\cdot\phi(z)
則稱K(x, z)為核函數(shù)(二者的內(nèi)積),\phi(x)為映射函數(shù)。

  • 我們不需要知道無限維映射函數(shù)\phi(x)的顯示表達,我們只需要知道一個核函數(shù)(kernel function)K(x,z)=\phi(x)^T\phi(z)(兩個無限維向量的內(nèi)積),替換掉軟間隔限制條件中的x_i或者\varphi(x_i),則對應(yīng)的優(yōu)化式仍然是可解的。
  • :K(x,z)能寫成\phi(x)^T\phi(z)充要條件如下(Mercer's Theorem),
    ① 交換性:K(x,z)= K(z, x)
    ② 半正定性:\forall C_i,X_i(i=1,2,...,N),有 \sum_{i=1}^N\sum_{j=1}^NC_iC_jK(X_i, X_j) \ge0
  • 在實際應(yīng)用中往往依賴領(lǐng)域知識直接選擇核函數(shù),核函數(shù)的選擇成為支持向量機最大的變數(shù),模型的有效性需要通過實驗驗證。
常用的核函數(shù):
  • 線性核Linear
    K(x_i,x_j)=x_i^Tx_j
    兩向量的內(nèi)積,相當(dāng)于沒有用核。

  • 多項式核Ploy(常用)
    K(x_i,x_j)=(x_i^Tx_j)^d
    其中d大于等于1,為多項式的次數(shù);
    d值越大,維度越高。
    當(dāng)d=1時,退化為線性核。

  • 高斯核Rbf(常用)
    K(x_i,x_j)=e^{-\frac{||x_i-x_j||^2}{2\sigma^2}}
    其中\sigma為高斯核的帶寬(width);
    例如,如果我們輸入的特征是一維的標(biāo)量,高斯核函數(shù)對應(yīng)的形狀是一個反鐘形的曲線,該參數(shù)就是控制其寬度的。
    該核對應(yīng)的\phi(x)是無限維的:函數(shù)可以將輸入特征映射到無限多維。公式的推導(dǎo)會用到泰勒公式。

  • 拉普拉斯核
    K(x_i,x_j)=e^{-\frac{||x_i-x_j||}{\sigma}}
    其中 \sigma>0

  • sigmoid核(常用)
    K(x_i,x_j)=tanh(\beta x^T+b)
    其中tanh為雙曲正切函數(shù):tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}, \beta>0, b<0

PS: 情況不明時可先嘗試高斯核

2.3.3算法流程總結(jié)

  • 輸入:訓(xùn)練集D = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 標(biāo)簽:y_i\in{-1, +1}
  • 輸出:分離超平面和分類決策函數(shù)

①、構(gòu)造并求解帶約束的最優(yōu)化問題:


image.png

求得最優(yōu)解(對偶問題的解)\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*)。
②、計算:w^*=\sum_{i=1}^N\alpha_i^*y_iK(x_i,x_j)
并選擇\alpha^*的一個正分量0<\alpha_j^*<C,計算b^*=y_j-\sum_{i=1}^N\alpha_i^*y_ix_i^TK(x_i,x_j)
③、由此求得分離超平面: w^*x+b^*=0;以及分類決策函數(shù): f(x) = sign(w^*x+b^*)

三、SVM算法總結(jié)

image.png

優(yōu)點
? 使用核函數(shù)可以向高維空間進行映射,解決非線性的分類;
? 分類思想很簡單:將樣本與決策面的間隔最大化;
? 分類效果較好,計算開銷不大;
? SVM 是一種有堅實理論基礎(chǔ)的小樣本學(xué)習(xí)方法
缺點
? 對缺失數(shù)據(jù)敏感,對參數(shù)調(diào)節(jié)和核函數(shù)的選擇敏感;
? 對大規(guī)模數(shù)據(jù)訓(xùn)練比較困難
對偶問題以及KKT條件

  • 對偶問題就是使求解更加高效且目標(biāo)函數(shù)值不變,通過先消去w,b,得到關(guān)于α的函數(shù),然后單獨計算 α,通過得到的α反求w,b,最后獲得超平面的參數(shù)
  • 相比于先對α的不等式約束進行計算,對偶的方式使得計算更加便捷。
  • 另外KKT條件就是在約束下求得目標(biāo)函數(shù)極值時αi滿足的條件,只有滿足了kkt條件,才算是滿足了目標(biāo)函數(shù)和約束函數(shù),因此下面描述的計算迭代算法也是基于KKT條件,通過不斷修改不滿足KKT條件的α,使其滿足KKT條件,從而求出目標(biāo)函數(shù)的最優(yōu)值。

四、序列最小最優(yōu)化算法(SMO算法)

當(dāng)訓(xùn)練樣本容量很大時,很多實現(xiàn)算法往往變得非常低效,以至于無法使用。
SMO是一種啟發(fā)式算法,基本思路是:

  • 如果所有變量的解都滿足此最優(yōu)化問題的KKT條件,那么這個最優(yōu)化問題的解就得到了。(KKT條件是該最優(yōu)化問題的充分必要條件)
  • 否則,選擇兩個變量,固定其他變量,針對這兩個變量構(gòu)建一個二次規(guī)劃問題。(這個二次規(guī)劃問題,關(guān)于這兩個變量的解應(yīng)該更接近原始二次規(guī)劃問題的解,因為這會使得原始二次規(guī)劃問題的目標(biāo)函數(shù)值變得更小,這樣就可以大大提高整個算法的計算速度,)
  • 子問題有兩個變量,一個是違反KKT條件最嚴重的那一個,另一個由約束條件自動確定

如此SMO算法將原問題不斷分解為子問題,并對子問題求解,直至全都滿足KKT條件為止,進而達到求解原問題的目的

整個SMO算法包括兩個部分:求解兩個變量二次規(guī)劃的解析方法,和選擇變量的啟發(fā)式方法

詳細推導(dǎo)過程可參考:SVM支持向量機-SMO算法公式推導(dǎo)(2)

偽代碼

  • 輸入:訓(xùn)練數(shù)據(jù)集T = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 標(biāo)簽:y_i\in{-1, +1},i=1,2,...,N,精度\varepsilon;
  • 輸出近似解\alpha估計值。
    (1) 取初值\alpha^{(0)},令k=0;
    (2)選取優(yōu)化變量\alpha_1^{(k)}, \alpha_2^{(k)},解析求解兩個變量的最優(yōu)化問題,求得最優(yōu)解\alpha_1^{(k+1)}$$\alpha_2^{(k+1)},更新\alpha\alpha^{(k+1)}
    (3)若在精度\varepsilon范圍內(nèi)滿足停機條件,則轉(zhuǎn)(4);否則令k=k+1,轉(zhuǎn)(2);
    (4)取\alpha估計值=\alpha^{(k+1)}

SMO算法是支持向量機學(xué)習(xí)的一種快速算法,其特點是不斷地將原二次規(guī)劃問題分解為只有兩個變量的二次規(guī)劃子問題,并對子問題進行解析求解,知道所有變量滿足KKT條件為止。這樣通過啟發(fā)式的方法得到原二次規(guī)劃問題的最優(yōu)解。因為子問題有解析解,所以每次計算子問題都很快,雖然計算子問題次數(shù)很多,但在總體上還是高效的。

四、算法實戰(zhàn)

SVM支持向量機算法實戰(zhàn)(SMO)可參考該博客:《機器學(xué)習(xí)實戰(zhàn)》第六章 Python3代碼-(親自修改測試可成功運行)

以上就是關(guān)于決策樹的分享,若有不妥之處,歡迎各路大佬不吝賜教~

參考:
《統(tǒng)計學(xué)習(xí)方法》,李航, 清華大學(xué)出版社,第二版
《機器學(xué)習(xí)》,周志華,清華大學(xué)出版社
https://blog.csdn.net/BIT_666/article/details/79865225

喜歡的伙伴點個贊關(guān)注一下吧~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容