【机器学习详解】SMO算法剖析「建议收藏」

【机器学习详解】SMO算法剖析「建议收藏」本文力求简化SMO的算法思想,毕竟自己理解有限,无奈还是要拿一堆公式推来推去,但是静下心看完本篇并随手推导,你会迎刃而解的。推荐参看SMO原文中的伪代码。**1.SMO概念**===========上一篇博客已经详细介绍了[SVM原理](http://blog.csdn.net/luoshixian099/article/details/51073885),为了方便求解,把原始最优化问题转化成了其对偶问题,因

大家好,又见面了,我是你们的朋友全栈君。

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51227754

CSDN



本文力求简化SMO的算法思想,毕竟自己理解有限,无奈还是要拿一堆公式推来推去,但是静下心看完本篇并随手推导,你会迎刃而解的。推荐参看SMO原文中的伪代码。

1.SMO概念

上一篇博客已经详细介绍了SVM原理,为了方便求解,把原始最优化问题转化成了其对偶问题,因为对偶问题是一个凸二次规划问题,这样的凸二次规划问题具有全局最优解,如下:
这里写图片描述
其中 (xi,yi) 表示训练样本数据, xi 为样本特征, yi{
1,1}
为样本标签,C为惩罚系数由自己设定。上述问题是要求解N个参数 (α1,α2,α3,...,αN) ,其他参数均为已知,有多种算法可以对上述问题求解,但是算法复杂度均很大。但1998年,由Platt提出的序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数,方法类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。

2.SMO原理分析

2.1视为一个二元函数

为了求解N个参数 (α1,α2,α3,...,αN) ,首先想到的是坐标上升的思路,例如求解 α1 ,可以固定其他N-1个参数,可以看成关于 α1 的一元函数求解,但是注意到上述问题的等式约束条件 Ni=1yiαi=0 ,当固定其他参数时,参数 α1 也被固定,因此此种方法不可用。
SMO算法选择同时优化两个参数,固定其他N-2个参数,假设选择的变量为 α1,α2 ,固定其他参数 α3,α4,...,αN ,由于参数 α3,α4,...,αN 的固定,可以简化目标函数为只关于 α1,α2 的二元函数, Constant 表示常数项(不包含变量 α1,α2 的项)。

min Ψ(α1,α2)=12K11α21+12K22α22+y1y2K12α1α2(α1+α2)+y1v1α1+y2v2α2+Constant(1)

其中

vi=Nj=3αjyjK(xi,xj),i=1,2

2.2视为一元函数

由等式约束得: α1y1+α2y2=Ni=3αiyi=ζ ,可见 ζ 为定值。
等式 α1y1+α2y2=ζ 两边同时乘以 y1, y21=1 ,得

α1=(ζy2α2)y1(2)

(2)式带回到(1)中得到只关于参数

α2
的一元函数,由于常数项不影响目标函数的解,以下省略掉常数项

Constant



min Ψ(α2)=12K11(ζα2y2)2+12K22α22+y2K12(ζα2y2)α2(ζα2y2)y1α2+v1(ζα2y2)+y2v2α2(3)

2.3对一元函数求极值点

上式中是关于变量 α2 的函数,对上式求导并令其为0得:
Ψ(α2)α2=(K11+K222K12)α2K11ζy2+K12ζy2+y1y21v1y2+v2y2=0

1.由上式中假设求得了 α2 的解,带回到(2)式中可求得 α1 的解,分别记为 αnew1,αnew2 ,优化前的解记为 αold1,αold2 ;由于参数 α3,α4,...,αN 固定,由等式约束 Ni=1yiαi=0 αold1y1+αold2y2=Ni=3αiyi=αnew1y1+αnew2y2=ζ

ζ=αold1y1+αold2y2(4)



2.假设SVM超平面的模型为

f(x)=wTx+b
,上一篇中已推导出

w
的表达式,将其带入得



f(x)=Ni=1αiyiK(xi,x)+b;f(xi)

表示样本

xi
的预测值,

yi
表示样本

xi
的真实值,定义

Ei
表示预测值与真实值之差为

Ei=f(xi)yi(5)



3.由于

vi=Nj=3αjyjK(xi,xj),i=1,2
,因此


v1=f(x1)j=12yjαjK1jb(6)




v2=f(x2)j=12yjαjK2jb(7)

把(4)(6)(7)带入下式中:
(K11+K222K12)α2K11ζy2+K12ζy2+y1y21v1y2+v2y2=0
化简得: 此时求解出的 αnew2 未考虑约束问题,先记为 αnew,unclipped2
(K11+K222K12)αnew,unclipped2=(K11+K222K12)αold2+y2[y2y1+f(x1)f(x2)]
带入(5)式,并记 η=K11+K222K12 得:

αnew,unclipped2=αold2+y2(E1E2)η(8)

2.4对原始解修剪

上述求出的解未考虑到约束条件:

  • 0αi=1,2C
  • α1y1+α2y2=ζ

在二维平面上直观表达上述两个约束条件
这里写图片描述
最优解必须要在方框内且在直线上取得,因此 Lαnew2H ;
y1y2 时, L=max(0,αold2αold1);H=min(C,C+αold2αold1)
y1=y2 时, L=max(0,αold1+αold2C);H=min(C,αold2+αold1)
经过上述约束的修剪,最优解就可以记为 αnew2 了。

αnew2= H ,αnew,unclipped2>Hαnew,unclipped2,Lαnew,unclipped2H L ,αnew,unclipped2<L

2.5求解 αnew1

由于其他N-2个变量固定,因此 αold1y1+αold2y2=αnew1y1+αnew2y2 所以可求得

αnew1=αold1+y1y2(αold2αnew2)(9)

2.6取临界情况

大部分情况下,有 η=K11+K222K12>0 。但是在如下几种情况下, αnew2 需要取临界值L或者H.

  1. η<0 ,当核函数K不满足Mercer定理时,矩阵K非正定;
  2. η=0 ,样本 x1 x2 输入特征相同;

也可以如下理解,对(3)式求二阶导数就是 η=K11+K222K12 ,
η<0 时,目标函数为凸函数,没有极小值,极值在定义域边界处取得。
η=0 时,目标函数为单调函数,同样在边界处取极值。
计算方法:
即当 αnew2=L αnew2=H 分别带入(9)式中,计算出 αnew1=L1 αnew1=H1 ,其中 s=y1y2
这里写图片描述

带入目标函数(1)内,比较 Ψ(α1=L1,α2=L) Ψ(α1=H1,α2=H) 的大小, α2 取较小的函数值对应的边界点。
这里写图片描述
其中
这里写图片描述

3.启发式选择变量

上述分析是在从N个变量中已经选出两个变量进行优化的方法,下面分析如何高效地选择两个变量进行优化,使得目标函数下降的最快。

第一个变量的选择

第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT条件的 αi 作为第一个变量,接着依据相关规则选择第二个变量(见下面分析),对这两个变量采用上述方法进行优化。当遍历完整个样本集后,遍历非边界样本集( 0<αi<C )中违反KKT的 αi 作为第一个变量,同样依据相关规则选择第二个变量,对此两个变量进行优化。当遍历完非边界样本集后,再次回到遍历整个样本集中寻找,即在整个样本集与非边界样本集上来回切换,寻找违反KKT条件的 αi 作为第一个变量。直到遍历整个样本集后,没有违反KKT条件 αi ,然后退出。
边界上的样本对应的 αi=0αi=C ,在优化过程中很难变化,然而非边界样本 0<αi<C 会随着对其他变量的优化会有大的变化。
这里写图片描述

第二个变量的选择

SMO称第二个变量的选择过程为内循环,假设在外循环中找个第一个变量记为 α1 ,第二个变量的选择希望能使 α2 有较大的变化,由于 α2 是依赖于 |E1E2| ,当 E1 为正时,那么选择最小的 Ei 作为 E2 ,如果 E1 为负,选择最大 Ei 作为 E2 ,通常为每个样本的 Ei 保存在一个列表中,选择最大的 |E1E2| 来近似最大化步长。
有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤:

首先在非边界集上选择能够使函数值足够下降的样本作为第二个变量,
如果非边界集上没有,则在整个样本集上选择第二个变量,
如果整个样本集依然不存在,则重新选择第一个变量。

4.阈值b的计算

每完成对两个变量的优化后,要对b的值进行更新,因为b的值关系到f(x)的计算,即关系到下次优化时 Ei 的计算。
1.如果 0<αnew1<C ,由KKT条件 y1(wTx1+b)=1 ,得到 Ni=1αiyiKi1+b=y1 ,由此得:

bnew1=y1i=3NαiyiKi1αnew1y1K11αnew2y2K21



由(5)式得,上式前两项可以替换为:


y1i=3NαiyiKi1=E1+αold1y1K11+αold2y2K11+bold



得出:


bnew1=E1y1K11(αnew1αold1)y2K21(αnew2αold2)+bold




2.如果

0<αnew2<C
,则


bnew2=E2y1K12(αnew1αold1)y2K22(αnew2αold2)+bold




3.如果同时满足

0<αnewi<C
,则

bnew1=bnew2



4.如果同时不满足

0<αnewi<C
,则

bnew1bnew2
以及它们之间的数都满足KKT阈值条件,这时选择它们的中点。(
关于这个我不理解…

建议参看SMO原文的伪代码

参考:
统计学习方法,李航
Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines,John C. Platt
http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148704.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java 零拷贝_java深拷贝

    java 零拷贝_java深拷贝在传统的数据IO模式中,读取一个磁盘文件,并发送到远程端的服务,就共有四次用户空间与内核空间的上下文切换,四次数据复制,分别是两次CPU数据复制,两次DMA数据复制。零拷贝指在进行数据IO或传输时,数据在用户态下经历了零次拷贝,并非不拷贝数据。通过减少数据传输过程中内核缓冲区和用户进程缓冲区间不必要的CPU数据拷贝与用户态和内核态的上下文切换次数,降低CPU在这两方面的开销,释放CPU执行其他任务,更有效的利用系统资源,提高传输效率,同时还减少了内存的占用,提升应用程序的性能

  • checkbox选中与取消选择[通俗易懂]

    checkbox选中与取消选择[通俗易懂]checkbox选中与取消选择1.html&lt;form&gt;&lt;inputtype="checkbox"name="items"value="足球"/&gt;足球&lt;inputtype="checkbox"name="items"value="篮球"/&gt;篮球&

  • 2020最新版Linux面试题(一)

    2020最新版Linux面试题(一)

  • UNIX的常用命令「建议收藏」

    UNIX的常用命令「建议收藏」Unix常用命令介绍:  多命令行:“;”多行命令:“\”1、系统关闭reboot、halt/shutdown、poweroff2、passwd命令:修改系统用户密码passwd[username]3、su命令:切换系统用户su[-username]username为空表示root用户4、cat命令:将指定的文件在标准输出到显示器cat [-AbET] [文件名列表]-A      …

  • GPU利用率低的解决办法

    GPU利用率低的解决办法watch-n0.1-dnvidia-smi#检查GPU利用率参数解决办法:1.dataloader设置参数2.增大batchsize3.减少IO操作,比如tensorboard的写入和打印。4.换显卡

  • 孙鑫老师 java从入门到精通 视频教程 批量下载

    孙鑫老师 java从入门到精通 视频教程 批量下载本视频教程是孙鑫老师亲自开发录制的,内容涵盖了java技术从入门到精通整个过程。对于java爱好者是一套不可多得的教材!相信下载此教程的同志都是未来的电脑高手,对于批量下载的方法我在这时就不一一说了,相信兄弟们都能找到这种简单规律。这里以第三课批量下载为例简单说一下:(记得将通配符长度设为1哦)第一课Java的一些基本概念http://www.ibook8.com/te

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号