支持向量機原理(五)線性支持迴歸post
在SVM的前三篇裏,咱們優化的目標函數最終都是一個關於\(\alpha\)向量的函數。而怎麼極小化這個函數,求出對應的\(\alpha\)向量,進而求出分離超平面咱們沒有講。本篇就對優化這個關於\(\alpha\)向量的函數的SMO算法作一個總結。優化
咱們首先回顧下咱們的優化目標函數:
\[ \underbrace{ min }_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jK(x_i,x_j) - \sum\limits_{i=1}^{m}\alpha_i \]spa
\[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]htm
\[ 0 \leq \alpha_i \leq C \]blog
咱們的解要知足的KKT條件的對偶互補條件爲:
\[ \alpha_{i}^{*}(y_i(w^Tx_i + b) - 1 + \xi_i^{*}) = 0 \]內存
根據這個KKT條件的對偶互補條件,咱們有:
\[ \alpha_{i}^{*} = 0 \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b) \geq 1 \]
\[ 0 <;\alpha_{i}^{*} <; C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b) = 1 \]
\[ \alpha_{i}^{*}= C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b) \leq 1 \]
因爲\(w^{*} = \sum\limits_{j=1}^{m}\alpha_j^{*}y_j\phi(x_j)\),咱們令\(g(x) = w^{*} \bullet \phi(x) + b =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*}\),則有:
\[ \alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1 \]
\[ 0 <; \alpha_{i}^{*} <; C \Rightarrow y_ig(x_i) = 1 \]
\[ \alpha_{i}^{*}= C \Rightarrow y_ig(x_i) \leq 1 \]
上面這個優化式子比較複雜,裏面有m個變量組成的向量\(\alpha\)須要在目標函數極小化的時候求出。直接優化時很難的。SMO算法則採用了一種啓發式的方法。它每次只優化兩個變量,將其餘的變量都視爲常數。因爲\(\sum\limits_{i=1}^{m}\alpha_iy_i = 0\).假如將\(\alpha_3, \alpha_4, ..., \alpha_m\) 固定,那麼\(\alpha_1, \alpha_2\)之間的關係也肯定了。這樣SMO算法將一個複雜的優化算法轉化爲一個比較簡單的兩變量優化問題。
爲了後面表示方便,咱們定義\(K_{ij} = \phi(x_i) \bullet \phi(x_j)\)
因爲\(\alpha_3, \alpha_4, ..., \alpha_m\)都成了常量,全部的常量咱們都從目標函數去除,這樣咱們上一節的目標優化函數變成下式:
\[ \;\underbrace{ min }_{\alpha_1, \alpha_1} \frac{1}{2}K_{11}\alpha_1^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_1y_2K_{12}\alpha_1 \alpha_2 -(\alpha_1 + \alpha_2) +y_1\alpha_1\sum\limits_{i=3}^{m}y_i\alpha_iK_{i1} + y_2\alpha_2\sum\limits_{i=3}^{m}y_i\alpha_iK_{i2} \]
\[ s.t. \;\;\alpha_1y_1 + \alpha_2y_2 = -\sum\limits_{i=3}^{m}y_i\alpha_i = \varsigma \]
\[ 0 \leq \alpha_i \leq C \;\; i =1,2 \]
爲了求解上面含有這兩個變量的目標優化問題,咱們首先分析約束條件,全部的\(\alpha_1, \alpha_2\)都要知足約束條件,而後在約束條件下求最小。
根據上面的約束條件\(\alpha_1y_1 + \alpha_2y_2 = \varsigma\;\;0 \leq \alpha_i \leq C \;\; i =1,2\),又因爲\(y_1,y_2\)均只能取值1或者-1, 這樣\(\alpha_1, \alpha_2\)在[0,C]和[0,C]造成的盒子裏面,而且二者的關係直線的斜率只能爲1或者-1,也就是說\(\alpha_1, \alpha_2\)的關係直線平行於[0,C]和[0,C]造成的盒子的對角線,以下圖所示:
因爲\(\alpha_1, \alpha_2\)的關係被限制在盒子裏的一條線段上,因此兩變量的優化問題實際上僅僅是一個變量的優化問題。不妨咱們假設最終是\(\alpha_2\)的優化問題。因爲咱們採用的是啓發式的迭代法,假設咱們上一輪迭代獲得的解是\(\alpha_1^{old}, \alpha_2^{old}\),假設沿着約束方向\(\alpha_2\)未經剪輯的解是\(\alpha_2^{new,unc}\).本輪迭代完成後的解爲\(\alpha_1^{new}, \alpha_2^{new}\)
因爲\(\alpha_2^{new}\)必須知足上圖中的線段約束。假設L和H分別是上圖中\(\alpha_2^{new}\)所在的線段的邊界。那麼很顯然咱們有:
\[ L \leq \alpha_2^{new} \leq H \]
而對於L和H,咱們也有限制條件若是是上面左圖中的狀況,則
\[ L = max(0, \alpha_2^{old}-\alpha_1^{old}) \;\;\;H = min(C, C+\alpha_2^{old}-\alpha_1^{old}) \]
若是是上面右圖中的狀況,咱們有:
\[ L = max(0, \alpha_2^{old}+\alpha_1^{old}-C) \;\;\; H = min(C, \alpha_2^{old}+\alpha_1^{old}) \]
也就是說,假如咱們經過求導獲得的\(\alpha_2^{new,unc}\),則最終的\(\alpha_2^{new}\)應該爲:
\[ \alpha_2^{new}= \begin{cases} H& { \alpha_2^{new,unc} >; H}\\ \alpha_2^{new,unc}& {L \leq \alpha_2^{new,unc} \leq H}\\ L& {\alpha_2^{new,unc} <; L} \end{cases} \]
那麼如何求出\(\alpha_2^{new,unc}\)呢?很簡單,咱們只須要將目標函數對\(\alpha_2\)求偏導數便可。
首先咱們整理下咱們的目標函數。
爲了簡化敘述,咱們令
\[ E_i = g(x_i)-y_i = \sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x_i, x_j)+ b - y_i \]
,
其中\(g(x)\)就是咱們在第一節裏面的提到的
\[ g(x) = w^{*} \bullet \phi(x) + b =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*} \]
咱們令
\[ v_i = \sum\limits_{j=3}^{m}y_j\alpha_jK(x_i,x_j) = g(x_i) - \sum\limits_{j=1}^{2}y_j\alpha_jK(x_i,x_j) -b \]
這樣咱們的優化目標函數進一步簡化爲:
\[ W(\alpha_1,\alpha_2) = \frac{1}{2}K_{11}\alpha_1^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_1y_2K_{12}\alpha_1 \alpha_2 -(\alpha_1 + \alpha_2) +y_1\alpha_1v_1 + y_2\alpha_2v_2 \]
因爲\(\alpha_1y_1 + \alpha_2y_2 = \varsigma \),而且\(y_i^2 = 1\),能夠獲得\(\alpha_1用 \alpha_2\)表達的式子爲:
\[ \alpha_1 = y_1(\varsigma - \alpha_2y_2) \]
將上式帶入咱們的目標優化函數,就能夠消除\(\alpha_1\),獲得僅僅包含\(\alpha_2\)的式子。
\[ W(\alpha_2) = \frac{1}{2}K_{11}(\varsigma - \alpha_2y_2)^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_2K_{12}(\varsigma - \alpha_2y_2) \alpha_2 - (\varsigma - \alpha_2y_2)y_1 - \alpha_2 +(\varsigma - \alpha_2y_2)v_1 + y_2\alpha_2v_2 \]
忙了半天,咱們終於能夠開始求\(\alpha_2^{new,unc}\)了,如今咱們開始經過求偏導數來獲得\(\alpha_2^{new,unc}\)。
\[ \frac{\partial W}{\partial \alpha_2} = K_{11}\alpha_2 + K_{22}\alpha_2 -2K_{12}\alpha_2 - K_{11}\varsigma y_2 + K_{12}\varsigma y_2 +y_1y_2 -1 -v_1y_2 +y_2v_2 = 0 \]
整理上式有:
\[ (K_{11} +K_{22}-2K_{12})\alpha_2 = y_2(y_2-y_1 + \varsigma K_{11} - \varsigma K_{12} + v_1 - v_2) \]
\[ = y_2(y_2-y_1 + \varsigma K_{11} - \varsigma K_{12} + (g(x_1) - \sum\limits_{j=1}^{2}y_j\alpha_jK_{1j} -b ) -(g(x_2) - \sum\limits_{j=1}^{2}y_j\alpha_jK_{2j} -b)) \]
將$ \varsigma = \alpha_1y_1 + \alpha_2y_2 $帶入上式,咱們有:
\[ (K_{11} +K_{22}-2K_{12})\alpha_2^{new,unc} = y_2((K_{11} +K_{22}-2K_{12})\alpha_2^{old}y_2 +y_2-y_1 +g(x_1) - g(x_2)) \]
\[ \;\;\;\; = (K_{11} +K_{22}-2K_{12}) \alpha_2^{old} + y_2(E_1-E_2) \]
咱們終於獲得了\(\alpha_2^{new,unc}\)的表達式:
\[ \alpha_2^{new,unc} = \alpha_2^{old} + \frac{y_2(E_1-E_2)}{K_{11} +K_{22}-2K_{12})} \]
利用上面講到的\(\alpha_2^{new,unc}\)和\(\alpha_2^{new}\)的關係式,咱們就能夠獲得咱們新的\(\alpha_2^{new}\)了。利用\(\alpha_2^{new}\)和\(\alpha_1^{new}\)的線性關係,咱們也能夠獲得新的\(\alpha_1^{new}\)。
SMO算法須要選擇合適的兩個變量作迭代,其他的變量作常量來進行優化,那麼怎麼選擇這兩個變量呢?
SMO算法稱選擇第一個變量爲外層循環,這個變量須要選擇在訓練集中違反KKT條件最嚴重的樣本點。對於每一個樣本點,要知足的KKT條件咱們在第一節已經講到了:
\[ \alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1 \]
\[ 0 <; \alpha_{i}^{*} <; C \Rightarrow y_ig(x_i) =1 \]
\[ \alpha_{i}^{*}= C \Rightarrow y_ig(x_i) \leq 1 \]
通常來講,咱們首先選擇違反$0 <; \alpha_{i}^{} <; C \Rightarrow y_ig(x_i) =1 \(這個條件的點。若是這些支持向量都知足KKT條件,再選擇違反\)\alpha_{i}^{} = 0 \Rightarrow y_ig(x_i) \geq 1 $ 和 \(\alpha_{i}^{*}= C \Rightarrow y_ig(x_i) \leq 1\)的點。
SMO算法稱選擇第二一個變量爲內層循環,假設咱們在外層循環已經找到了\(\alpha_1\), 第二個變量\(\alpha_2\)的選擇標準是讓\(|E1-E2|\)有足夠大的變化。因爲\(\alpha_1\)定了的時候,\(E_1\)也肯定了,因此要想\(|E1-E2|\)最大,只須要在\(E_1\)爲正時,選擇最小的\(E_i\)做爲\(E_2\), 在\(E_1\)爲負時,選擇最大的\(E_i\)做爲\(E_2\),能夠將全部的\(E_i\)保存下來加快迭代。
若是內存循環找到的點不能讓目標函數有足夠的降低, 能夠採用遍歷支持向量點來作\(\alpha_2\),直到目標函數有足夠的降低, 若是全部的支持向量作\(\alpha_2\)都不能讓目標函數有足夠的降低,能夠跳出循環,從新選擇\(\alpha_1\)
在每次完成兩個變量的優化以後,須要從新計算閾值b。當\(0 <; \alpha_{1}^{new} <; C\)時,咱們有
\[ y_1 - \sum\limits_{i=1}^{m}\alpha_iy_iK_{i1} -b_1 = 0 \]
因而新的\(b_1^{new}\)爲:
\[ b_1^{new} = y_1 - \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1} - \alpha_{1}^{new}y_1K_{11} - \alpha_{2}^{new}y_2K_{21} \]
計算出\(E_1\)爲:
\[ E_1 = g(x_1) - y_1 = \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1} + \alpha_{1}^{old}y_1K_{11} + \alpha_{2}^{old}y_2K_{21} + b^{old} -y_1 \]
能夠看到上兩式都有\(y_1 - \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1}\),所以能夠將\(b_1^{new}\)用\(E_1\)表示爲:
\[ b_1^{new} = -E_1 -y_1K_{11}(\alpha_{1}^{new} - \alpha_{1}^{old}) -y_2K_{21}(\alpha_{2}^{new} - \alpha_{2}^{old}) + b^{old} \]
一樣的,若是\(0 <; \alpha_{2}^{new} <; C\), 那麼有:
\[ b_2^{new} = -E_2 -y_1K_{12}(\alpha_{1}^{new} - \alpha_{1}^{old}) -y_2K_{22}(\alpha_{2}^{new} - \alpha_{2}^{old}) + b^{old} \]
最終的\(b^{new}\)爲:
\[ b^{new} = \frac{b_1^{new} + b_2^{new}}{2} \]
獲得了\(b^{new}\)咱們須要更新\(E_i\):
\[ E_i = \sum\limits_{S}y_j\alpha_jK(x_i,x_j) + b^{new} -y_i \]
其中,S是全部支持向量\(x_j\)的集合。
好了,SMO算法基本講完了,咱們來概括下SMO算法。
輸入是m個樣本\({(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),}\),其中x爲n維特徵向量。y爲二元輸出,值爲1,或者-1.精度e。
輸出是近似解\(\alpha\)
1)取初值\(\alpha^{0} = 0, k =0\)
2)按照4.1節的方法選擇\(\alpha_1^k\),接着按照4.2節的方法選擇\(\alpha_2^k\),求出新的\(\alpha_2^{new,unc}\)。
\[ \alpha_2^{new,unc} = \alpha_2^{k} + \frac{y_2(E_1-E_2)}{K_{11} +K_{22}-2K_{12})} \]
3)按照下式求出\(\alpha_2^{k+1}\)
\[ \alpha_2^{k+1}= \begin{cases} H& {L \leq \alpha_2^{new,unc} >; H}\\ \alpha_2^{new,unc}& {L \leq \alpha_2^{new,unc} \leq H}\\ L& {\alpha_2^{new,unc} <; L} \end{cases} \]
4)利用\(\alpha_2^{k+1}\)和\(\alpha_1^{k+1}\)的關係求出\(\alpha_1^{k+1}\)
5)按照4.3節的方法計算\(b^{k+1}\)和\(E_i\)
6)在精度e範圍內檢查是否知足以下的終止條件:
\[ \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]
\[ 0 \leq \alpha_i \leq C, i =1,2...m \]
\[ \alpha_{i}^{k+1} = 0 \Rightarrow y_ig(x_i) \geq 1 \]
\[ 0 <;\alpha_{i}^{k+1} <; C \Rightarrow y_ig(x_i) = 1 \]
\[ \alpha_{i}^{k+1}= C \Rightarrow y_ig(x_i) \leq 1 \]
7)若是知足則結束,返回\(\alpha^{k+1}\),不然轉到步驟2)。
SMO算法終於寫完了,這塊在之前學的時候是很是痛苦的,不過弄明白就豁然開朗了。但願你們也是同樣。寫完這一篇, SVM系列就只剩下支持向量迴歸了,勝利在望!
(歡迎轉載,轉載請註明出處。歡迎溝通交流: 微信:nickchen121)