代碼請移步:SVM-SMO —— 代碼

線性可分

首先對於線性可分的數據必然存在一個分離超平面 w^*cdot x+b^*=0 能夠把數據完全正確的分開,我們的目標就是要求該分離超平面的形式。前面的感知器通過最小化分錯的點到超平面的距離

egin{split} & underset{w,b}{min} - sum_{x_iin M}frac{y_i(wcdot x_i+b)}{|w|} \ = & underset{w,b}{min} -sum_{x_iin M}y_i(wcdot x_i + b)  end{split} M 為所有被分離超平面 wcdot x+b=0 錯誤分類的點的集合。上式中個人感覺因為上面的式子不好算所以用了下面的式子來代替,然後用迭代的方法更新 w,b ,但這時得到的解不是唯一的,有無窮多個,線性可分的SVM用間隔最大化來求解分離超平面,相當於在原始感知器的基礎上加了一個間隔最大化的條件,使解是唯一的

對於超平面 (w,b) 樣本點 (x_i,y_i) 的函數間隔為

hat{gamma}_i = y_i(wcdot x_i + b) 但對於函數間隔來說,當 (w,b) 等比例變化 w=lambda w,b=lambda b 時表示的該超平面不變,但函數間隔 hat{gamma} = lambda gamma 變為原來的 gamma 倍,故不能直接用函數間隔來表示

現有間隔表示幾何上點 (x_i,y_i) 到超平面 wcdot x +b=0 的距離

egin{split} gamma_i & = frac{y_i(wcdot x_i + b)}{|w|}  \     & = frac{hat{gamma_i}}{|w|} end{split} 相當於在函數間隔上對超平面加了一個約束 |w|=1

由此SVM表示為了最大化樣本點中最小的幾何間隔

