从零开始学习SVM(三)---SMO算法原理

前两节我们一直在介绍svm的原理,优化目标函数,并且已经推导出了最后的目标函数,现在终于要求解这个问题了并得到模型,在上一节《从零开始学习SVM(二)—松弛变量》中我们介绍了松弛变量的的概念,推导出了加入松弛变量后的目标函数并且后面将会一直使用这个目标函数:

maxαi=1mαi12i=1mj=1mαiαjyiyjxTixj1

s.t.i=1mαiyi=0(1.1)
Cαi0,i=1,2,,m

KKT条件:
αi0
yif(xi)1+ζi0
αi(yif(xi)1+ζi)=0
ζi0,uiζi=0

有了优化目标之后,我们终于到了介绍如何求出最优解的部分:SMO算法。当然解决办法有很多中,在笔者查看了众多资料后大多数就是推荐使用SMO(Sequential Minimal Optimization;序列最小优化)算法,这种算法高效,求解时间短。
还记得我们的模型公式吗?
f(x)=wTx+b

也就是说我们求解出来w与b这个模型就算得到了,还记得在第一节中我们在得到最初的目标函数的对偶函数时候, 我们得到了 w 的另一种表示方式
L(w,b,a)w=wi=1mαiyixi=0
代入模型函数
f(x)=i,jmαiyi(xi)Txj+b2
也就是说我们只要求解出每个样本对应的拉格朗日乘子 αi 就能求出模型。可是这 αi= { α1,α2,,αm }这参数也太多了,但是别忘了我们求出了优化目标函数的对偶函数函数(1),但是这仍然要求很多参数啊,别急我们先介绍一个优化目标的思路。就拿最近比较火的游戏《荒野求生》又叫吃鸡的游戏来说吧,在游戏过程中经常会在一段时间后刷圈,只有在圈内我们才能苟活,每刷一次我们就得往圈内跑,可是怎么跑呢?各路都有人,我们是直直的跑(一般这样会很快gg),还是绕开各路人马,让他们厮杀我们坐收渔翁之利?我们想要安全的到达圈内当然是绕着跑啦。这与我们的求解思路是不是很一直?我们想要求解出参数,想要直奔目标直接对目标函数求解肯定很费事,我敢说你很快就会gg,但是如果我们绕开这个目标函数最优解,而是通过先优化其中的两个,其他的不管,然后循环这样操作,直到所有的参数 αi 都满足KKT条件是不是也可以达到我们的目标呢?当然是啦,看下图,红线代表直奔目标,这样是很快,但是很容易gg啊,还是蓝线我们一点一点的达到目标,我们先达到一个方向的最优,先按照一个方向固定其他方式,当所有方向都达到最优我们也达到了我们目标
这里写图片描述
同理,SMO算法就是让我们先固定其中的两个参数 α1,α2 其他的不管,然后依次随机的抽取两个 α 对,知道所有的 α 都满足KKT条件,那么不就得到了我们优化目标了吗?
为什么要固定两个呢?一个,两个,三个,四个不行吗?
还记得我们之前得到的一个kkt条件吗?就是上面的(1.1)约束条件:
i=1mαiyi=0

没错就是它,因为我们要满足这个条件,所以我们只改变其中的一个 αi 肯定不行啊,因为这样还会等于0吗?那么这么说3个4个也可以啊,是可以啊,但是2个不是简单嘛!!也就是说
α1y1+α2y2+i=3mαiyi=0
α1y1+α2y2=i=3mαiyi
令:
α1y1+α2y2=ϵ
无论你怎么改变 α1,α2 反正和为常量。设更新后的 α 分别为 αnew1,αnew2 ,所以
α1y1+α2y2=αnew1y1+αnew2y2=ϵ(3)
可是哪些 α 需要被该变呢?有什么标准呢?当然是KKT条件啦,只要满足约束就是好的,不满足则需要改变进行优化。还记得这个约束条件吗?
s.t.yi(wTxi+b)1i=1,2,3,m.
也就是 yif(xi)1 与(1.1)约束,首先找到满足约束的 α ,我们可知:
αi=0,yif(xi)>1线
0αiC,yif(xi)=1
αi=C,yif(xi)<1

以上都是满足约束的,除了这些其他的都是不满足约束的,也就是需要优化的。
由公式(3),我们假设 y1y2 异号,即 α1α2=ϵ 因为 0<α1,α2<C;α2=α1ϵ 则: ϵ<α2<Cϵ 因为 0<α2<C 这个条件,所以我们取两者的交集,即:
max(0,ϵ)<α2<min(C,Cϵ)
同理可得:
max(0,ϵ)<α2<min(C,C+ϵ)


