支持向量機是一個比較經典分類算法,這幾天死磕了一下支持向量機,手推了一下相應的算法,特此做一個筆記。
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}\).