egin{split} & underset{w,b}{max} left{ underset{i}{min}frac{y_i(wcdot x_i+b)}{|w|} 
ight} \ = & underset{w,b}{max}left{ frac{1}{|w|}underset{i}{min} y_i(wcdot x_i + b) 
ight}  = & underset{w,b}{max}left{ underset{i}{min} gamma_i 
ight} \ = & underset{w,b}{max}left{frac{1}{|w|} underset{i}{min} hat{gamma}_i 
ight} end{split} 由於當 w,b 成比例的變化 w = lambda w, b = lambda b 時函數距離 hat{gamma}_i = lambda hat{gamma}_i 也成比例變化,但該超平面 wcdot x + b = 0 不變,幾何間隔 gamma_i 也不變,故此時的函數間隔 hat{gamma}_i 可取任意值,現取 underset{i}{min}hat{gamma}_i=1 ,也就是說樣本點到超平面的最小函數距離設為 1 ,故此時的優化問題變為 egin{split}  & underset{w,b}{max} frac{1}{|w|} \  & s.t. quad y_i(wcdot x_i + b) geq 1 quad 	ext{//保證最小函數間隔為1} end{split} 該優化問題等價於

 egin{split}  & underset{w,b}{min} frac{1}{2}|w|^2 \  & s.t. quad y_i(wcdot x_i + b) geq 1 end{split} 這樣就消去了上面的最小化間隔形式中的 min ,轉變成了一個單純的二次優化問題,該優化問題存在不等式約束故需要用KKT條件,現插播一下KKT條件

KKT條件 —— 鬆弛變數法

KKT條件使用鬆弛變數法推出來的,現有優化問題

egin{split}  underset{x}{min}& f(x) \ &s.t. left{egin{matrix}         h_i(x) = 0 & i = 1,cdots,N_h \          g_i(x) le 0 & i = 1,cdots, N_g      end{matrix}
ight. end{split} 用鬆弛變數使不等式約束轉變為等式約束 g_i(x) + a_i^2 = 0

然後根據拉格朗日乘子法得到

egin{split} L(x, alpha, eta, a) = f(x) + sum_{i=1}^{N_h}alpha_ih_i(x) + sum_{i=1}^{N_g}eta_i(g_i(x)+a_i^2) end{split} 然後求偏導 egin{split} frac{partial L}{partial x} & = 
abla f + sum_{i=1}^{N_h}alpha_i
abla h_i + sum_{i=1}^{N_g}eta_i 
abla_i g_i = 0 \ frac{partial L}{partial a_i} & = 2eta_ia_i = 0 end{split} 得到 eta_ia_i = 0 ,現在可分為兩種情況

  • eta_i = 0 :此時不等式約束 g_i(x) le0 不起作用
  • a_i = 0,eta_i>0 :此時不等式約束退化為等式約束 g_i(x) = 0

所以等價於 eta_i=0 或者 g_i(x)=0 也就消去了鬆弛變數 eta_ig_i(x)=0 故此時有

egin{split} L(x,alpha,eta) & = f(x) + sum_{i=1}^{N_h}alpha_ih_i(x) + sum_{i=1}^{N_g}eta_ig_i(x) end{split} 並且對應的KKT條件為

 left{egin{split}  & 
abla f + sum_{i=1}^{N_h} alpha_i
abla h_i  + sum_{i=1}^{N_g}eta_ig_i = 0 \   & h_i(x) = 0 \  & g_i(x) le 0 \ & eta_i g_i(x) = 0 \ & alpha_i geq 0 \  & eta_i geq 0 end{split}
ight.

對偶

由上一節可以得到

L(w,b,alpha) = frac{1}{2}|w|^2 - sum_{i=1}^Nalpha_iy_i(wcdot x_i+b) + sum_{i=1}^N alpha_i 並且對應的KKT條件為

left{egin{split}  & frac{partial L}{partial w} =  w - sum_{i=1}^N alpha_iy_ix_i = 0 \  & frac{partial L}{partial b} = - sum_{i=1}^N alpha_iy_i  = 0 \  & alpha_i(y_i(wcdot x_i+b) - 1) = 0 \  & y_i(wcdot x_i +b) geq 1 \  & alpha_i geq 0  end{split}
ight. 故現在優化問題變為一個極小極大問題

underset{w,b}{min}underset{alpha}{max}L(w,b,alpha) 其與一個極大極小問題對應

underset{alpha}{max}underset{w,b}{min} L(w,b,alpha) 由上面的KKT條件可以消去裡面的 w = sum_{i=1}^N alpha_iy_ix_i,b

egin{split} L(alpha) & = frac{1}{2}|w|^2 - sum_{i=1}^N alpha_iy_i(wcdot x_i + b) + sum_{i=1}^N alpha_i \     & = frac{1}{2}sum_{i=1}^Nsum_{j=1}^N alpha_ialpha_jy_iy_j(x_icdot x_j) - sum_{i=1}^Nsum_{j=1}^N alpha_ialpha_jy_iy_j(x_icdot x_j) - bsum_{i=1}^Nalpha_iy_i + sum_{i=1}^N alpha_i \     & = -frac{1}{2}sum_{i=1}^Nsum_{j=1}^Nalpha_ialpha_jy_iy_j(x_icdot x_j) + sum_{i=1}^Nalpha_i end{split} 故現在優化問題變為

egin{split} & underset{alpha}{max} L(alpha) =  \ & underset{alpha}{min}-L(alpha) = \ & underset{alpha}{min} frac{1}{2} sum_{i=1}^Nsum_{j=1}^Nalpha_ialpha_jy_iy_j(x_icdot x_j) - sum_{i=1}^N alpha_i \ & s.t. left{egin{split}         & sum_{i=1}^N alpha_iy_i = 0 \          & alpha_i geq 0     end{split}
ight. end{split}

支持向量

關於支持向量的圖示網上有很多這裡就不再畫一個了,只說下在優化的角度支持向量的解釋

支持向量是那些在分割帶邊緣的點,也即滿足最小化間隔的點,在上述的優化問題中就是滿足 y_i(wcdot x_i + b) = 1 的點,支持向量有一個性質,SVM的解只與支持向量有關,而非支持向量的變化不改變SVM求解的超平面,再由前面的KKT條件的 eta_i g_i(x)=0 得到,支持向量需滿足 alpha_i>0 ,這時改點構成的約束 y_i(wcdot x_i +b)geq 1 起作用,並且該約束退化為等式約束 y_i(wcdot x_i +b) = 1 也同樣表示了在分隔帶邊緣的點,而其他點滿足約束 y_i(wcdot x_i +b) > 1alpha_i=0 ,此時對應的約束失效,同樣表示為非支持變數的變化不影響最終優化的解

線性可分SVM學習機

解上面的對偶優化問題可以得到最優的 alpha^* ,要得到最終的學習機的形式需要得到該超平面,由上面可以得到 w^* = sum_{i=1}^N alpha_i^*y_i x_i ,想要得到具體的學習機的形式還需要知道 b 的值,這裡用的是支持向量的性質,由上面得到支持向量 (x_j,y_j) 滿足等式 y_j(w^*cdot x_j + b^*) = 1 得到

egin{split} b^* & = frac{1}{y_j} - w^* cdot x_j \     & = y_j - sum_{i=1}^N alpha_i^*y_i(x_i cdot x_j) quad 	ext{//} y_j^2=1 end{split} 則分離超平面為

sum_{i=1}^N alpha_i^*y_i(x_i cdot x) + b^* = 0 並且對應的決策函數為

f(x) = mathrm{sign}left{ sum_{i=1}^Nalpha_i^*y_i(x_icdot x) + b^* 
ight}

可以看到不管是對偶優化,還是分割平面和最終的決策函數都只與樣本的 x 的內積有關

線性不可分 與 軟間隔

SVM為了應對線性不可分的情況採取了一種軟間隔策略,首先看下SVM如何看待線性不可分,其把線性不可分的數據看成了在線性可分基礎上的一些少量離群點,線性可分的形式在最小間隔下所有的點需要滿足 y_i(wcdot x_i + b) geq 1 ,由於有少量離群點的存在,該間隔用鬆弛變數法成了一個軟間隔的形式 y_i(wcdot x_i + b)geq 1 - xi_i

xi_i 可以看作是每一個點對應的與最小間隔邊界的誤分類的函數距離,而反過來 xi_i 的存在也模糊化了該最小間隔的邊界,此時優化目標函數加了一個該誤分類距離的懲罰項,讓該誤分類距離盡量小,現在優化目標變為

underset{w,b,xi}{min}frac{1}{2}|w|^2 + Csum_{i=1}^N xi_i \ s.t.left{egin{split}             & y_i(wcdot x_i + b) geq 1-xi_i \             & xi_i geq 0         end{split}
ight.

這裡 C 表示對誤分類距離的懲罰係數

由拉格朗日乘子法得

L(w,b,xi,alpha,eta) = frac{1}{2}|w|^2+Csum_{i=1}^Nxi_i - sum_{i=1}^N alpha_iy_i(wcdot x_i + b) +sum_{i=1}^N alpha_i - sum_{i=1}^N alpha_ixi_i - sum_{i=1}^N eta_ixi_i 然後求偏導得

 egin{split} frac{partial L}{partial w} & = w - sum_{i=1}^N alpha_iy_ix_i = 0 \ frac{partial L}{partial b} & = - sum_{i=1}^N alpha_iy_i = 0 \ frac{partial L}{partial xi_i} & = C - alpha_i - eta_i = 0 \  & alpha_i geq 0\  & eta_i geq 0 end{split} 帶入上式可得到

L(alpha) = -frac{1}{2}sum_{i=1}^Nsum_{j=1}^Nalpha_ialpha_jy_iy_j(x_icdot x_j) + sum_{i=1}^N alpha_i 並且由 C-alpha_i - eta_i = 0 得到 alpha_i = C- eta_i ,由於 eta_igeq 00lealpha_ile C

最後由上面的極大極小轉化為極小極大,最終優化問題變為

egin{split} & underset{alpha}{min} frac{1}{2}sum_{i=1}^N sum_{j=1}^N alpha_ialpha_jy_iy_j (x_icdot x_j) - sum_{i=1}^Nalpha_i \ & s.t. left{egin{split}             & sum_{i=1}^N alpha_iy_i = 0 \             & 0le alpha_i le C         end{split}
ight. end{split}


分析一下對偶情況下樣本點的約束情況,此時需要滿足兩個重要的KKT條件有

alpha_iig[y_i(wcdot x_i+b) - 1 + xi_iig] = 0 \ eta_ixi_i = 0 \ alpha_i + eta_i = C \ alpha_i geq 0\ y_i(wcdot x_i + b) - 1 + xi_i geq 0 \ eta_i geq 0 \ xi_i geq 0 故此時有:

  • alpha_i = 0 ,此時不等式約束 y_i(wcdot x_i + b) geq 1 - xi_i 不起作用,也就是該點構成的約束不起作用,則該點在分離間隔外面,是非支持向量點
  • alpha_i > 0 ,因為 alpha_iig[y_i(wcdot x_i+b) - 1 + xi_iig] = 0 有等式約束 y_i(wcdot x_i + b) = 1 - xi_i 起作用,此時點在分離間隔上或者內部,該點是支持向量點,此外由於有 eta_i = C - alpha_i ,這時根據 eta_i 又分為兩種情況
  • 0 < alpha_i < C 此時 0 < eta_i < C ,因為 eta_ixi_i = 0 ,有不等式約束退化為等式約束 xi_i=0 起作用,由於此時鬆弛變數 xi_i = 0 ,故 alpha_i 對應的等式約束變為 y_i(wcdot x_i + b) = 1 ,此時點正好在分離間隔的邊界上也就是上圖中虛線穿過的點
  • alpha_i = C 此時 eta_i = 0 不等式約束 xi_i geq 0 不起作用,也就是不管該點鬆弛變數 xi 的值如何都不影響最終的優化結果,由於此時 xi_igeq 0alpha_i 對應的等式約束為 y_i(wcdot x_i + b) = 1 - xi_i ,此時該點在分離間隔內部或者在另一側( xi_i 為大於等於0的任意值)

最後看一下懲罰項 C 的影響,本身鬆弛因子是不影響最終優化結果的,但SVM在原始目標函數上加了一個包含鬆弛因子的正則化項,使得懲罰項 C 對應的鬆弛因子對最終的優化結果產生了影響。由上面可知 alpha_i + eta_i = C ,由於對偶因子 alpha_ieta_i 代表了該等式約束在該優化問題中的影響力,當 0lealpha_i le C,0le eta_i le  C ,兩個等式約束項同時起作用,但 alpha_i 越大 eta_i 越小,故雖然此時點均在分離間隔邊界上,但其仍然是不同的,其與 alpha_i 的大小有關, alpha_i 越大該點在優化中越重要,但對應的鬆弛因子越「容易」變大,當 alpha_i = C 時,鬆弛因子突破0,此時的鬆弛因子對應的等式約束不再起作用,表現在分類數據集上是兩個不同的類點越靠近(越「雜糅」) alpha 越大,當到達一定程度鬆弛因子開始起作用,其使該「離群點」不影響最終的優化,從而達到該離群點不影響最終優化結果的目的。由後面的SMO優化過程可知,優化過程通過求解 alpha_i 得到的,故當 C 比較大時,會有更多的點在分離間隔的邊界上。

個人趕腳SVM作為統計模型還缺點啥,如果換成隨機變數來分析會不會有不一樣

核方法

關於核方法已經超出我現在理解的能力範圍,只是拿來主義的說下核方法的形式

首先SVM劃分了輸入空間和特徵空間,都是基於上面的內積(內積空間是數分裡面的內容,我現在的理解還不夠)的性質

為了能夠解決非線性問題,SVM引入了核方法,通過把原始的輸入空間映射為特徵空間,使原始非線性的輸入空間轉變為線性可分的特徵空間,並在特徵空間進行線性分類。再由上面可知,SVM只與 x 的內積有關,此時的 x 在特徵空間,而且只與當前所有樣本點的特徵向量的內積有關,故提出了一種核函數的方法

輸入空間為 mathcal{X} ,特徵空間為 mathcal{H} ,而SVM的輸入是在特徵空間中,原始輸入空間非線性問題被映射為了一個特徵空間成為一個線性可分問題,設映射為 phi(x):mathcal{X}
ightarrow mathcal{H} ,然而特徵空間有可能是非常高的維度或者是無窮維,故提出了一種核函數的方法能夠用輸入空間中的函數的形式來表示在特徵空間中的內積

K(x,z) = <phi(x), phi(z)> 這樣就能只需要顯式的定義核函數 K ,而不需要顯式的再定義具體的映射 phi 我們都知道SVM通過把樣本映射到高維空間,使其變成一個線性可分,如果直接按照原始形式在高維特徵空間進行求解,那麼參數 w 的維度也很大,而對偶內積的形式所求解的參數數量只與樣本量相等,相當於每一個樣本構成了一個約束,而由特徵空間內積引發的核函數使特徵空間中的內積變成了一個輸入空間中函數的形式,使得不必映射到高維空間也仍然能達到相同的效果。

但需要特別注意的一個問題是,SVM的核方法把輸入樣本映射為高維的特徵空間,在高維空間中如何保證演算法的有效性,如何分析其誤差,這才是SVM真正的難點所在

那麼優化問題就變為

egin{split} & underset{alpha}{min}frac{1}{2}sum_{i=1}^Nsum_{j=1}^N alpha_ialpha_jy_iy_jK(x_i,x_j) - sum_{i=1}^Nalpha_i \ & s.t. left{egin{split}             & sum_{i=1}^N alpha_iy_i = 0 \             & 0le alpha_i le 0         end{split}
ight. end{split} 核方法還是比較難,涉及到的理論也比較深,可擴展性很強,等我數分到達一定程度再來寫核方法相關部分

SMO

現在就剩下如何對該對偶問題進行優化,這裡用的是SMO(序列最小最優化演算法),該方法是每次只選取兩個變數進行優化,直至所有變數都滿足約束條件(KKT條件)的時候即完成了優化,但這個方法需要證明收斂和等價,但好像都沒有相關證明

每次只選擇其中兩個變數進行優化並固定其他變數,設這兩個變數為 alpha_1,alpha_2 ,根據 sum_{i=1}^N alpha_iy_i = 0

alpha_1y_1 + alpha_2y_2 = -sum_{i=3}^N alpha_iy_i = k quad 	ext{// 其他變數固定,故$k$為常數} \ a_1 = ky_1 - alpha_2y_1y_2 那麼這時該優化問題的子問題為

egin{split} underset{alpha}{min} W(alpha_1,alpha_2) & = frac{1}{2}sum_{i=1}^Nsum_{j=1}^Nalpha_ialpha_jy_iy_jK(x_i,x_j) - sum_{i=1}^Nalpha_i \     & egin{split} = frac{1}{2}left{         sum_{i=1}^2sum_{j=1}^Nalpha_ialpha_jy_iy_jK(x_i,x_j)  + sum_{i=3}^Nsum_{j=1}^Nalpha_ialpha_jy_iy_jK(x_i,x_j)         
ight} \         -left{ alpha_1 + alpha_2 + sum_{i=3}^Na_i 
ight}         end{split} \     & egin{split} = frac{1}{2}left{         egin{split}             sum_{i=1}^2 & sum_{j=1}^2alpha_ialpha_jy_iy_jK(x_i,x_j) + sum_{i=1}^2sum_{j=3}^Nalpha_ialpha_jy_iy_jK(x_i,x_j) \                 & + sum_{i=3}^Nsum_{j=1}^2alpha_ialpha_jy_iy_jK(x_i,x_j) + sum_{i=3}^Nsum_{j=3}^Nalpha_ialpha_jy_iy_jK(x_i,x_j)         end{split}         
ight} \         -left{ alpha_1 + alpha_2 + sum_{i=3}^Na_i 
ight}         end{split} \     & = frac{1}{2}left{ alpha_1^2K_{11} + alpha_2^2K_{22} + 2alpha_1alpha_2y_1y_2K_{12} + 2alpha_1y_1v_1 + 2alpha_2y_2v_2 
ight} - {alpha_1+alpha_2} + Constant \     & = frac{1}{2}alpha_1^2K_{11} + frac{1}{2}alpha_2^2K_{22} + alpha_1alpha_2y_1y_2K_{12}+ alpha_1y_1v_1 + alpha_2y_2v_2 - alpha_1 - alpha_2 + Constant end{split} 這裡有

v_1 = sum_{j=3}^Nalpha_jy_jK_{1j}  v_2 = sum_{j=3}^Nalpha_jy_jK_{2j}

alpha_1 = ky_1 - alpha_2y_1y_2 代入原式得

egin{split} W(alpha_2) & = frac{1}{2} (ky_1 - alpha_2y_1y_2)^2K_{11} + frac{1}{2}alpha_2^2K_{22} + (ky_1 - alpha_2y_1y_2)alpha_2y_1y_2K_{12} \     & + (ky_1 - alpha_2y_1y_2)y_1v_1 + alpha_2y_2v_2 - (ky_1 - alpha_2y_1y_2) - alpha_2 + Constant end{split} 求偏導

egin{split} frac{partial W}{partial alpha_2}  = alpha_2K_{11} - ky_2K_{11} + alpha_2K_{22} + ky_2K_{12} - 2alpha_2K_{12}       + y_2v_1 + y_2v_2 + y_1y_2 - 1 = 0 \ end{split}

egin{split} alpha_2 & = frac{1-y_1y_2 + ky_2K_{11} - ky_2K_{12} + y_2v_1 - y_2v_2}{K_{11}+K_{22}-2K_{12}} \     & = frac{y_2(y_2-y_1 + kK_{11} - kK_{12} + v_1 - v_2)}{K_{11}+K_{22}-2K_{12}} end{split} 這裡可以進一步化簡,有

egin{split} f(x_1) & = wcdot x_1 + b \     & = sum_{i=1}^Nalpha_iy_iK_{1i} + b \     & = alpha_1y_1K_{11} + alpha_2y_2K_{12} + sum_{i=3}^N alpha_iy_iK_{1i} + b \     & = alpha_1y_1K_{11} + alpha_2y_2K_{12} + v_1 + b \     & = (ky_1 - alpha_2y_1y_2)y_1K_{11} + alpha_2y_2K_{12} + v_1 + b \     & = kK_{11} - alpha_2y_2K_{11} + alpha_2y_2K_{12} + v_1 + b\ f(x_2) & = kK_{12} - alpha_2y_2K_{12} + alpha_2y_2K_{22} + v_2 + b  end{split}

f(x_1) - f(x_2) = kK_{11} - kK_{12} - alpha_2y_2(K_{11} + K_{22} - 2K_{12}) + v_1 - v_2 代入上式得

egin{split} alpha_2 & = frac{y_2(y_2-y_1 + f(x_1) - f(x_2) + alpha_2y_2(K_{11} + K_{22} - 2K_{12}))}{K_{11} + K_{22} - 2K_{12}} \     & = alpha_2^{old} + frac{y_2(f(x_1)-y_1 - (f(x_2) - y_2))}{K_{11} + K_{22} - 2K_{12}} \     & = alpha_2^{old} + frac{y_2(E_1-E_2)}{K_{11} + K_{22} - 2K_{12}} quad //E_i = f(x_i) - y_i end{split} \ E_i 表示的是函數值與真值的差值

根據約束裁剪 alpha_2

接下來是根據上文中的約束條件對上式求得的 alpha_2 進行裁剪 有上文可知 alpha_1,alpha_2 需要滿足的約束為

left{egin{split} & alpha_1y_1 + alpha_2y_2 = k\ & 0 le alpha_1,alpha_2le C end{split}
ight.

上式第一個約束條件把 alpha_1,alpha_2 約束在了平行於正方形對角線的一條線段上,這時分為兩種情況

由圖很容易得出

  • y_1 
eq y_2left{egin{matrix}  L = max(0, alpha_2^{old} - alpha_1^{old}) \  H = min(C, alpha_2^{old} - alpha_1^{old} + C) end{matrix}
ight.
  • y_1 = y_2left{egin{matrix}  L = max(0, alpha_2^{old} + alpha_1^{old} - C) \  H = min(C, alpha_2^{old} + alpha_1^{old}) end{matrix}
ight.

故經過裁剪後的 alpha_2alpha_2^{new} = left{egin{matrix}  H & alpha_2^{new,unc} > H \  alpha_2^{new,unc} & Lle alpha_2^{new, unc}le H \  L & alpha_2^{new, unc} < L end{matrix}
ight. 由此有 egin{split} alpha_1^{new} & = ky_1 - y_1y_2alpha_2^{new} \     & = (alpha_1^{old}y_1 + alpha_2^{old}y_2)y_1 - y_1y_2alpha_2^{new} \     & = alpha_1^{old} + y_1y_2(alpha_2^{old} - alpha_2^{new}) end{split} 接下來需要根據更新後的 alpha_1, alpha_2 的值更新 b ,前面提到, b 更新依賴需要有一個位於決策邊界的點才行,也就是說要有一個 alpha_i 滿足 0<alpha<C ,故這時需要判斷求得的 alpha_1alpha_2 是否滿足條件

0<alpha_1<C 時, egin{split} y_1 & = w_1^cdot x_1 + b_1^* \     & = sum_{i=1}^N alpha_i^{new}y_iK_{1i} + b_1^{new} \     & = alpha_1^{new}y_1K_{11} + alpha_2^{new}y_2K_{12} + sum_{i=3}^Nalpha_iy_iK_{1i} + b_1^{new} \ b_1^{new} & = y_1 - alpha_1^{new}y_1K_{11} - alpha_2^{new}y_2K_{12} - sum_{i=3}^Nalpha_iy_iK_{1i} end{split} 由前面可知, alpha_i 的更新依賴於 E_i ,故 E 依賴於上次迭代的 alpha ,故需要用 alpha_1^{old}b^{old}

egin{split} E_1 & = f(x_1) - y_1 \     & = sum_{i=1}^N alpha_i^{old}y_iK_{1i} + b^{old} - y_1 \     & = alpha_1^{old}y_1K_{11} + alpha_2^{old}y_2K_{12} + sum_{i=3}^Nalpha_iy_iK_{1i} + b^{old} - y_1 end{split} 可得到 y_1 - sum_{i=3}^N alpha_iy_iK_{1i} = alpha_1^{old}y_1K_{11} + alpha_2^{old}y_2K_{12} + b^{old} - E_1

代入上式得 egin{split} b_1^{new} & = alpha_1^{old}y_1K_{11} + alpha_2^{old}y_2K_{12} + b^{old} - E_1 - alpha_1^{new}y_1K_{11} - alpha_2^{new}y_2K_{12} \     & = y_1K_{11}(alpha_1^{old} - alpha_1^{new}) + y_2K_{12}(alpha_2^{old} - alpha_2^{new}) - E_1 + b^{old} end{split}

0<alpha_2<C 時,同理得 egin{split} b_2^{new}  = y_1K_{12}(alpha_1^{old} - alpha_1^{new}) + y_2K_{22}(alpha_2^{old} - alpha_2^{new}) - E_2 + b^{old} end{split} 故當 alpha_1alpha_2 同時滿足 0<alpha_i<Cb_1^{new} = b_2^{new} ,而當 alpha_1alpha_2 同時取 0C 時,書上說 b_1^{new}b_2^{new} 都是符合KKT條件的閾值,這時選擇他們的中點 b^{new} = frac{b_1^{new} + b_2^{new}}{2} ,但不知道為啥

最後再更新E的值  E_i^{new} = sum_{j=1}^Nalpha_j^{new}y_jK_{ij} + b^{new} - y_i 書上說這裡用的是所有支持向量,但非支持向量的 alpha_i=0 ,故效果相同

終止條件

終止條件是讓SVM不再變化並且盡量滿足KKT條件,這裡加了一個KKT條件的閾值,就是SVM中常見的 tol ,在判斷KKT條件時只要滿足 varepsilon 範圍內即可,其在一定程度上控制了SVM的最終精度和運行時間。另外一個常見的是eps,其控制每次 alpha_2 的變化量的閾值?

這樣迭代過程為,每次先找到一個不滿足 varepsilon -KKT的變數,然後再找另外一個變數來執行子優化過程,當遍歷完成一遍整個數據集,找不到這樣的變數對時結束

過程如下

i = underset{i}{argmax}|E_i - E_j| 是為了讓第二個變數 alpha_i 能夠有最大的變化,因為 alpha_2^{new} = alpha_2^{old} + frac{y_2(E_1 - E_2)}{K_{11} + K_{22} - 2K_{12}} 這個地方原始論文上說只讓 |E_1-E_2| 最大,因為核 K 的計算需要花費時間,但這裡我們預先把所有樣本點的核矩陣保存起來了,這個地方個人認為可以改為

i = underset{i}{argmax}left|frac{E_i - E_j}{K_{11} + K_{22} - 2K_{12}}
ight|


SVM的原始思想還是非常簡單的,但伴隨其的數學方法卻很有難度,其把一種很簡單的思想轉換成了一種數學問題一種求解優化問題,並完美的把核方法帶入進去

最後的SVM另外重要的一塊是其誤差分析,和核方法的誤差分析,這部分等我把統計學習理論搞懂了再來寫:>

Reference

  • Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines
  • 《統計學習方法》
  • Implementing a Support Vector Machine using Sequential Minimal Optimization and Python 3.5

推薦閱讀:

相关文章