機器學習模型之支持向量機(svm)


支持向量機是一個比較經典分類算法,這幾天死磕了一下支持向量機,手推了一下相應的算法,特此做一個筆記。

1、線性可分SVM

線性可分的支持向量機就是給定相應的數據集,這個數據集可以用一個超平面,將正例和負例進行分類。且這個超平面儘可能遠的分割正例和負例,如下圖所示。

如果我們能找到一個超平面,假定是\(wx+b=0\) ,然後我們外層套一個函數\(f(x)=sign(wx+b)\),即

\[ f(x) = \left \{ \begin{array}{**lr**} +1, \; if x >= 0 & \\ -1, \; if x < 0 \end{array} \right. \]

也就是說,如果我們算出了\(w,b\)這兩個變量,那麼我們直接將未知的數據扔到\(wx+b\)裏,如果這個值大於等於0,可以歸爲+1類,如果值小於0,可以歸爲-1類。

那麼,根據前面的講述,我們的問題就是如何求出參數\(w,b\)了,這裏,我們設定任意一個數據\((x_{i},y_{i})\)到這條超平面的距離爲

\[ \gamma_{i} = \frac {|wx_{i} + b| } {\left\|w\right\|_2} \]

上述是點到直線的距離公式,由於分子是帶有絕對值的,後續優化會比較的麻煩,所以我們想辦法,將絕對值符號去掉,如何去掉呢?我們可以利用\(y_{i}\)這個值,如果\(wx_{i} + b\)爲正,那麼\(y_{i}(wx_{i} + b)\)爲正,同樣,如果\(wx_{i} + b\)爲負,那麼\(y_{i}(wx_{i} + b)\)也爲正,所以,我們可以用\(y_{i}(wx_{i} + b)\)來代替\(|wx_{i} + b|\),重新更新一下

\[ \gamma_{i} = \frac { y_{i}(wx_{i} + b) } {\left\|w\right\|_2} \\ 令y_{i}(wx_{i} + b) = \tilde{\gamma_{i}} \; 則原式等於 \\ \gamma_{i} = \frac { \tilde{\gamma_{i}} } {\left\|w\right\|_2} \]

其中\(\gamma_{i}\)稱爲幾何距離,\(\tilde{\gamma_{i}}\)稱爲函數距離。由於我們要最大化數據集最近的點到直線的距離,所以,我們期望最近的點到直線的距離最大,那我們定義最近的點爲

\[ \gamma = \min_{i=1,2...n} \gamma_{i} \]

這樣,我們最大化這個\(\gamma\)就可以了,這裏,我們假定\(\gamma\)所對應的點的函數間隔爲1,即該點\(y_{i}(wx_{i} + b = 1\),這個點可以隨便定,因爲滿足這個超平面的的直線方程\(wx + b = 0\)有無數個,因爲我們同時增大\(w,b\),這個直線沒有變,所以我們這裏假定這個值爲1,主要是爲了方便優化。這裏也可以這樣理解,我們可以設定不同的值,比如設定爲0.5,那麼我們最後得到的\(w,b\)也變爲之前的一半,所以這裏定爲幾都沒有影響。

所以,如果我們的優化方式可以這樣寫

\[ \max \frac{\tilde{\gamma} }{ \left\|w\right\|_2 } \\ s.t \; y_{i}(wx_{i} + b >= \tilde{\gamma} \; i=1,2,3....n \]

如上討論,我們假定\(\tilde{\gamma} = 1\),所以上述式子轉化爲

\[ \max \frac{ 1 }{ \left\|w\right\|_2 } \\ s.t \; y_{i}(wx_{i} + b >= 1 \; i=1,2,3....n \]

進而,我們將求最大變換爲求最小

\[ \min \frac{ 1 }{ 2} {\left\|w\right\|_2}^2 \\ s.t \; y_{i}(wx_{i} + b >= 1 \; i=1,2,3....n \tag{1} \]

這樣,我們的優化條件就寫完了,我們的目的是得到上述式子的\(w,b\)的值,那怎麼求呢?由於式子(1)是一個凸優化問題,則可以引入拉格朗日乘子,進行求解

\[ L(w,b,\alpha) = \frac{ 1 }{ 2} {\left\|w\right\|_2}^2 - \sum\limits_{i=1}^{N} \alpha_{i} y_{i}(w * x_{i} + b) + \sum\limits_{i=1}^{N} \alpha_{i} \]

由此,我們得到

\[ \min_{w,b} \max_{\alpha} L(w,b,\alpha) \tag{2} \]

有對偶性我們可以得到

\[ \max_{\alpha} \min_{w,b} L(w,b,\alpha) \tag{3} \]

我們令式子(2)的最優解爲\(p^{*}\),令式子(3)的最優解爲\(d^{*}\),有\(d^{*} <= p^{*}\),那什麼時候兩者相等,且原始問題的解是對偶問題的解呢?滿足:\(\frac{ 1 }{ 2} {\left\|w\right\|_2}^2\)\(1 - y_{i}(wx_{i} + b\)這兩個函數是凸函數,且存在\(w,b\),對任意的\(i\)來說,滿足\(1 - y_{i}(wx_{i} + b < 0\)。可以發現,咱們的公式滿足上述條件。所以原始問題和對偶問題的解是一樣的,則我們將原始問題轉爲對偶問題。

分別對\(w,b\)進行求導,可以得到

\[ \frac{\partial L(w,b,\alpha) }{ \partial w} = w - \sum\limits_{i=1}^{N} \alpha_{i}y_{i}x_{i} \\ \frac{\partial L(w,b,\alpha) }{ \partial b} = - \sum\limits_{i=1}^{N} \alpha_{i} y_{i} \]

令上述的求導等於0,可以得到

\[ w = \sum\limits_{i=1}^{N} \alpha_{i}y_{i}x_{i} \\ \sum\limits_{i=1}^{N} \alpha_{i} y_{i} = 0 \]

將結果帶入到\(L(w,b,\alpha)\)公式中,得到

\[ \max_{\alpha} - \frac{1}{2} \sum\limits_{i=1}^{N} \sum\limits_{j=1}^{N} \alpha_{i}\alpha_{j} y_{i}y_{j}x_{i}x_{j} + \sum\limits_{j=1}^{N} \alpha_{i} \\ 等價於 \min_{\alpha} \frac{1}{2} \sum\limits_{i=1}^{N} \sum\limits_{j=1}^{N} \alpha_{i}\alpha_{j} y_{i}y_{j}x_{i}x_{j} - \sum\limits_{j=1}^{N} \alpha_{i} \]

假如我們求解出$\alpha^{ * } = (\alpha_{1}^{ * } , \alpha_{2}^{ * }, ......\alpha_{N}^{ * }) $,(這裏求解方法見SMO算法)將結果帶入原公式,可以得到

\[ w = \sum\limits_{i=1}^{N} \alpha_{i}^{*} y_{i}x_{i} \]

既然\(w\)求解出來了,那麼\(b\)怎麼求解呢?我們可以利用KKT條件,根據KKT條件,我們得到

\[ \alpha_{i}^{*} (y_{i}(w_{i}^{*} * x_{i} + b^{*}) - 1) = 0 \\ y_{i}(w_{i}^{*} * x_{i} + b^{*}) - 1 >= 0 \\ \alpha_{i}^{*} >= 0 \\ 其中 i = 1,2,3.....N \]

由於必定存在一個\(\alpha_{i}^{*} >0\)所以針對這個$ \alpha_{i}^{*} \(可以得到\) y_{i}(w_{i}^{ * } x_{i} + b^{ * }) - 1 = 0 $,則

\[ b^{*} = y_{i} - \sum\limits_{j=1}^{N} \alpha_{j}^{*} y_{j} x_{j} x_{i} \]

至此,我們完成了第一部分的講解。

2、線性不可分SVM

以上我們介紹的是線性可分的,但是對於大部分數據來說,並不是線性可分的,會有一些異常點,如果我們把異常點也算作正常的點的話,那麼最終的模型會效果會不好。那麼對於線性不可分的數據點來說,可以加入一個鬆弛變量\(\xi\),之後我們的約束條件變成

\[ \min \frac{ 1 }{ 2} {\left\|w\right\|_2}^2 + C \sum\limits_{i=1}^{N} \xi_{i} \\ s.t \; y_{i}(wx_{i} + b >= 1 - \xi_{i} \; i=1,2,3....n \\ \; \xi_{i} >= 0 \; i=1,2,3....n \]

首先引入拉格朗日乘子,得到原始的優化問題

\[ L(w,b,\xi ,\alpha,\mu) = \frac{ 1 }{ 2} {\left\|w\right\|_2}^2 + C \sum\limits_{i=1}^{N} \xi_{i} + \sum\limits_{i=1}^{N} \alpha_{i} (1-\xi_{i}-y_{i}(wx_{i} + b)) + \sum\limits_{i=1}^{N} (- \xi_{i} \mu_{i}) \\ 原始問題是 min_{w,b,\xi} max_{\alpha,\mu} L(w,b,\xi ,\alpha,\mu) \\ 對偶問題是 max_{\alpha,\mu} min_{w,b,\xi} L(w,b,\xi ,\alpha,\mu) \]

我們首先求解\(min_{w,b,\xi} L(w,b,\xi ,\alpha,\mu)\),分別對\(w,b,\xi\)求導爲

\[ \frac {\partial L(w,b,\xi ,\alpha,\mu)}{ \partial w} = w - \sum\limits_{i=1}^{N} \alpha_{i} y_{i} x_{i} \\ \frac {\partial L(w,b,\xi ,\alpha,\mu)}{ \partial b} = - \sum\limits_{i=1}^{N} \alpha_{i} y_{i} \\ \frac {\partial L(w,b,\xi ,\alpha,\mu)}{ \partial \xi} = C - \alpha_{i} - \mu_{i} \\ \]

分別令上述各式子等於0,並將相應的結果帶入原公式,得到

\[ \min_{\alpha} frac{1}{2} \sum\limits_{i=1}^{N} \sum\limits_{j=1}^{N} \alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}x_{j} \\ s.t \sum\limits_{i=1}^{N}\alpha_{i}y_{i} = 0 \\ 0<= \alpha_{i} <= C \;\;\;\; 根據C-\alpha_{i} - \mu_{i} = 0 和 \alpha_{i} >=0 和 \mu_{i} >= 0得出 \]

\(a^{*}\)是上述問題的解,那麼我們最終得到

\[ w^{*} = \sum\limits_{i=1}^{N} \alpha_{i}^{*} y_{i} x_{i} \\ b^{*} = y_{j} - \sum\limits_{i=1}^{N} y_{i}\alpha_{i}^{*} (x_{i} * x_{j}) \]

\(w^{*}\)這裏我們就不講了,至於這個\(b^{*}\),可以知道,原求解中必然含有一個\(\alpha_{j}\),使\(0<\alpha_{i} < C\),那麼根據KKT條件,\(\alpha_{i}>0\)會使\(1-\xi_{i}^{*}-y_{i}(w^{*}x_{i} + b) = 0\)\(\alpha_{i} < C\)會得出\(\mu_{j} != 0\)\(\xi_{i} = 0\),則可以得到原公式。從數學上如何理解呢?\(\alpha_{i}>0\)表明所在的點目前是在支撐向量上,處在支撐向量上的點自然\(\xi_{i}=0\)了,因爲這裏沒有分類錯誤,所以沒有懲罰。那爲何線性不可分的解和線性可分的解一樣呢?其實,公式雖然一樣,但是求得的\(\alpha^{*}\)是不一樣的,因爲線性可分的約束條件是$a_{i} >= 0 $但是線性不可分的約束條件是\(0=<\alpha_{i} =< C\)

3、非線性SVM

對於非線性的SVM來說,我們需要將原始的x映射到高維的\(\phi (x)\),進而進行求解。這個函數我們可以自己定義,但是有一個問題是當問題比較複雜的時候,這個函數會得到維度非常大的向量,接着再和同樣維度的向量進行向量內積操作,雖然這種方法理論上是可行的,但是實際中時間耗費較長,所以提出了核技巧,就是根據一個函數,所有的計算都在低緯度進行,同樣可以達到映射到高緯度的效果。

4、SMO算法

SMO算法又叫做序列最小最優化算法,這個算法可以求解上面的\(\alpha\),下面就介紹這種算法。假設我們的數據集是非線性的數據集,則關於\(\alpha\)的優化公式如下所示

\[ \min_{\alpha} \frac {1}{2}\sum\limits_{i=1}^{N} \sum\limits_{j=1}^{N} \alpha_{i}\alpha_{j} y_{i}y_{j}K(x_{i},x_{j}) - \sum\limits_{i=1}^{N} \alpha_{i} \\ s.t ;\;\;\;\;\ \sum\limits_{i=1}^{N} y_{i}\alpha_{i} = 0 \\ 0 <= \alpha_{i} <= C ;\;\;\;\;\ i=1,2,3,.....N \]

其中,優化的思想是這樣的,首先,我們選擇兩個變量\(\alpha_{1},\alpha_{2}\),然後固定其他的\(\alpha\),只對這兩個變量進行優化。這種優化思想之所以可以成立,其思想是這樣的,假如所有的\(\alpha\)都符合相應的KKT條件,那麼這一組解就可以作爲結果輸出,否則,我們必然可以找到兩個\(\alpha\),固定這兩個\(\alpha\)使這兩個變量構成的二次規劃問題更接近原始問題的解。這裏我有一個疑問,如果我們只選擇一個不符合要求的a可以嗎?。所以,我們的問題有兩個:1、如何選擇這兩個\(\alpha\),2、選擇了之後如何進行優化求解。首先我們先來解決第二個問題,假設我們得到了兩個變量\(\alpha_{1},\alpha_{2}\),那麼優化這兩個變量,固定其他變量,可以得到

\[ L(\alpha_{1},\alpha_{2}) = \frac{1}{2} \alpha_{1}^{2}K_{11} + \frac{1}{2} \alpha_{2}^{2}K_{22} + \alpha_{1}\alpha_{2}y_{1}y_{2}K_{12} - \alpha_{1} - \alpha_{2} + \alpha_{1}y_{1}v_{1} + \alpha_{2}y_{2}v_{2} \\ 其中K_{ij} = K(x_{i},x_{j}) \\ v_{1} = \sum\limits_{i=3}^{N}\alpha_{i}y_{i}k_{i1} \\ v_{2} = \sum\limits_{i=3}^{N}\alpha_{i}y_{i}k_{i2} \\ 這裏的限制條件是\alpha_{1}y_{1} + \alpha_{2}y_{2} = - \sum\limits_{i=3}^{N}\alpha_{i}y_{i} = S \\ 0 <= \alpha_{i} <= C ;\;\;\;\;\ i=1,2,3,.....N \]

這裏,我們可以將\(\alpha_{1}\)\(\alpha_{2}\)表示,進而將\(\alpha_{1}\)帶入,變成只有一個變量\(\alpha_{2}\)的公式,進而對原公式進行求導,等於0後,得到\(\alpha_{2}\)的解,進而得到\(\alpha_{1}\)的解,進而進行更新。根據公式我們得到\(\alpha_{1} = (S - \alpha_{2} y_{2})y_{1}\),因爲\(y_{1} * y_{1} = 1\)。帶入公式得到

\[ L(\alpha_{2}) = \frac {1}{2} (S - \alpha_{2}y_{2}) ^ {2} K_{11} + \frac{1}{2} \alpha_{2}^{2}K_{22} + y_{2}K_{12} (S - \alpha_{2} y_{2})\alpha_{2} - (S - \alpha_{2}y_{2})y_{1} - \alpha_{2} + v_{1}(S - \alpha_{2}y_{2}) + y_{2}v_{2} \alpha_{2} \]

\(\alpha_{2}\)求導,得到

\[ \frac {\partial L(\alpha_{2})} {\alpha_{2}} = K_{11}\alpha_{2} + K_{22}\alpha_{2} - 2 K_{12}\alpha_{2} + K_{11}Sy_{2} + K_{12}Sy_{2} + y_{1}y_{2} - 1 -v_{1}y_{2} + y_{2}v_{2} \]

令上述式子等於0,可以得到

\[ \alpha_{2} = \frac {y_{2} (K_{11}S - K_{12}S - y_{1} + v_{1} - v_{2} + y_{2})} {K_{11} + K_{22} - 2K_{12}} \]

這裏我們就得到了\(\alpha_{2}\)了,但是這個式子有些長,我們對他進行一些優化,首先,我們令

\[ E_{i} = g(x_{i}) - y_{i} = ( \sum\limits_{j=1}^{N} \alpha_{j}y_{j}K(x_{j},x_{i}) + b) - y_{i} \]

上述式子的含義是預測的結果和現實結果的差值。那麼\(v_{i}\)則可以表示爲

\[ v_{i} = g(x_{i}) - \sum\limits_{j=1}^{2} \alpha_{j}y_{j}K(x_{j},x_{i}) - b \]

則結果爲

\[ \alpha_{2} = \frac { y_{2} [ y_{2} - y_{1} + K_{11}S - K_{12}S + (g(x_{1}) - \sum\limits_{j=1}^{2} \alpha_{j}y_{j}K(x_{j},x_{1}) - b) - (g(x_{2}) - \sum\limits_{j=1}^{2} \alpha_{j}y_{j}K(x_{j},x_{2}) - b) ] } {K_{11} + K_{22} - 2K_{12}} \]

\(S = \alpha_{1}^{old} y_{1} + \alpha_{2}^{old}y_{2}\)帶入上式,得到

\[ \alpha_{2}^{new,unc} = \alpha_{2}^{old} + \frac {y_{2} (E_{1} - E_{2}) } { K_{11} + K_{22} - 2K_{12} } \]

這個是未經剪輯的\(\alpha_{2}\)的結果,\(\alpha_{2}^{new,unc}\)還有一些限制條件,這裏根據公式

\[ S = \alpha_{1}y_{1} + \alpha_{2}y_{2} \\ 0 <= \alpha_{i} <= C \]

可以得到\(\alpha\)的最大值和最小值,經過化簡得到

\[ 0 <= -y_{1}y_{2} \alpha_{2} + Sy_{2} <= C \\ -Sy_{2} <= \alpha_{2} <= C - Sy_{2} ;\;\;\;\;\ 當y_{1} 和y_{2}符號不同時 \\ Sy_{2} - C <= \alpha_{2} <= Sy_{2} ;\;\;\;\;\ 當y_{1} 和y_{2}符號相同時 \]

\[ \max {-Sy_{2}, Sy_{2} - C, 0} <= \alpha_{2} <= \min{C - Sy_{2}, Sy_{2} , C} \]

有了這個式子的約束,我們就能得到最終的結果\(\alpha_{2}\),而\(\alpha_{1}\)可以根據公式\(S=\alpha_{2}y_{2} + \alpha_{1}y_{1}\).

我們還有一個問題是如何選擇這兩個\(\alpha\),這裏可以根據這樣的標準,第一個\(\alpha_{1}\)可以根據如果其不滿足KKT條件,第二個\(\alpha_{2}\)可以根據約束條件獲得,更具體來說,\(\alpha_{1}\)的選擇方法是

\[ g(x_{i}) * y_{i} >= 1 時, \alpha_{i} > 0是不滿足的,理論上應該\alpha_{i} = 0 \\ g(x_{i}) * y_{i} = 1 時, \alpha_{i} = 0 或者\alpha_{i} = C是不滿足的,理論上是 0 < \alpha_{i} < C \\ g(x_{i}) * y_{i} <= 1 時, \alpha_{i} < C 是不滿足的,理論上是\alpha_{i} = C \]

根據這些不滿足條件的情況,選擇第一個\(\alpha_{1}\),對於第二個\(\alpha_{2}\)可以通過\(|E_{1} - E{2}|\)得到最大這個式子值的\(\alpha_{2}\)得到第二個\(\alpha_{2}\).

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