黄色区域是满足约束的区域,不仅要在黄色区域内,并且还得在 α1α2=ϵ 这条直线上。如果两者是同号的同理可得: 这里写图片描述
我为了简化公式,把 α1 α2 表示
α1y1+α2y2=i=3mαiyi=ϵ
两边同乘以 y1
α1+y1y2α2=y1i=3mαiyi=y1ϵ
α1=y1i=3mαiyiy1y2α2
我们把 a1 带入原目标函数使得原目标函数只带有 α2 (很多人到了这里就贴其他地方弄来的结果,也没有具体推到,直接看到结果我也很茫然,索性自己推导一遍):
i=1mαi12i=1mj=1mαiαjyiyjxTixj
可得:
α1+α2+i=3mαi12α1α1y1y1K(x1,x1)12α1α2y1y2K(x1,x2)12α2α1y2y1K(x2,x1)12α2α2y2y2K(x2,x2)
12α1y1j=3myjαjK(x1,xj)12α2y2j=3myjαjK(x2,xj)12α1y1i=3myiαjK(xi,x1)
12α2y2i=3myiαjK(xi,x2)12i=3mj=3mαiαjyiyjK(xi,xj)
令:
i=3mαi12i=3mj=3mαiαjyiyjK(xi,xj)=Const()
Q=y1i=3mαiyi;y1y2α2=Wα2
α1=QWα2
V1=j=3myjαjK(x1,xj)
V2=j=3myjαjK(x2,xj)
整理可得:
α1+α212α1α1K(x1,x1)α1α2WK(x1,x2)12α2α2K(x2,x2)
α1y1V1α2y2V2Const
带入 a1 可得:
(QWα2)+α212(QWα2)2K(x1,x1)α2(QWα2)WK(x2,x1)
12α2α2K(x2,x2)(QWα2)y1V1α2y2V2Const
其中K(x,y)代表x与y的内积。 对 α2
1W+(QWα2)Wk(x1,x1)
(Q2Wα2)WK(x1,x2)α2K(x2,x2)+y2V1y2V2
1W+WQ(K(x1,x1)K(x1,x2)α2(2K(x1,x2)K(x1,x1)K(x2,x2)))+y2(V1V2)
1W+y2(V1V2)+WQ(K(x1,x1)K(x1,x2)=α2(2K(x1,x2)K(x1,x1)K(x2,x2)))
这时候我们就求到了一般形式,我们继续简化公式:
f(xi)=wTxi+b
把w换为之前对目标函数求偏导获取的值:
f(xi)=jmαjyjK(xi,xj)+b
所以:
Vi=j=3myjαjK(xi,xj)=f(xi)j=12yjαjK(xi,xj)b
带入上式可得:
1W+y2(f(x1)f(x2)j=12yjαjK(x1,xj)+j=12yjαjK(x2,xj))+WQ(K(x1,x1)K(x1,x2)
=α2(2K(x1,x2)K(x1,x1)K(x2,x2)))
这个整体为:
j=12yjαjK(x1,xj)+j=12yjαjK(x2,xj)=
y2α2K(x2,x2)y1α1K(x1,x1)
步步为营,接着我们替换Q:
αnew1+Wαnew2=α1+Wα2=y1i=3mαiyi=Q
心好累,终于到了更新 αnew2
αnew2(2K(x1,x2)K(x1,x1)K(x2,x2)))=
α2(2K(x1,x2)K(x1,x1)K(x2,x2)))+y2(f(x1)f(x2)+y2y1)
αnew2=α2+y2(f(x1)y1f(x2)+y2)(2K(x1,x2)K(x1,x1)K(x2,x2)))
αnew2=α2+y2(E1E2)η

结合上面的 α 的取值范围: 0<αnew2<C 可得:
s

那我们 b 如何更新呢?因为在更新α之后,那么标签 yi 应该与 f(xi) 值相等(x_i是支持向量):

yi=f(xi)=j=12yjαjK(xi,xj)+bi
经过移项后得到:
yij=32yjαjK(xi,xj)y1αnew1K(xi,x1)y2αnew2K(xi,x2)=bnewi
结合 Ei
Ei=f(xi)yi=
y1α1K(xi,x1)+y2α2K(xi,x2)+j=32yjαjK(xi,xj)+biyi

猛然发现两个有共同项 yi2j=3yjαjK(xi,xj) 啊!那我们联立两个方程好了:
bnewi=Ei+bi+y1α1K(xi,x1)+y2α2K(xi,x2)
y1αnew1K(xi,x1)y2αnew2K(xi,x2)

但是我们取哪个b呢?当然是哪个 αi 在(0,C)区间内取哪个,因为符合这个要求的点才是“支持向量”啊,不符合我们当然就不要,但是如何碰巧都在区间内呢?那我们就折中取b1与b2的平均值。
亲爱的读者如果你能看到这,我真心的感谢你对我的支持与认可,如果有任何疑问欢迎交流提问。我真的很想把代码也写上去,这样更容易理解上述过程,当时篇幅过大,使用csdn的markdown编辑器很烦,每写一句话都会重新解析,偶尔会使得浏览器死掉难以继续写下去。到此我们的线性分类就结束了,后面会推出线性分类实例与线性不可分的介绍,欢迎关注我的微信公共号

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值