SMO算法

SMO算法(Sequential minimal optimization)要解决的对偶问题

maxα 12i=1mj=1mαiαjy(i)y(j)x(i),x(j)+i=1mαi max α   − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y ( i ) y ( j ) ⟨ x ( i ) , x ( j ) ⟩ + ∑ i = 1 m α i

s.t. i=1mαiyi=0 s.t.   ∑ i = 1 m α i y i = 0

0αiC, i=1,...,m 0 ⩽ α i ⩽ C ,   i = 1 , . . . , m

该问题的收敛条件
αi=0αi=C0<αi<Cy(i)(wTx(i)+b)1y(i)(wTx(i)+b)1y(i)(wTx(i)+b)=1 α i = 0 ⇒ y ( i ) ( w T x ( i ) + b ) ⩾ 1 α i = C ⇒ y ( i ) ( w T x ( i ) + b ) ⩽ 1 0 < α i < C ⇒ y ( i ) ( w T x ( i ) + b ) = 1

SMO算法中的“minimal”表示我们希望一次迭代改变最小数量的 αi α i ,在该算法中只需要改变2个

Coordinate ascent
这里写图片描述
坐标上升法的特点是,尽管可能需要比较多的迭代次数,但是每一步迭代的代价非常低

SMO算法采用了Coordinate ascent的思想

考虑满足约束条件的 α1,α2,...,αm α 1 , α 2 , . . . , α m ,现在我们采用Coordinate ascent的思想来完成一次迭代,假设我们固定 α2,...,αm α 2 , . . . , α m ,取 α1 α 1 进行优化,这样做可行吗?

回答是不可行,因为约束 i=1mαiyi=0 ∑ i = 1 m α i y i = 0 始终是存在的,这意味着固定 α2,...,αm α 2 , . . . , α m ,则 α1 α 1 的取值只能是唯一的,所以不能只取 αi α i 进行优化,而应该取一对 αi α i αj α j 进行优化

假设我们固定 α3,,αm α 3 , … , α m ,取 α1 α 1 α2 α 2 进行优化

α1y(1)+α2y(2)=ζ α 1 y ( 1 ) + α 2 y ( 2 ) = ζ

α1 α 1 α2 α 2 为坐标轴,画出如下示意图

由于 α1 α 1 α2 α 2 需要满足下列3个条件
0α1C 0 ⩽ α 1 ⩽ C
0α2C 0 ⩽ α 2 ⩽ C
α1y(1)+α2y(2)=ζ α 1 y ( 1 ) + α 2 y ( 2 ) = ζ

(α1,α2) ( α 1 , α 2 ) 可行的位置为图中红色线段, α1 α 1 α2 α 2 各自可行的位置为图中绿色线段,换句话说, α1 α 1 α2 α 2 的取值范围被各自限定在一个区间内

假设我们选取 α2 α 2 进行优化,并设 α2 α 2 可行的上下界分别为 H H L,即 Lα2H L ⩽ α 2 ⩽ H

首先我们利用 α1y(1)+α2y(2)=ζ α 1 y ( 1 ) + α 2 y ( 2 ) = ζ 消去 α1 α 1 ,最终得到一个只包含 α2 α 2 的式子,这个式子的最高次数为 2 2 ,可以直接套用公式求出最优解α2(初中就已经学过如何求二次函数的最值)

然后还需要检查 α2 α 2 ∗ 是否在区间 [L,H] [ L , H ] 内,如果不是,需要进行处理,得到迭代后的 αnew2 α 2 n e w ,处理方法如下

αnew2=Hif α2>Hα2if Lα2HLif α2<L(46)(47)(48) α 2 n e w = { (46) H i f   α 2 ∗ > H (47) α 2 ∗ i f   L ⩽ α 2 ∗ ⩽ H (48) L i f   α 2 ∗ < L

再利用 αnew1y(1)+αnew2y(2)=ζ α 1 n e w y ( 1 ) + α 2 n e w y ( 2 ) = ζ 求出 αnew1 α 1 n e w ,此时,本次迭代的工作完成

【重新思考】

假设参数更新前为 [αold1αold2αold3αold4αoldm] [ α 1 old α 2 old α 3 old α 4 old ⋯ α m old ]

我们选择变量 α1 α 1 α2 α 2 进行更新

参数更新后为 [αnew1αnew2αold3αold4αoldm] [ α 1 new α 2 new α 3 old α 4 old ⋯ α m old ]

那么有
αold1+αold2=i=3mαoldi=ζ α 1 old + α 2 old = − ∑ i = 3 m α i old = ζ
αnew1+αnew2=i=3mαoldi=ζ α 1 new + α 2 new = − ∑ i = 3 m α i old = ζ

为了计算 ζ ζ ,可以使用 αold1+αold2 α 1 old + α 2 old 计算,或者使用 i=3mαoldi − ∑ i = 3 m α i old 计算,显然,计算简单的是后者

这就是为什么需要使用 αold1 α 1 old αold2 α 2 old 的原因

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值