支持向量机SVM(5)——SMO算法

0.回顾

接上一篇博客支持向量机SVM(4)——核函数
回顾前面所讲的,我们现在的优化问题变成了:
{ m i n λ    1 2 ∑ i = 1 N ∑ j = 1 N λ i λ j y i y j K ( x i , x j ) − ∑ i = 1 N λ i s . t . 0 ≤ λ i ≤ C ∑ i = 1 N λ i y i = 0 , i = 1 , 2 , . . . , N \begin{cases}min_{\lambda}\;\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jy_iy_jK(x_i,x_j)-\sum_{i=1}^N\lambda_i\\ s.t. \quad 0\leq\lambda_i\leq C\\\qquad\sum_{i=1}^N\lambda_iy_i=0,i=1,2,...,N\end{cases} minλ21i=1Nj=1NλiλjyiyjK(xi,xj)i=1Nλis.t.0λiCi=1Nλiyi=0i=1,2,...,N
同时满足KKT条件:

{ λ i ( 1 − y i ( w T x i + b ) − ξ i ) = 0 λ i ≥ 0 , u i ≥ 0 y i ( w T x i + b ) ≥ 1 − ξ i ξ i ≥ 0 u i ξ i = 0 , i = 1 , 2 , . . . , N \begin{cases}\lambda_i(1- y_i(w^Tx_i+b)-\xi_i)=0\\ \lambda_i\geq0,u_i\geq0\\y_i(w^Tx_i+b)\geq1-\xi_i\\\xi_i\geq0\\u_i\xi_i=0,i=1,2,...,N\end{cases} λi(1yi(wTxi+b)ξi)=0λi0ui0yi(wTxi+b)1ξiξi0uiξi=0i=1,2,...,N
最优解的形式:
{ b = y j − ∑ i = 1 N λ i y i K ( x i , x j ) w = ∑ i = 1 N λ i y i x i \begin{cases}b={y_j}-\sum_{i=1}^N\lambda_iy_iK(x_i,x_j)\\ w=\sum_{i=1}^N\lambda_iy_ix_i\end{cases} {b=yji=1NλiyiK(xi,xj)w=i=1Nλiyixi
现在只要求得 λ i ( i = 1 , 2 , . . . , N ) \lambda_i(i=1,2,...,N) λi(i=1,2,...,N)就可以得到最终的超平面方程(因为求b需要带入支持向量,所以暂时不带入b的最优解表达式):
f ( x ) = ∑ i = 1 N λ i y i K ( x , x i ) + b f(x)=\sum_{i=1}^N\lambda_iy_iK(x,x_i)+b f(x)=i=1NλiyiK(x,xi)+b


上面优化问题的最优解 λ i \lambda_i λi可以通过SMO(Sequential minimal optimization,序列最小化)算法求解,其基本思路是:如果所有变量的解都满足上面优化问题的KKT条件,那么这个问题的解就得到了,因为满足KKT条件是最优化问题的充分必要条件。
整个SMO算法分为两步:(1)求解两个变量二次规划的解析方法(2)选择变量的启发式方法

1.求解两个变量二次规划的解析方法

首先选择两个变量 λ 1 和 λ 2 \lambda_1和\lambda_2 λ1λ2,并固定其他变量 λ i \lambda_i λi不变,即当作常数处理,至于怎么选择 λ 1 和 λ 2 \lambda_1和\lambda_2 λ1λ2在下一部分讲解。现在为了简化最优化问题的表达式,我们将包含变量 λ 1 和 λ 2 \lambda_1和\lambda_2 λ1λ2的部分单独提出来:
{ m i n λ 1 , λ 2 1 2 λ 1 2 K 11 + 1 2 λ 2 2 K 22 + y 1 y 2 λ 1 λ 2 K 12 + y 1 λ 1 ∑ i = 3 N λ i y i K i 1 + y 2 λ 2 ∑ i = 3 N λ i y i K i 2 − λ 1 − λ 2 s . t . λ 1 y 1 + λ 2 y 2 = − ∑ i = 3 N λ i y i = c 0 ≤ λ i ≤ C , i = 1 , 2 \begin{cases}min_{\lambda_1,\lambda_2}\quad\frac{1}{2}\lambda^2_1K_{11}+\frac{1}{2}\lambda^2_2K_{22}+y_1y_2\lambda_1\lambda_2K_{12}+y_1\lambda_1\sum_{i=3}^N\lambda_iy_iK_{i1}+y_2\lambda_2\sum_{i=3}^N\lambda_iy_iK_{i2}-\lambda_1-\lambda_2\\ s.t. \quad\lambda_1y_1+\lambda_2y_2=-\sum_{i=3}^N\lambda_iy_i=c\\ \quad\quad 0\leq\lambda_i\leq C, i=1,2\end{cases} minλ1,λ221λ12K11+21λ22K22+y1y2λ1λ2K12+y1λ1i=3NλiyiKi1+y2λ2i=3NλiyiKi2λ1λ2s.t.λ1y1+λ2y2=i=3Nλiyi=c0λiCi=1,2
其中, K i j = K ( x i , x j ) , i = 1 , 2 , . . . , N K_{ij}=K(x_i, x_j),i=1,2,...,N Kij=K(xi,xj),i=1,2,...,N,c是常数,并吧目标优化函数中包含了固定不变的 λ \lambda λ常数部分省略掉。

v j = ∑ i = 3 N λ i y i K i j = f ( x j ) − ∑ i = 1 2 λ i y i K i j − b , ( j = 1 , 2 ) v_j=\sum_{i=3}^N\lambda_iy_iK_{ij}=f(x_j)-\sum_{i=1}^2\lambda_iy_iK_{ij}-b,(j=1,2) vj=i=3NλiyiKij=f(xj)i=12λiyiKijb,(j=1,2),然后根据上面的第一个约束条件可得:
λ 1 = ( c − λ 2 y 2 ) y 1 \lambda_1=(c-\lambda_2y_2)y_1 λ1=(cλ2y2)y1
将上式代入优化问题中,得:
W ( λ 2 ) = 1 2 ( c − λ 2 y 2 ) 2 K 11 + 1 2 λ 2 2 K 22 + y 2 ( c − λ 2 y 2 ) λ 2 K 12 + ( c − λ 2 y 2 ) v 1 + y 2 λ 2 v 2 − ( c − λ 2 y 2 ) y 1 − λ 2 W(\lambda_2)=\frac{1}{2}(c-\lambda_2y_2)^2K_{11}+\frac{1}{2}\lambda^2_2K_{22}+y_2(c-\lambda_2y_2)\lambda_2K_{12}+(c-\lambda_2y_2)v_1+y_2\lambda_2v_2-(c-\lambda_2y_2)y_1-\lambda_2 W(λ2)=21(cλ2y2)2K11+21λ22K22+y2(cλ2y2)λ2K12+(cλ2y2)v1+y2λ2v2(cλ2y2)y1λ2
然后现在求解上面这个最优化问题我们直接对 λ 2 \lambda_2 λ2求导并令其为0:
∂ W ∂ λ 2 = ( λ 2 − c y 2 ) K 11 + λ 2 K 22 + ( y 2 c − 2 λ 2 ) K 12 − y 2 v 1 + y 2 v 2 + y 1 y 2 − 1 = 0 ⇒ λ 2 ( K 11 + K 22 − 2 K 12 ) = y 2 ( c K 11 − c K 12 + v 1 − v 2 + y 2 − y 1 ) ⇒ λ 2 ( K 11 + K 22 − 2 K 12 ) = y 2 ( c K 11 − c K 12 + ( f ( x 1 ) − ∑ i = 1 2 λ i y i K i 1 − b ) − ( f ( x 2 ) − ∑ i = 1 2 λ i y i K i 2 − b ) + y 2 − y 1 ) \frac{\partial W}{\partial \lambda_2}=(\lambda_2-cy_2)K_{11}+\lambda_2K_{22}+(y_2c-2\lambda_2)K_{12}-y_2v_1+y_2v_2+y_1y_2-1=0\\\Rightarrow\lambda_2(K_{11}+K_{22}-2K_{12})=y_2(cK_{11}-cK_{12}+v_1-v_2+y_2-y_1)\\\Rightarrow\lambda_2(K_{11}+K_{22}-2K_{12})=y_2(cK_{11}-cK_{12}+(f(x_1)-\sum_{i=1}^2\lambda_iy_iK_{i1}-b)-(f(x_2)-\sum_{i=1}^2\lambda_iy_iK_{i2}-b)+y_2-y_1) λ2W=(λ2cy2)K11+λ2K22+(y2c2λ2)K12y2v1+y2v2+y1y21=0λ2(K11+K222K12)=y2(cK11cK12+v1v2+y2y1)λ2(K11+K222K12)=y2(cK11cK12+(f(x1)i=12λiyiKi1b)(f(x2)i=12λiyiKi2b)+y2y1)

现在假设优化问题的初始解为 λ 1 o l d , λ 2 o l d \lambda_1^{old},\lambda_2^{old} λ1oldλ2old,最优解为 λ 1 n e w , λ 2 n e w \lambda_1^{new},\lambda_2^{new} λ1newλ2new,然后将 c = λ 1 o l d y 1 + λ 2 o l d y 2 c=\lambda_1^{old}y_1+\lambda_2^{old}y_2 c=λ1oldy1+λ2oldy2带入上式中,并令 E i = f ( x i ) − y i E_i=f(x_i)-y_i Ei=f(xi)yi(表示预测值和真实值之间的误差)以及令 η = X 11 + X 22 − 2 X 12 \eta=X_{11}+X_{22}-2X_{12} η=X11+X222X12,化简求解得到:
λ 2 n e w = λ 2 o l d + y 2 ( E 1 − E 2 ) η \lambda^{new}_2=\lambda^{old}_2+\frac{y_2(E_1-E_2)}{\eta} λ2new=λ2old+ηy2(E1E2)

因为优化问题对于 λ 2 \lambda_2 λ2是有约束的,所以我们假设 L ≤ λ 2 n e w ≤ H L\leq\lambda^{new}_2\leq H Lλ2newH,然后根据 λ 1 o l d y 1 + λ 2 o l d y 2 = λ 1 n e w y 1 + λ 2 n e w y 2 = c \lambda^{old}_1y_1+\lambda^{old}_2y_2=\lambda^{new}_1y_1+\lambda^{new}_2y_2=c λ1oldy1+λ2oldy2=λ1newy1+λ2newy2=c 0 ≤ λ i ≤ C 0\leq\lambda_i\leq C 0λiC这两个条件来求 λ 2 n e w \lambda^{new}_2 λ2new的取值范围:
(1)当 y 1 ≠ y 2 y_1\neq y_2 y1=y2时,因为y的取值是1或-1,所以我们可得:
λ 1 o l d − λ 2 o l d = c , λ 1 n e w − λ 2 n e w = c    ⟺    λ 2 n e w = λ 1 n e w − c \lambda^{old}_1-\lambda^{old}_2=c,\lambda^{new}_1-\lambda^{new}_2=c\iff \lambda^{new}_2=\lambda^{new}_1-c λ1oldλ2old=cλ1newλ2new=cλ2new=λ1newc
λ 1 n e w \lambda^{new}_1 λ1new取得最大值C时,同样 λ 2 n e w \lambda^{new}_2 λ2new也取得最大值C-c;当 λ 1 n e w \lambda^{new}_1 λ1new取得最小值0时,同样 λ 2 n e w \lambda^{new}_2 λ2new也取得最小值-c,所以 − c ≤ λ 2 n e w ≤ C − c -c\leq\lambda^{new}_2\leq C-c cλ2newCc,同时结合 0 ≤ λ 2 n e w ≤ C 0\leq\lambda^{new}_2\leq C 0λ2newC(取交集):
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,\lambda^{old}_2-\lambda^{old}_1),H=min(C,C+\lambda^{old}_2-\lambda^{old}_1) L=max(0,λ2oldλ1old)H=min(C,C+λ2oldλ1old)
(2)当 y 1 = y 2 y_1= y_2 y1=y2时,同理可得:
L = m a x ( 0 , λ 1 o l d + λ 2 o l d − C ) , H = m i n ( C , λ 1 o l d + λ 2 o l d ) L=max(0,\lambda^{old}_1+\lambda^{old}_2-C),H=min(C,\lambda^{old}_1+\lambda^{old}_2) L=max(0,λ1old+λ2oldC)H=min(C,λ1old+λ2old)
所以当求得 λ 2 \lambda_2 λ2后需要结合 L , H L,H L,H进行相应的处理。


现在我们求出 λ 2 n e w \lambda^{new}_2 λ2new之后,根据 λ 1 o l d y 1 + λ 2 o l d y 2 = λ 1 n e w y 1 + λ 2 n e w y 2 \lambda^{old}_1y_1+\lambda^{old}_2y_2=\lambda^{new}_1y_1+\lambda^{new}_2y_2 λ1oldy1+λ2oldy2=λ1newy1+λ2newy2,求出 λ 1 n e w \lambda^{new}_1 λ1new
λ 1 n e w = λ 1 o l d + ( λ 2 o l d − λ 2 n e w ) y 1 y 2 \lambda^{new}_1=\lambda^{old}_1+(\lambda^{old}_2-\lambda^{new}_2)y_1y_2 λ1new=λ1old+(λ2oldλ2new)y1y2

2.选择变量的启发式方法

SMO算法在每个子问题中选择两个变量优化,其中至少一个变量是违反KKT条件得。

2.1第一个变量 λ 1 \lambda_1 λ1的选择

SMO算法选择第一个变量的过程称为外层循环。基本思想是在训练样本中选取违反KKT条件最严重的样本点,并将其对应的变量作为第1个变量。违反KKT条件即是否满足KKT条件:
{ λ i = 0 ⇔ y i f ( x i ) ≥ 1 0 < λ i < C ⇔ y i f ( x i ) = 1 λ i = C ⇔ y i f ( x i ) ≤ 1 \begin{cases}\lambda_i=0 \Leftrightarrow y_if(x_i)\geq1\\0<\lambda_i<C \Leftrightarrow y_if(x_i)=1\\\lambda_i=C \Leftrightarrow y_if(x_i)\leq1\end{cases} λi=0yif(xi)10<λi<Cyif(xi)=1λi=Cyif(xi)1
其中 f ( x ) f(x) f(x)是超平面方程。

整体流程:外层循环首先遍历所有满足条件 0 < λ i < C 0<\lambda_i<C 0<λi<C的样本点,即在间隔边界上的支持向量点,检验他们是否满足KKT条件;如果这些样本点都满足KKT条件,那么遍历整个训练集,检验他们是否满足KKT条件。

2.2第二个变量 λ 2 \lambda_2 λ2的选择

选择第2个变量的标准是希望能使 λ 2 \lambda_2 λ2有足够大的变化,因为 λ 2 n e w = λ 2 o l d + y 2 ( E 1 − E 2 ) η \lambda^{new}_2=\lambda^{old}_2+\frac{y_2(E_1-E_2)}{\eta} λ2new=λ2old+ηy2(E1E2),所以我们会选择 ∣ E 1 − E 2 ∣ |E_1-E_2| E1E2最大的 λ 2 \lambda_2 λ2,即保证每次优化中采取最大步长。

在特殊情况下,如果内层循环通过上面方法找到的 λ 2 \lambda_2 λ2不能使得目标函数有足够的下降,那么继续选择 λ 2 \lambda_2 λ2,遍历在间隔边界上的支持向量点,一次将其作为 λ 2 \lambda_2 λ2试用,只有目标函数有足够的下降。若找不到合适的 λ 2 \lambda_2 λ2,那么遍历整个训练集;若仍然找不到则放弃第一个选择的 λ 1 \lambda_1 λ1,重新通过外层循环选择另外的 λ 1 \lambda_1 λ1



需要注意的是:每次在计算完两个 λ \lambda λ后都要更新超平面方程中的b:
0 < λ 1 n e w < C 0<\lambda_1^{new}<C 0<λ1new<C时由KKT条件可得 ∑ i = 1 N λ i y i K i 1 + b = y 1 ⇒ 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 \sum_{i=1}^N\lambda_iy_iK_{i1}+b=y_1\\\Rightarrow b^{new}_1=y_1-\sum_{i=3}^N\lambda_iy_iK_{i1}-\lambda_1^{new}y_1K_{11}-\lambda_2^{new}y_2K_{21} i=1NλiyiKi1+b=y1b1new=y1i=3NλiyiKi1λ1newy1K11λ2newy2K21
又因为由 E 1 = f ( x 1 ) − y 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 E_1=f(x_1)-y_1=\sum_{i=3}^N\lambda_iy_iK_{i1}+\lambda_1^{old}y_1K_{11}+\lambda_2^{old}y_2K_{21}+b^{old}-y_1 E1=f(x1)y1=i=3NλiyiKi1+λ1oldy1K11+λ2oldy2K21+boldy1可得:
y 1 − ∑ i = 3 N λ i y i K i 1 = − E 1 + λ 1 o l d y 1 K 11 + λ 2 o l d y 2 K 21 + b o l d y_1-\sum_{i=3}^N\lambda_iy_iK_{i1}=-E_1+\lambda_1^{old}y_1K_{11}+\lambda_2^{old}y_2K_{21}+b^{old} y1i=3NλiyiKi1=E1+λ1oldy1K11+λ2oldy2K21+bold
将上式代入b中可得:
b 1 n e w = b o l d − E 1 − y 1 ( λ 1 n e w − λ 1 o l d ) K 11 − y 2 ( λ 2 n e w − λ 2 o l d ) K 12 b^{new}_1=b^{old}-E_1-y_1(\lambda^{new}_1-\lambda^{old}_1)K_{11}-y_2(\lambda^{new}_2-\lambda^{old}_2)K_{12} b1new=boldE1y1(λ1newλ1old)K11y2(λ2newλ2old)K12
同理可得,当 0 < λ 2 n e w < C 0<\lambda_2^{new}<C 0<λ2new<C时:
b 2 n e w = b o l d − E 2 − y 1 ( λ 1 n e w − λ 1 o l d ) K 12 − y 2 ( λ 2 n e w − λ 2 o l d ) K 22 b^{new}_2=b^{old}-E_2-y_1(\lambda^{new}_1-\lambda^{old}_1)K_{12}-y_2(\lambda^{new}_2-\lambda^{old}_2)K_{22} b2new=boldE2y1(λ1newλ1old)K12y2(λ2newλ2old)K22

如果 λ 1 n e w , λ 2 n e w \lambda_1^{new},\lambda_2^{new} λ1new,λ2new同时满足 0 < λ i n e w < C 0<\lambda_i^{new}<C 0<λinew<C,那么 b 1 n e w = b 2 n e w b_1^{new}=b_2^{new} b1new=b2new;如果 λ 1 n e w , λ 2 n e w \lambda_1^{new},\lambda_2^{new} λ1new,λ2new为0或C,那么取 b 1 n e w , b 2 n e w b_1^{new},b_2^{new} b1newb2new的中点作为更新的b。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值