支持向量机SVM之-SMO算法

序列最小最优化算法

序列最小最优化算法(sequential minimal optimization,简称SMO)是由Platt在1998年提出,用于解决多变量的凸优化问题。当变量个数很多的时候,一般的最优化算法通常无法有效求解最优解。此时,SMO算法的作用就会体现的淋漓尽致。针对多变量的最优解问题,SMO算法通过从变量集中选取两个变量,剩余的变量视为常量来计算局部最优解,然后再以递进的方式求出全局最优解。

SMO算法需要解决的最优化问题: min ⁡ α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i \min_{\alpha} \quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_jK(x_i,x_j)-\sum_{i=1}^N\alpha_i αmin21i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi s . t . ∑ i = 1 N α i y i = 0 s.t. \qquad \sum_{i=1}^N\alpha_iy_i=0 s.t.i=1Nαiyi=0 0 ≤ α i ≤ C , i = 1 , 2 , . . . , N 0 \leq \alpha_i \leq C,i=1,2,...,N 0αiC,i=1,2,...,N其中,目标函数的变量为 ( α 1 , α 2 , . . . , α N ) (\alpha_1,\alpha_2,...,\alpha_N) (α1,α2,...,αN),每一个实例 ( x i , y i ) (x_i,y_i) (xi,yi)对应一个 α i \alpha_i αi

SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。因此KKT条件是该最优化问题的充分必要条件。SMO算法的目标是求解满足KKT条件的 ( α 1 , α 2 , . . . , α N ) (\alpha_1,\alpha_2,...,\alpha_N) (α1,α2,...,αN)。方法是选择两个变量,固定其他变量,针对这两个变量构建一个二次规划的子问题。这个二次规划子问题关于这两个变量的解更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。二次规划子问题有两个变量,一个是主动变量,其为违反KKT条件最严重的那一个,另一个被动变量,由主动变量依据约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。

对子问题进行求最优解时,假设 α 1 , α 2 \alpha_1,\alpha_2 α1,α2为两个变量,固定 α 3 , α 4 , . . . , α N \alpha_3,\alpha_4,...,\alpha_N α3,α4,...,αN,其满足的约束条件为: α 1 y 1 + α 2 y 2 = − ∑ i = 3 N α i y i = ζ \alpha_1y_1+\alpha_2y_2=-\sum_{i=3}^N\alpha_iy_i=\zeta α1y1+α2y2=i=3Nαiyi=ζ当更新其中一个变量 α 2 \alpha_2 α2时,相应的 α 1 \alpha_1 α1也会自动更新,进而求出子问题的最优解。

两个变量二次规划

