【机器学习详解】SMO算法剖析

原创 2016年04月27日 23:00:27

转载请注明出处: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,样本x1x2输入特征相同;

也可以如下理解,对(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

版权声明:转载请注明出处! PS:欢迎大家提出疑问或指正文章的错误!

SVM学习总结(三)SMO算法流程图及注释源码

一、SMO算法流程图算法中的流程图绘制是根据第二节中的源码绘制的。 二、SMO算法C++源码下面的源码是在csdn上下的,非常适合初学者的,而且smo算法实现的主体架构和实现都与SMO算法原论文基本...
  • u010484388
  • u010484388
  • 2017年01月10日 21:33
  • 1424

支持向量机(SVM) SMO算法详解

1.寻找最大间隔 训练样本集:D = { (x1, y1) ,  (x2, y2) , ... ,(xm, ym) } , yi ϵ { -1, +1} 划分超平面的线性方程:wTx ...
  • willbkimps
  • willbkimps
  • 2017年01月23日 23:25
  • 1674

SMO算法

SMO(序列最小优化)算法,由John Platt提出,给出了一种有效的解决由SVM导出的对偶问题的方法,让我们首先先介绍一下坐标上升算法。坐标上升考虑到解决非限制最优化问题: ...
  • qq_27792379
  • qq_27792379
  • 2016年01月29日 14:04
  • 875

理解支持向量机(三)SMO算法

在支持向量机模型的求解中,我们用到了SMO算法来求解向量α。那么什么是SMO算法?在讲SMO算法之前,我们需要先了解以下坐标上升法。 1、坐标上升法 假设有优化问题: W是α向量的函数。利...
  • shijing_0214
  • shijing_0214
  • 2016年03月30日 19:17
  • 1973

解密SVM系列(三):SMO算法原理与实战求解

上节我们讨论到解SVM问题最终演化为求下列带约束条件的问题: minW(α)=12(∑i,j=1Nαiyiαjyjxi∗xj)−∑i=1Nαis.t.0≤αi≤C∑i=1Nαiyi=0min\qua...
  • on2way
  • on2way
  • 2015年08月17日 19:39
  • 13135

支持向量机(SVM)(五)-- SMO算法详解

一、我们先回顾下SVM问题。 A、线性可分问题 1、SVM基本原理: SVM使用一种非线性映射,把原训练            数据映射到较高的维。在新的维上,搜索最佳分离超平面,两个类的数...
  • u011067360
  • u011067360
  • 2014年05月21日 20:41
  • 5479

经典SVM之SMO算法实现

经典SVM之SMO算法实现 一、主要介绍理论部分 二、介绍代码实现部分 不仅让你懂得原理,还懂得运用!真正的实现知行合一!...
  • u010016150
  • u010016150
  • 2016年07月23日 21:22
  • 2934

Platt大牛的SMO算法

  • 2014年06月01日 09:21
  • 88KB
  • 下载

SVM算法实现(一)

关键字(keywords):SVM 支持向量机 SMO算法 实现 机器学习          如果对SVM原理不是很懂的,可以先看一下入门的视频,对帮助理解很有用的,然后再深入一点可以看看这几篇入门文...
  • techq
  • techq
  • 2011年02月01日 19:44
  • 93339

SMO算法总结

1.概述SMO(Sequentil Minimal Optimization)算法在支持向量机中用来求解对偶问题,即 min 12∑Ni=1∑Nj=1αiαjyiyjK(xi,xj)−∑Ni=1αi...
  • u014664226
  • u014664226
  • 2016年06月18日 20:44
  • 5031
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【机器学习详解】SMO算法剖析
举报原因:
原因补充:

(最多只允许输入30个字)