支持向量機原理(五)線性支持迴歸機器學習
支持向量機(Support Vecor Machine,如下簡稱SVM)雖然誕生只有短短的二十多年,可是自一誕生便因爲它良好的分類性能席捲了機器學習領域,並緊緊壓制了神經網絡領域好多年。若是不考慮集成學習的算法,不考慮特定的訓練數據集,在分類算法中的表現SVM說是排第一估計是沒有什麼異議的。函數
SVM是一個二元分類算法,線性分類和非線性分類都支持。通過演進,如今也能夠支持多元分類,同時通過擴展,也能應用於迴歸問題。本系列文章就對SVM的原理作一個總結。本篇的重點是SVM用於線性分類時模型和損失函數優化的一個總結。post
在感知機原理小結中,咱們講到了感知機的分類原理,感知機的模型就是嘗試找到一條直線,可以把二元數據隔離開。放到三維空間或者更高維的空間,感知機的模型就是嘗試找到一個超平面,可以把全部的二元類別隔離開。對於這個分離的超平面,咱們定義爲\(w^Tx + b = 0\),以下圖。在超平面\(w^Tx + b = 0\)上方的咱們定義爲\(y=1\),在超平面\(w^Tx + b = 0\)下方的咱們定義爲\(y=-1\)。能夠看出知足這個條件的超平面並不止一個。那麼咱們可能會嘗試思考,這麼多的能夠分類的超平面,哪一個是最好的呢?或者說哪一個是泛化能力最強的呢?性能
接着咱們看感知機模型的損失函數優化,它的思想是讓全部誤分類的點(定義爲M)到超平面的距離和最小,即最小化下式:
\[ \sum\limits_{x_i \in M}- y^{(i)}(w^Tx^{(i)} +b)\big / ||w||_2 \]學習
當\(w和b\)成比例的增長,好比,當分子的\(w和b\)擴大N倍時,分母的L2範數也會擴大N倍。也就是說,分子和分母有固定的倍數關係。那麼咱們能夠固定分子或者分母爲1,而後求另外一個即分子本身或者分母的倒數的最小化做爲損失函數,這樣能夠簡化咱們的損失函數。在感知機模型中,咱們採用的是保留分子,固定分母\(||w||_2 = 1\),即最終感知機模型的損失函數爲:
\[ \sum\limits_{x_i \in M}- y^{(i)}(w^Tx^{(i)} +b) \]優化
若是咱們不是固定分母,改成固定分子,做爲分類模型有沒有改進呢?
這些問題在咱們引入SVM後會詳細解釋。
在正式介紹SVM的模型和損失函數以前,咱們還須要先了解下函數間隔和幾何間隔的知識。
在分離超平面固定爲\(w^Tx + b = 0\)的時候,\(|w^Tx + b |\)表示點x到超平面的相對距離。經過觀察$w^Tx + b \(和y是否同號,咱們判斷分類是否正確,這些知識咱們在感知機模型裏都有講到。這裏咱們引入函數間隔的概念,定義函數間隔\)\gamma^{'}$爲:
\[ \gamma^{'} = y(w^Tx + b) \]
能夠看到,它就是感知機模型裏面的誤分類點到超平面距離的分子。對於訓練集中m個樣本點對應的m個函數間隔的最小值,就是整個訓練集的函數間隔。
函數間隔並不能正常反應點到超平面的距離,在感知機模型裏咱們也提到,當分子成比例的增加時,分母也是成倍增加。爲了統一度量,咱們須要對法向量\(w\)加上約束條件,這樣咱們就獲得了幾何間隔\(\gamma\),定義爲:
\[ \gamma = \frac{y(w^Tx + b)}{||w||_2} = \frac{\gamma^{'}}{||w||_2} \]
幾何間隔纔是點到超平面的真正距離,感知機模型裏用到的距離就是幾何距離。
在感知機模型中,咱們能夠找到多個能夠分類的超平面將數據分開,而且優化時但願全部的點都離超平面遠。可是實際上離超平面很遠的點已經被正確分類,咱們讓它離超平面更遠並無意義。反而咱們最關心是那些離超平面很近的點,這些點很容易被誤分類。若是咱們可讓離超平面比較近的點儘量的遠離超平面,那麼咱們的分類效果會好有一些。SVM的思想起源正起於此。
以下圖所示,分離超平面爲\(w^Tx + b = 0\),若是全部的樣本不光能夠被超平面分開,還和超平面保持必定的函數距離(下圖函數距離爲1),那麼這樣的分類超平面是比感知機的分類超平面優的。能夠證實,這樣的超平面只有一個。和超平面平行的保持必定的函數距離的這兩個超平面對應的向量,咱們定義爲支持向量,以下圖虛線所示。
支持向量到超平面的距離爲\(1/||w||_2\),兩個支持向量之間的距離爲\(2/||w||_2\)。
SVM的模型是讓全部點到超平面的距離大於必定的距離,也就是全部的分類點要在各自類別的支持向量兩邊。用數學式子表示爲:
\[ max \;\; \gamma = \frac{y(w^Tx + b)}{||w||_2} \;\; s.t \;\; y_i(w^Tx_i + b) = \gamma^{'(i)} \geq \gamma^{'} (i =1,2,...m) \]
通常咱們都取函數間隔\(\gamma^{'}\)爲1,這樣咱們的優化函數定義爲:
\[ max \;\; \frac{1}{||w||_2} \;\; s.t \;\; y_i(w^Tx_i + b) \geq 1 (i =1,2,...m) \]
也就是說,咱們要在約束條件\(y_i(w^Tx_i + b) \geq 1 (i =1,2,...m)\)下,最大化\(\frac{1)}{||w||_2}\)。能夠看出,這個感知機的優化方式不一樣,感知機是固定分母優化分子,而SVM是固定分子優化分母,同時加上了支持向量的限制。
因爲\(\frac{1}{||w||_2}\)的最大化等同於\(\frac{1}{2}||w||_2^2\)的最小化。這樣SVM的優化函數等價於:
\[ min \;\; \frac{1}{2}||w||_2^2 \;\; s.t \;\; y_i(w^Tx_i + b) \geq 1 (i =1,2,...m) \]
因爲目標函數\(\frac{1}{2}||w||_2^2\)是凸函數,同時約束條件不等式是仿射的,根據凸優化理論,咱們能夠經過拉格朗日函數將咱們的優化目標轉化爲無約束的優化函數,這和最大熵模型原理小結中講到了目標函數的優化方法同樣。具體的,優化函數轉化爲:
\[ L(w,b,\alpha) = \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \; 知足\alpha_i \geq 0 \]
因爲引入了朗格朗日乘子,咱們的優化目標變成:
\[ \underbrace{min}_{w,b}\; \underbrace{max}_{\alpha_i \geq 0} L(w,b,\alpha) \]
和最大熵模型同樣的,咱們的這個優化函數知足KKT條件,也就是說,咱們能夠經過拉格朗日對偶將咱們的優化問題轉化爲等價的對偶問題來求解。若是對凸優化和拉格朗日對偶不熟悉,建議閱讀鮑德的《凸優化》。
也就是說,如今咱們要求的是:
\[ \underbrace{max}_{\alpha_i \geq 0} \;\underbrace{min}_{w,b}\; L(w,b,\alpha) \]
從上式中,咱們能夠先求優化函數對於\(w和b\)的極小值。接着再求拉格朗日乘子\(\alpha\)的極大值。
首先咱們來求\(L(w,b,\alpha)\)基於\(w和b\)的極小值,即\(\underbrace{min}_{w,b}\; L(w,b,\alpha)\)。這個極值咱們能夠經過對\(w和b\)分別求偏導數獲得:
\[ \frac{\partial L}{\partial w} = 0 \;\Rightarrow w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i \]
\[ \frac{\partial L}{\partial b} = 0 \;\Rightarrow \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]
從上兩式子能夠看出,咱們已經求得了\(w和\alpha\)的關係,只要咱們後面接着可以求出優化函數極大化對應的\(\alpha\),就能夠求出咱們的\(w\)了,至於b,因爲上兩式已經沒有b,因此最後的b能夠有多個。
好了,既然咱們已經求出\(w和\alpha\)的關係,就能夠帶入優化函數\(L(w,b,\alpha)\)消去\(w\)了。咱們定義:
\[ \psi(\alpha) = \underbrace{min}_{w,b}\; L(w,b,\alpha) \]
如今咱們來看將\(w\)替換爲\(\alpha\)的表達式之後的優化函數\(\psi(\alpha)\)的表達式:
\[ \begin{align} \psi(\alpha) & = \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \\& = \frac{1}{2}w^Tw-\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i -\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}(\sum\limits_{i=1}^{m}\alpha_iy_ix_i)^T(\sum\limits_{i=1}^{m}\alpha_iy_ix_i) - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_iy_ix_i^T\alpha_jy_jx_j + \sum\limits_{i=1}^{m}\alpha_i \\& = \sum\limits_{i=1}^{m}\alpha_i - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j \end{align} \]
其中,(1)式到(2)式用到了範數的定義\(||w||_2^2 =w^Tw\), (2)式到(3)式用到了上面的\(w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i\), (3)式到(4)式把和樣本無關的\(w^T\)提早,(4)式到(5)式合併了同類項,(5)式到(6)式把和樣本無關的\(b\)提早,(6)式到(7)式繼續用到\(w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i\),(7)式到(8)式用到了向量的轉置。因爲常量的轉置是其自己,全部只有向量\(x_i\)被轉置,(8)式到(9)式用到了上面的\(\sum\limits_{i=1}^{m}\alpha_iy_i = 0\),(9)式到(10)式使用了\((a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…\)的乘法運算法則,(10)式到(11)式僅僅是位置的調整。
從上面能夠看出,經過對\(w,b\)極小化之後,咱們的優化函數\(\psi(\alpha)\)僅僅只有\(\alpha\)向量作參數。只要咱們可以極大化\(\psi(\alpha)\),就能夠求出此時對應的\(\alpha\),進而求出\(w,b\).
對\(\psi(\alpha)\)求極大化的數學表達式以下:
\[ \underbrace{max}_{\alpha} -\frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) + \sum\limits_{i=1}^{m} \alpha_i \]
\[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]
\[ \alpha_i \geq 0 \; i=1,2,...m \]
能夠去掉負號,即爲等價的極小化問題以下:
\[ \underbrace{min}_{\alpha} \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) - \sum\limits_{i=1}^{m} \alpha_i \]
\[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]
\[ \alpha_i \geq 0 \; i=1,2,...m \]
只要咱們能夠求出上式極小化時對應的\(\alpha\)向量就能夠求出\(w和b\)了。具體怎麼極小化上式獲得對應的\(\alpha\),通常須要用到SMO算法,這個算法比較複雜,咱們後面會專門來說。在這裏,咱們假設經過SMO算法,咱們獲得了對應的\(\alpha\)的值\(\alpha^{*}\)。
那麼咱們根據\(w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i\),能夠求出對應的\(w\)的值
\[ w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i \]
求b則稍微麻煩一點。注意到,對於任意支持向量\((x_x, y_s)\),都有
\[ y_s(w^Tx_s+b) = y_s(\sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s+b) = 1 \]
假設咱們有S個支持向量,則對應咱們求出S個\(b^{*}\),理論上這些\(b^{*}\)均可以做爲最終的結果, 可是咱們通常採用一種更健壯的辦法,即求出全部支持向量所對應的\(b_s^{*}\),而後將其平均值做爲最後的結果。注意到對於嚴格線性可分的SVM,\(b\)的值是有惟一解的,也就是這裏求出的全部\(b^{*}\)都是同樣的,這裏咱們仍然這麼寫是爲了和後面加入軟間隔後的SVM的算法描述一致。
怎麼獲得支持向量呢?根據KKT條件中的對偶互補條件\(\alpha_{i}^{*}(y_i(w^Tx_i + b) - 1) = 0\),若是\(\alpha_i>;0\)則有\(y_i(w^Tx_i + b) =1\) 即點在支持向量上,不然若是\(\alpha_i=0\)則有\(y_i(w^Tx_i + b) \geq 1\),即樣本在支持向量上或者已經被正確分類。
這裏咱們對線性可分SVM的算法過程作一個總結。
輸入是線性可分的m個樣本\({(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),}\),其中x爲n維特徵向量。y爲二元輸出,值爲1,或者-1.
輸出是分離超平面的參數\(w^{*}和b^{*}\)和分類決策函數。
算法過程以下:
1)構造約束優化問題
\[ \underbrace{min}_{\alpha} \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) - \sum\limits_{i=1}^{m} \alpha_i \]
\[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]
\[ \alpha_i \geq 0 \; i=1,2,...m \]
2)用SMO算法求出上式最小時對應的\(\alpha\)向量的值\(\alpha^{*}\)向量.
3) 計算\(w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i\)
4) 找出全部的S個支持向量,即知足\(\alpha_s >; 0對應的樣本(x_s,y_s)\),經過 \(y_s(\sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s+b) = 1\),計算出每一個支持向量\((x_x, y_s)\)對應的\(b_s^{*}\),計算出這些\(b_s^{*} = y_s - \sum\limits_{i=1}^{s}\alpha_iy_ix_i^Tx_s\). 全部的\(b_s^{*}\)對應的平均值即爲最終的\(b^{*} = \frac{1}{S}\sum\limits_{i=1}^{S}b_s^{*}\)
這樣最終的分類超平面爲:$w^{} \bullet x + b^{} = 0 \(,最終的分類決策函數爲:\)f(x) = sign(w^{} \bullet x + b^{})$
線性可分SVM的學習方法對於非線性的數據集是沒有辦法使用的, 有時候不能線性可分的緣由是線性數據集裏面多了少許的異常點,因爲這些異常點致使了數據集不能線性可分, 那麼怎麼能夠處理這些異常點使數據集依然能夠用線性可分的思想呢? 咱們在下一節的線性SVM的軟間隔最大化裏繼續講。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: 微信:nickchen121)