机器学习 06:SMO 算法

概述


S M O SMO SMO 是由 P l a t t Platt Platt 在 1998 年提出的、针对软间隔最大化 S V M SVM SVM 对偶问题求解的一个算法,其基本思想很简单:如果所有变量的解都满足此优化问题的 KKT 条件,则这个优化问题的解就得到了;否则在每一步优化中,挑选出诸多参数 α k   ( k = 1 , 2 , ⋯   , n ) \alpha_k\ (k=1,2,\cdots,n) αk (k=1,2,,n) 中的两个参数 α i , α j \alpha_i,\alpha_j αi,αj 作为变量,其余参数都视为常数,问题就变成了类似于二次方程求最大值的问题,从而我们就能求出解析解,这两个变量中,一个是违反 KKT 条件最严重的那一个,另一个由约束条件自动确定一个。


选择变量的启发式方法


先来回顾一下 S V M SVM SVM 中的优化目标函数:

min ⁡ α i ≥ 0 ( 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 . ∑ i = 1 N α i y i = 0 ,    0 ≤ α i ≤ C \min\limits_{\alpha_i\ge0}\left(\frac{1}{2}\sum\limits_{i=1}^N\sum\limits_{j=1}^N\alpha_i\alpha_jy_iy_jK(\vec x_i,\vec x_j)-\sum\limits_{i=1}^N\alpha_i\right)\\s.t. \sum\limits_{i=1}^N\alpha_iy_i=0,\ \ 0\le\alpha_i\le C αi0min(21i=1Nj=1NαiαjyiyjK(x i,x j)i=1Nαi)s.t.i=1Nαiyi=0,  0αiC

由于要满足约束 ∑ i = 1 N α i y i = 0 \sum\limits_{i=1}^N\alpha_iy_i=0 i=1Nαiyi=0,所以每次需要选取两个 α i \alpha_i αi 做为变量,这一点与坐标上升法不同。

要使优化目标函数有解,我们需要使其满足 K K T KKT KKT 条件中的互补松弛:

α i ( y i ( w ⃗ ⋅ ϕ ( x ⃗ i ) + b ) − 1 + ξ i ) = 0 \alpha_i(y_i(\vec w\cdot\phi(\vec x_i)+b)-1+\xi_i)=0 αi(yi(w ϕ(x i)+b)1+ξi)=0

根据上面的条件我们可以得出:

{ y i ( w ⃗ ⋅ ϕ ( x ⃗ i ) + b ) ≥ 1 α i = 0 y i ( w ⃗ ⋅ ϕ ( x ⃗ i ) + b ) = 1 0 ≤ α i ≤ C y i ( w ⃗ ⋅ ϕ ( x ⃗ i ) + b ) ≤ 1 α i = C \begin{cases}y_i(\vec w\cdot\phi(\vec x_i)+b)\ge1&\alpha_i=0\\y_i(\vec w\cdot\phi(\vec x_i)+b)=1&0\le\alpha_i\le C\\y_i(\vec w\cdot\phi(\vec x_i)+b)\le1&\alpha_i=C\end{cases} yi(w ϕ(x i)+b)1yi(w ϕ(x i)+b)=1yi(w ϕ(x i)+b)1αi=00αiCαi=C

由于 w ⃗ = ∑ j = 1 N α j y j ϕ ( x ⃗ j ) \vec w=\sum\limits^N_{j=1}\alpha_jy_j\phi(\vec x_j) w =j=1Nαjyjϕ(x j),我们令

g ( x ⃗ i ) = w ⃗ ⋅ ϕ ( x ⃗ i ) + b = ∑ j = 1 N α j y j K ( x ⃗ i , x ⃗ j ) + b g(\vec x_i)=\vec w\cdot\phi(\vec x_i)+b=\sum\limits^N_{j=1}\alpha_jy_jK(\vec x_i,\vec x_j)+b g(x i)=w ϕ(x i)+b=j=1NαjyjK(x i,x j)+b

则可以推出以下三个条件:

{ y i g ( x ⃗ i ) ≥ 1 α i = 0 y i g ( x ⃗ i ) = 1 0 ≤ α i ≤ C y i g ( x ⃗ i ) ≤ 1 α i = C \begin{cases}y_ig(\vec x_i)\ge1&\alpha_i=0\\y_ig(\vec x_i)=1&0\le\alpha_i\le C\\y_ig(\vec x_i)\le1&\alpha_i=C\end{cases} yig(x i)1yig(x i)=1yig(x i)1αi=00αiCαi=C


选择第一个变量

S M O SMO SMO 中,我们称第一个变量为外循环。外循环取的是样本中违反 K K T KKT KKT 条件最严重的点。

我们可以借助上面推出的条件来度量一个点违反 K K T KKT KKT 条件的程度,具体来说,我们定义三份“差异向量”

c ⃗ ( k ) = ( c 1 ( k ) , c 2 ( k ) , ⋯   , c N ( k ) ) ,   k = 1 , 2 , 3 c i ( k ) = y i g ( x ⃗ i ) − 1 \vec c^{(k)}=(c_1^{(k)},c_2^{(k)},\cdots,c_N^{(k)}),\ k=1,2,3\\c_i^{(k)}=y_ig(\vec x_i)-1 c (k)=(c1(k),c2(k),,cN(k)), k=1,2,3ci(k)=yig(x i)1

其中第 k k k 个向量对应着第 k k k 个条件。对于不同的条件,我们按不同方式将对应向量的某些位置置为 0。

  • 第一个条件: α i = 0 ⇒ c i ( 1 ) ≥ 0 \alpha_i=0\Rightarrow c_i^{(1)}\ge0 αi=0ci(1)0 若满足:

    • α i > 0 \alpha_i>0 αi>0 c i ( 1 ) ≤ 0 c_i^{(1)}\le0 ci(1)0
    • α i = 0 \alpha_i=0 αi=0 c i ( 1 ) ≥ 0 c_i^{(1)}\ge0 ci(1)0
  • 第二个条件: 0 ≤ α i ≤ C ⇒ c i ( 2 ) = 0 0\le\alpha_i\le C\Rightarrow c_i^{(2)}=0 0αiCci(2)=0 若满足:

    • α i = 0 \alpha_i=0 αi=0 α i = C \alpha_i=C αi=C c i ( 2 ) ≠ 0 c_i^{(2)}\ne0 ci(2)=0
    • 0 ≤ α i ≤ C 0\le\alpha_i\le C 0αiC c i ( 2 ) = 0 c_i^{(2)}=0 ci(2)=0
  • 第三个条件: α i = C ⇒ c i ( 3 ) ≤ 0 \alpha_i=C\Rightarrow c_i^{(3)}\le0 αi=Cci(3)0

    • α i < C \alpha_i< C αi<C c i ( 3 ) ≥ 0 c_i^{(3)}\ge0 ci(3)0
    • α i = C \alpha_i=C αi=C c i ( 3 ) ≤ 0 c_i^{(3)}\le0 ci(3)0

最后只需要将这三个差异向量的平方相加作为“损失”,从而直接选出损失最大的 α i \alpha_i αi 作为外循环即可。


选择第二个变量

第二个变量成为内循环,只需要简单的随机选取一个即可。

取出这两个变量之后,把其它变量看做常数,这样优化目标函数就变成了带约束的二次规划问题。


目标函数的优化


假设选择的两个变量是 α 1 , α 2 \alpha_1,\alpha_2 α1,α2,把其它的 α i \alpha_i αi 都看作常数。定义 K i j = K ( x ⃗ i , x ⃗ j ) K_{ij}=K(\vec x_i,\vec x_j) Kij=K(x i,x j) 那么原先的优化目标函数就成了:
min ⁡ α 1 , α 2 1 2 K 11 α 1 2 + 1 2 K 2 , 2 α 2 2 + y 1 y 2 K 1 , 2 α 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 + c s . t .    α 1 y 1 + α 2 y 2 = C 0 ≤ α i ≤ C ,   i = 1 , 2 \min\limits_{\alpha_1,\alpha_2}\frac{1}{2}K_{11}\alpha_1^2+\frac{1}{2}K_{2,2}\alpha_2^2+y_1y_2K_{1,2}\alpha_1\alpha_2-(\alpha_1+\alpha_2)+y_1\alpha_1\sum\limits^N_{i=3}y_i\alpha_iK_{i,1}+y_2\alpha_2\sum\limits^N_{i=3}y_i\alpha_iK_{i,2}+c\\s.t.\ \ \alpha_1y_1+\alpha_2y_2=C\\0\le\alpha_i\le C,\ i=1,2 α1,α2min21K11α12+21K2,2α22+y1y2K1,2α1α2(α1+α2)+y1α1i=3NyiαiKi,1+y2α2i=3NyiαiKi,2+cs.t.  α1y1+α2y2=C0αiC, i=1,2


无约束求极值

我们先暂时不管约束条件 0 ≤ α i ≤ C , i = 1 , 2 0\le\alpha_i\le C,i=1,2 0αiC,i=1,2,通过 α 1 = ( C − α 2 y 2 ) y 1 \alpha_1=(C-\alpha_2y_2)y_1 α1=(Cα2y2)y1 可以将目标函数替换成单变量形式:
min ⁡ ϕ ( α 2 ) = 1 2 K 1 , 1 ( C − α 2 y 2 ) 2 + 1 2 K 2 , 2 α 2 2 + y 2 K 12 α 2 ( C − α 2 y 2 ) − y 1 ( C − α 2 y 2 ) − α 2 + ( C − α 2 y 2 ) ∑ i = 3 N α i y i K 1 , i + y 2 α 2 ∑ j = 3 N α j y j K 2 , j + c \min \phi(\alpha_2)=\frac12K_{1,1}(C-\alpha_2y_2)^2+\frac12K_{2,2}\alpha^2_2+y_2K_{12}\alpha_2(C-\alpha_2y_2)-y_1(C-\alpha_2y_2)-\alpha_2+(C-\alpha_2y_2)\sum\limits^N_{i=3}\alpha_iy_iK_{1,i}+y_2\alpha_2\sum\limits^N_{j=3}\alpha_jy_jK_{2,j}+c minϕ(α2)=21K1,1(Cα2y2)2+21K2,2α22+y2K12α2(Cα2y2)y1(Cα2y2)α2+(Cα2y2)i=3NαiyiK1,i+y2α2j=3NαjyjK2,j+c

我们设更新前的值为 α i o l d \alpha_i^{old} αiold, 更新后的值为 α i n e w \alpha_i^{new} αinew,对目标函数进行一个偏导的求:
∂ ϕ ( α 2 n e w ) ∂ α 2 n e w = ( K 1 , 1 + K 2 , 2 − 2 K 1 , 2 ) α 2 n e w − K 1 , 1 C y 2 + K 1 , 2 C y 2 + y 1 y 2 − 1 − y 2 ∑ i = 3 N α i y i K 1 , i + y 2 ∑ j = 3 N α j y j K 2 , j = 0 \frac{\partial\phi(\alpha_2^{new})}{\partial\alpha_2^{new}}=(K_{1,1}+K_{2,2}-2K_{1,2})\alpha_2^{new}-K_{1,1}Cy_2+K_{1,2}Cy_2+y_1y_2-1-y_2\sum\limits^N_{i=3}\alpha_iy_iK_{1,i}+y_2\sum\limits^N_{j=3}\alpha_jy_jK_{2,j}=0 α2newϕ(α2new)=(K1,1+K2,22K1,2)α2newK1,1Cy2+K1,2Cy2+y1y21y2i=3NαiyiK1,i+y2j=3NαjyjK2,j=0

因为 SVM 中数据点的预测值为: f ( x ⃗ j ) = ∑ i = 1 N α i y i K ( x ⃗ i , x ⃗ j ) + b f(\vec x_j)=\sum\limits^N_{i=1}\alpha_iy_iK(\vec x_i,\vec x_j)+b f(x j)=i=1NαiyiK(x i,x j)+b 因此有:

  • ∑ i = 3 N α i y i K 1 , i = f ( x ⃗ 1 ) − α 1 n e w y 1 K 1 , 1 − α 2 n e w y 2 K 1 , 2 − b \sum\limits^N_{i=3}\alpha_iy_iK_{1,i}=f(\vec x_1)-\alpha_1^{new}y_1K_{1,1}-\alpha_2^{new}y_2K_{1,2}-b i=3NαiyiK1,i=f(x 1)α1newy1K1,1α2newy2K1,2b
  • ∑ i = 3 N α i y i K 2 , i = f ( x ⃗ 2 ) − α 1 n e w y 1 K 1 , 2 − α 2 n e w y 2 K 2 , 2 − b \sum\limits^N_{i=3}\alpha_iy_iK_{2,i}=f(\vec x_2)-\alpha_1^{new}y_1K_{1,2}-\alpha_2^{new}y_2K_{2,2}-b i=3NαiyiK2,i=f(x 2)α1newy1K1,2α2newy2K2,2b

另有: C = α 1 o l d y 1 + α 2 o l d y 2 C=\alpha_1^{old}y_1+\alpha_2^{old}y_2 C=α1oldy1+α2oldy2

将上面三个式子带入偏导中并化简得:
( K 1 , 1 + K 2 , 2 − 2 K 1 , 2 ) α 2 n e w = ( K 1 , 1 + K 2 , 2 − 2 K 1 , 2 ) α 2 o l d + y 2 [ ( f ( x ⃗ 1 ) − y 1 ) − ( f ( x ⃗ 2 ) − y 2 ) ] (K_{1,1}+K_{2,2}-2K_{1,2})\alpha_2^new=(K_{1,1}+K_{2,2}-2K_{1,2})\alpha_2^{old}+y_2[(f(\vec x_1)-y_1)-(f(\vec x_2)-y_2)] (K1,1+K2,22K1,2)α2new=(K1,1+K2,22K1,2)α2old+y2[(f(x 1)y1)(f(x 2)y2)]

η = K 1 , 1 + K 2 , 2 − 2 K 1 , 2 \eta=K_{1,1}+K_{2,2}-2K_{1,2} η=K1,1+K2,22K1,2,则有:
{ α 2 n e w = α 2 o l d + y 2 [ ( f ( x ⃗ 1 ) − y 1 ) − ( f ( x ⃗ 2 ) − y 2 ) ] η α 1 o l d y 1 + α 2 o l d y 2 = α 1 n e w y 1 + α 2 n e w y 2 \begin{cases}\alpha_2^{new}=\alpha_2^{old}+\frac{y_2[(f(\vec x_1)-y_1)-(f(\vec x_2)-y_2)]}{\eta}\\\alpha_1^{old}y_1+\alpha_2^{old}y_2=\alpha_1^{new}y_1+\alpha_2^{new}y_2\end{cases} {α2new=α2old+ηy2[(f(x 1)y1)(f(x 2)y2)]α1oldy1+α2oldy2=α1newy1+α2newy2

这样我们就求出了这两个变量在无约束情况下的解析解。


加入约束

y 1 ≠ y 2 y_1\ne y_2 y1=y2 时,线性限制条件可以写成: α 1 − α 2 = k \alpha_1-\alpha_2=k α1α2=k,根据 k k k 的正负可以得到不同的上下界,可以统一表示为:

  • 下界: L = max ⁡ ( 0 , α 2 − α 1 ) L=\max(0,\alpha_2-\alpha_1) L=max(0,α2α1)
  • 上界: H = min ⁡ ( C , C + α 2 − α 1 ) H=\min(C,C+\alpha_2-\alpha_1) H=min(C,C+α2α1)

y 1 = y 2 y_1=y_2 y1=y2 时,限制条件可以写成: α 1 + α 2 = k \alpha_1+\alpha_2=k α1+α2=k,此时上下界可以统一为:

  • 下界: L = m a x ( 0 , α 1 + α 2 − C ) L=max(0,\alpha_1+\alpha_2-C) L=max(0,α1+α2C)
  • 上界: H = m i n ( C , α 1 + α 2 ) H=min(C,\alpha_1+\alpha_2) H=min(C,α1+α2)

由此可知,此约束为方形约束,下图为它的限制区域。
在这里插入图片描述

根据得到的上下界,我们可知加入约束后的 α 2 n e w \alpha_2^{new} α2new 为:
α 2 n e w = { H α 2 n e w > H a 2 n e w L ≤ α 2 n e w ≤ H L α 2 n e w < L \alpha_2^{new}=\begin{cases}H&\alpha_2^{new}>H\\a_2^{new}&L\le\alpha_2^{new}\le H\\L&\alpha_2^{new}<L\end{cases} α2new=Ha2newLα2new>HLα2newHα2new<L

这样就实现了对 α i , α j \alpha_i,\alpha_j αi,αj 的更新。


更新阈值 b


每次更新完一对 α i , α j \alpha_i,\alpha_j αi,αj 之后都需要重新计算阈值 b b b,因为它关系到 f ( x ⃗ ) f(\vec x) f(x ) 的计算和优化时误差 E i E_i Ei 的计算。

0 < a l p h a 1 n e w < C 0<alpha_1^{new}<C 0<alpha1new<C,根据 K K T KKT KKT 条件可知相应的数据点为支持向量,满足 y 1 ( w T + b ) = 1 y_1(w^T+b)=1 y1(wT+b)=1,两边同时乘 y 1 y_1 y1 得: ∑ i = 1 N α i y i K i , 1 + b = y 1 \sum\limits^N_{i=1}\alpha_iy_iK_{i,1}+b=y_1 i=1NαiyiKi,1+b=y1,因此 b 1 n e w b_1^{new} b1new 的值为:
b 1 n e w = y 1 − ∑ i = 3 N α i y i K i , 1 − α 1 n e w y 1 K 1 , 1 − α 2 n e w y 2 K 2 , 1 b_1^{new}=y1-\sum\limits^N_{i=3}\alpha_iy_iK_{i,1}-\alpha_1^{new}y_1K_{1,1}-\alpha_2^{new}y_2K_{2,1} b1new=y1i=3NαiyiKi,1α1newy1K1,1α2newy2K2,1

其中, y 1 − ∑ i = 3 N α i y i K i , 1 = − E 1 + α 1 o l d y 1 K 1 , 1 + α 2 o l d y 2 K 2 , 1 + b o l d y1-\sum\limits^N_{i=3}\alpha_iy_iK_{i,1}=-E_1+\alpha_1^{old}y_1K_{1,1}+\alpha_2^{old}y_2K_{2,1}+b^{old} y1i=3NαiyiKi,1=E1+α1oldy1K1,1+α2oldy2K2,1+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 1 , 2 ( α 1 n e w − α 1 o l d ) − y 2 K 2 , 2 ( α 2 n e w − α 2 o l d ) + b o l d b_2^{new}=-E_2-y_1K_{1,2}(\alpha_1^{new}-\alpha_1^{old})-y_2K_{2,2}(\alpha_2^{new}-\alpha_2^{old})+b^{old} b2new=E2y1K1,2(α1newα1old)y2K2,2(α2newα2old)+bold

b 1 , b 2 b_1,b_2 b1,b2 都有效时他们是相等的,即 b n e w = b 1 n e w = b 2 n e w b^{new}=b_1^{new}=b_2^{new} bnew=b1new=b2new
α 1 , α 2 \alpha_1,\alpha_2 α1,α2 都在边界上,且 L ≠ H L\ne H L=H 时,选择它们的中点作为新的阈值: 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





同步更新于:SP-FA 的博客


  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SP FA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值