假设 α 1 , α 2 \alpha_1,\alpha_2 α1,α2为两个变量,固定 α 3 , α 4 , . . . , α N \alpha_3,\alpha_4,...,\alpha_N α3,α4,...,αN,那么SMO的最优化问题的子问题表达为: min ⁡ α 1 , α 2 W ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 − ( α 1 + α 2 ) + y 1 α 1 ∑ i = 3 N y i α i K i 1 + y 2 α 2 ∑ i = 3 N y i α i K i 2 \min_{\alpha_1,\alpha_2} \quad 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_1\sum_{i=3}^Ny_i\alpha_iK_{i1}+y_2\alpha_2\sum_{i=3}^Ny_i\alpha_iK_{i2} α1,α2minW(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2(α1+α2)+y1α1i=3NyiαiKi1+y2α2i=3NyiαiKi2 s . t . α 1 y 1 + α 2 y 2 = − ∑ i = 3 N α i y i = ζ s.t. \quad \alpha_1y_1+\alpha_2y_2=-\sum_{i=3}^N\alpha_iy_i=\zeta s.t.α1y1+α2y2=i=3Nαiyi=ζ 0 ≤ α i ≤ C , i = 1 , 2 0 \leq \alpha_i\leq C,i=1,2 0αiC,i=1,2其中, K i j = K ( x i , x j ) , i , j = 1 , 2 , . . . , N K_{ij}=K(x_i,x_j),i,j=1,2,...,N Kij=K(xi,xj),i,j=1,2,...,N ζ \zeta ζ为常数。

为了解决两个变量的最优化问题,首先分析约束条件,找出变量满足的取值范围,并在此范围内求解最优解。

支持向量机SVM之-SMO算法_第1张图片

依据变量的上述等式约束和不等式约束, α 1 , α 2 \alpha_1,\alpha_2 α1,α2都在 [ 0 , C ] [0,C] [0,C]范围内,并且 α 1 , α 2 \alpha_1,\alpha_2 α1,α2满足的直线平行于盒子范围的对角线。如果 y 1 = ̸ y 2 y_1=\not y_2 y1≠y2时,则 L = m a x ( 0 , α 2 o l d − α 1 o l d ) , H = m i n ( C , C + α 2 o l d − α 1 o l d ) L=max(0,\alpha_2^{old}-\alpha_1^{old}),H=min(C,C+\alpha_2^{old}-\alpha_1^{old}) L=max(0,α2oldα1old),H=min(C,C+α2oldα1old);如果 y 1 = y 2 y_1= y_2 y1=y2时,则 L = m a x ( 0 , α 2 o l d + α 1 o l d − C ) , H = m i n ( C , α 2 o l d + α 1 o l d ) L=max(0,\alpha_2^{old}+\alpha_1^{old}-C),H=min(C,\alpha_2^{old}+\alpha_1^{old}) L=max(0,α2old+α1oldC),H=min(C,α2old+α1old)。计算的新解 α 1 n e w , α 2 n e w \alpha_1^{new},\alpha_2^{new} α1new,α2new必须满足 [ L , H ] [L,H] [L,H]这一范围,即 L ≤ α 2 n e w ≤ H L\leq \alpha_2^{new}\leq H Lα2newH,接下来两个变量的最优化问题实质上是单变量的最优化问题,因为上述的等式约束,不妨考虑为变量 α 2 \alpha_2 α2的最优化问题。

首先求沿着约束方向不考虑取值范围时的 α 2 \alpha_2 α2的最优解 α 2 n e w , u n c \alpha_2^{new,unc} α2new,unc;然后再求剪辑后 α 2 \alpha_2 α2的解 α 2 n e w \alpha_2^{new} α2new。在此之前,先计算每个实例 x i x_i xi的误差 g ( x ) = ∑ i = 1 N α i y i K ( x i , x ) + b g(x)=\sum_{i=1}^N\alpha_iy_iK(x_i,x)+b g(x)=i=1NαiyiK(xi,x)+b E i = g ( x i ) − y i = ( ∑ i = 1 N α i y i K ( x i , x ) + b ) − y i , i = 1 , 2 E_i=g(x_i)-y_i=(\sum_{i=1}^N\alpha_iy_iK(x_i,x)+b)-y_i,i=1,2 Ei=g(xi)yi=(i=1NαiyiK(xi,x)+b)yi,i=1,2上式中, g ( x i ) g(x_i) g(xi)为实例 x i x_i xi的预测值, E i E_i Ei为实例 x i x_i xi的误差。

最优化问题沿着约束方向不考虑取值范围的解为: α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 − E 2 ) η \alpha_2^{new,unc}=\alpha_2^{old}+\frac{y_2(E_1-E_2)}{\eta} α2new,unc=α2old+ηy2(E1E2)那么,这个公式是怎么推导出来的呢?接下来就是推导公式的详细步骤: v i = ∑ j = 3 N α j y j K ( x i , x j ) = g ( x i ) − ∑ j = 1 2 α j y j K ( x i , x j ) − b , i = 1 , 2 v_i=\sum_{j=3}^N\alpha_jy_jK(x_i,x_j)=g(x_i)-\sum_{j=1}^2\alpha_jy_jK(x_i,x_j)-b,i=1,2 vi=j=3NαjyjK(xi,xj)=g(xi)j=12αjyjK(xi,xj)b,i=1,2目标函数可写成 W ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 − ( α 1 + α 2 ) + y 1 α 1 v 1 + y 2 α 2 v 2 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 W(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2(α1+α2)+y1α1v1+y2α2v2 α 1 y 1 = ζ − α 2 y 2 \alpha_1y_1=\zeta-\alpha_2y_2 α1y1=ζα2y2 y i 2 = 1 y_i^2=1 yi2=1,可将 α 1 \alpha_1 α1表示为 α 1 = ( ζ − α 2 y 2 ) y 1 \alpha_1=(\zeta-\alpha_2y_2)y_1 α1=(ζα2y2)y1代入到上式中,得到只要一个变量 α 2 \alpha_2 α2的目标函数 W ( α 2 ) = 1 2 K 11 ( ζ − α 2 y 2 ) 2 + 1 2 K 22 α 2 2 + y 2 K 12 ( ζ − α 2 y 2 ) α 2 − ( ζ − α 2 y 2 ) y 1 − α 2 + v 1 ( ζ − α 2 y 2 ) + y 2 v 2 α 2 W(\alpha_2)=\frac{1}{2}K_{11}(\zeta-\alpha_2y_2)^2+\frac{1}{2}K_{22}\alpha_2^2+y_2K_{12}(\zeta-\alpha_2y_2)\alpha_2-(\zeta-\alpha_2y_2)y_1-\alpha_2+v_1(\zeta-\alpha_2y_2)+y_2v_2\alpha_2 W(α2)=21K11(ζα2y2)2+21K22α22+y2K12(ζα2y2)α2(ζα2y2)y1α2+v1(ζα2y2)+y2v2α2 α 2 \alpha_2 α2求导数 ∂ W ∂ α 2 = K 11 α 2 + K 22 α 2 − 2 K 12 α 2 − K 11 ζ y 2 + K 12 ζ y 2 + y 1 y 2 − 1 − v 1 y 2 + y 2 v 2 \frac{\partial W}{\partial \alpha_2}=K_{11}\alpha_2+K_{22}\alpha_2-2K_{12}\alpha_2-K_{11}\zeta y_2+K_{12}\zeta y_2+y_1y_2-1-v_1y_2+y_2v_2 α2W=K11α2+K22α22K12α2K11ζy2+K12ζy2+y1y21v1y2+y2v2令其为0,即 ( K 11 + K 22 − 2 K 12 ) α 2 = y 2 ( y 2 − y 1 + ζ K 11 − ζ K 12 + v 1 − v 2 ) = y 2 [ y 2 − y 1 + ζ K 11 − ζ K 12 + ( g ( x i ) − ∑ j = 1 2 y j α j K 1 j − b ) − ( g ( x 2 − ∑ j = 1 2 y j α j K 2 j − b ) ] (K_{11}+K_{22}-2K_{12})\alpha_2=y_2(y_2-y_1+\zeta K_{11}-\zeta K_{12}+v_1-v_2)\\ =y_2\left[y_2-y_1+\zeta K_{11} - \zeta K_{12} +(g(x_i)-\sum_{j=1}^2y_j\alpha_jK_{1j}-b)-(g(x_2-\sum_{j=1}^2y_j\alpha_jK_{2j}-b)\right] (K11+K222K12)α2=y2(y2y1+ζK11ζK12+v1v2)=y2[y2y1+ζK11ζK12+(g(xi)j=12yjαjK1jb)(g(x2j=12yjαjK2jb)] ζ = α 1 o l d y 1 + α 2 o l d y 2 \zeta=\alpha_1^{old}y_1+\alpha_2^{old}y_2 ζ=α1oldy1+α2oldy2代入,得到 ( K 11 + K 22 − 2 K 12 ) α 2 n e w , u n c = y 2 ( ( K 11 + K 22 − 2 K 12 ) α 2 o l d y 2 + y 2 − y 1 + g ( x 1 ) − g ( x 2 ) ) = ( K 11 + K 22 − 2 K 12 ) α 2 o l d + y 2 ( E 1 − E 2 ) \begin{aligned}(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)\end{aligned} (K11+K222K12)α2new,unc=y2((K11+K222K12)α2oldy2+y2y1+g(x1)g(x2))=(K11+K222K12)α2old+y2(E1E2) η = K 11 + K 22 − 2 K 12 \eta=K_{11}+K_{22}-2K_{12} η=K11+K222K12代入,得到 α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 − E 2 ) η \alpha_2^{new,unc}=\alpha_2^{old}+\frac{y_2(E_1-E_2)}{\eta} α2new,unc=α2old+ηy2(E1E2)

然后,经过范围的约束得到的新解为
α 2 n e w = { H , α 2 n e w , u n c > H α 2 n e w , u n c , L ≤ α 2 n e w , u n c ≤ H L , α 2 n e w , u n c < L \alpha_2^{new} = \begin{cases} H \qquad, \alpha_2^{new,unc}>H \\ \alpha_2^{new,unc}, L \leq \alpha_2^{new,unc} \leq H \\ L \qquad, \alpha_2^{new,unc} < L \end{cases} α2new=H,α2new,unc>Hα2new,unc,Lα2new,uncHL,α2new,unc<L
α 2 n e w \alpha_2^{new} α2new计算得到 α 1 n e w = α 1 o l d + y 1 y 2 ( α 2 o l d − α 2 n e w ) \alpha_1^{new}=\alpha_1^{old}+y_1y_2(\alpha_2^{old}-\alpha_2^{new}) α1new=α1old+y1y2(α2oldα2new)

计算截距b和误差 E i E_i Ei

每次完成两个变量的更新优化后,都要重新计算截距b。当 0 < α 1 n e w < C 0<\alpha_1^{new}<C 0<α1new<C时,由KKT条件可知: ∑ i = 1 N α i y i K i 1 + b = y 1 \sum_{i=1}^N\alpha_iy_iK_{i1}+b=y_1 i=1NαiyiKi1+b=y1于是得到: b 1 n e w = y 1 − ∑ i = 3 N α i y i K i 1 − α 1 n e w y 1 K 11 − α 2 n e w y 2 K 21 b_1^{new}=y_1-\sum_{i=3}^N\alpha_iy_iK_{i1}-\alpha_1^{new}y_1K_{11}-\alpha_2^{new}y_2K_{21} b1new=y1i=3NαiyiKi1α1newy1K11α2newy2K21 E 1 E_1 E1的定义: E 1 = ∑ i = 3 N α i y i K i 1 − α 1 o l d y 1 K 11 − α 2 o l d y 2 K 21 + b o l d − y 1 E1=\sum_{i=3}^N\alpha_iy_iK_{i1}-\alpha_1^{old}y_1K_{11}-\alpha_2^{old}y_2K_{21}+b^{old}-y_1 E1=i=3NαiyiKi1α1oldy1K11α2oldy2K21+boldy1将上式代入到 E 1 E_1 E1中得到: b 1 n e w = − E 1 − y 1 K 11 ( α 1 n e w − α 1 o l d ) − y 2 K 21 ( α 2 n e w − α 2 o l d ) + b o l d 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} b1new=E1y1K11(α1newα1old)y2K21(α2newα2old)+bold同理,如果 0 < α 2 n e w < C 0<\alpha_2^{new}<C 0<α2new<C,那么 b 2 n e w = − E 2 − y 1 K 12 ( α 1 n e w − α 1 o l d ) − y 2 K 22 ( α 2 n e w − α 2 o l d ) + b o l d 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} b2new=E2y1K12(α1newα1old)y2K22(α2newα2old)+bold如果 α 1 n e w , α 2 n e w \alpha_1^{new},\alpha_2^{new} α1new,α2new是0或者C,那么 b n e w = b 1 n e w + b 2 n e w 2 b^{new}=\frac{b_1^{new}+b_2^{new}}{2} bnew=2b1new+b2new

更新 b n e w b^{new} bnew之后,还要更新对应的 E i E_i Ei E i n e w = ∑ j = 1 N y j α j K ( x i , x j ) + b n e w − y i E_i^{new}=\sum_{j=1}^Ny_j\alpha_jK(x_i,x_j)+b^{new}-y_i Einew=j=1NyjαjK(xi,xj)+bnewyi

SMO算法

输入:线性可分训练集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\left\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\right\} T={(x1,y1),(x2,y2),...,(xN,yN)},其中, x i ∈ X = R n , y i ∈ Y = { + 1 , − 1 } , i = 1 , 2 , . . . , N x_i\in \mathcal {X}=R^n,y_i \in \mathcal {Y}=\left\{+1,-1\right\},i=1,2,...,N xiX=Rn,yiY={+11},i=1,2,...,N,精度 ε \varepsilon ε
输出:近似解 α \alpha α

  • 取初值 α ( 0 ) = 0 \alpha^{(0)}=0 α(0)=0,令k=0
  • 选取优化变量 α 1 ( k ) , α 2 ( k ) \alpha_1^{(k)},\alpha_2^{(k)} α1(k),α2(k),解析求解两个变量的最优化问题,求得最优解 α 1 ( k + 1 ) , α 2 ( k + 1 ) \alpha_1^{(k+1)},\alpha_2^{(k+1)} α1(k+1),α2(k+1),更新 α \alpha α α ( k + 1 ) \alpha^{(k+1)} α(k+1)
  • 若在精度 ε \varepsilon ε范围内满足停止条件 ∑ i = 1 N α i y i = 0 \sum_{i=1}^N\alpha_iy_i=0 i=1Nαiyi=0 0 ≤ α i ≤ C , i = 1 , 2 , . . . , N 0\leq \alpha_i \leq C,i=1,2,...,N 0αiC,i=1,2,...,N y . g ( x i ) = { ≥ 1 , { x i ∣ α i = 0 } = 1 , { x i ∣ 0 < α i < C } ≤ 1 , { x i ∣ α i = C } y.g(x_i)=\begin{cases} \ge 1, \left\{x_i|\alpha_i=0\right\} \\ =1, \left\{x_i|0 < \alpha_i < C\right\} \\ \leq 1, \left\{x_i|\alpha_i=C\right\} \end{cases} y.g(xi)=1,{xiαi=0}=1,{xi0<αi<C}1,{xiαi=C}其中 g ( x i ) = ∑ j = 1 N α j y j K ( x i , x j ) + b g(x_i)=\sum_{j=1}^N\alpha_jy_jK(x_i,x_j)+b g(xi)=j=1NαjyjK(xi,xj)+b则转到下一步,否则令k=k+1,转到第2步;
  • α = α ( k + 1 ) \alpha=\alpha^{(k+1)} α=α(k+1)

变量的选择

  1. 第一个变量的选择
    KKT条件: α i = 0 ⇔ y i g ( x i ) ≥ 1 \alpha_i=0\Leftrightarrow y_ig(x_i)\ge 1 αi=0yig(xi)1 0 < α i < C ⇔ y i g ( x i ) = 1 0<\alpha_i<C\Leftrightarrow y_ig(x_i)= 1 0<αi<Cyig(xi)=1 α i = C ⇔ y i g ( x i ) ≤ 1 \alpha_i=C\Leftrightarrow y_ig(x_i)\leq 1 αi=Cyig(xi)1SMO选择第1个变量的过程称为外层循环。外层循环在训练样本中选取违反KKT条件最严重的样本点,并将其对应的变量作为第1个变量。该检验是在 ε \varepsilon ε范围内进行的。检验过程中,外层循环首先遍历所有满足条件的 0 < α i < C 0 < \alpha_i < C 0<αi<C的样本点,检验它们是否满足KKT条件。如果这些样本点都不满足KKT条件,那么遍历整个训练集,检验它们是否满足KKT条件。
  2. 第2个变量的选择
    SMO选择第2个变量的过程称为内层循环。假设外层循环找到第1个变量 α 1 \alpha_1 α1,现在在内层循环中找到第2个变量 α 2 \alpha_2 α2。第2个变量的选择标准是使 ∣ α 1 − α 2 ∣ |\alpha_1-\alpha_2| α1α2有足够大的变化。因为 α 2 n e w \alpha_2^{new} α2new是依赖于 ∣ α 1 − α 2 ∣ |\alpha_1-\alpha_2| α1α2,选择一个 α 2 \alpha_2 α2,使得 ∣ α 1 − α 2 ∣ |\alpha_1-\alpha_2| α1α2尽可能的大,从而加快计算速度。如果 E 1 E_1 E1是正的,那么选择最小的 E i E_i Ei作为 E 2 E_2 E2;如果 E 1 E_1 E1是负的,那么选择最大的 E i E_i Ei作为 E 2 E_2 E2

参考文献

  • 李航 《统计学习方法》

你可能感兴趣的:(机器学习)