【机器学习详解】SMO算法剖析(转载)

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

转载请注明出处: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+K22?2K12)α2?K11ζy2+K12ζy2+y1y2?1?v1y2+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αjK1j?b(6)

v2=f(x2)?∑j=12yjαjK2j?b(7)

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

αnew,unclipped2=αold2+y2(E1?E2)η(8)

2.4对原始解修剪

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

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

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

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

2.5求解αnew1

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

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

2.6取临界情况

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

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

也可以如下理解,对(3)式求二阶导数就是η=K11+K22?2K12, 
当η<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是依赖于|E1?E2|,当E1为正时,那么选择最小的Ei作为E2,如果E1为负,选择最大Ei作为E2,通常为每个样本的Ei保存在一个列表中,选择最大的|E1?E2|来近似最大化步长。 
有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤:

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

4.阈值b的计算

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

bnew1=y1?∑i=3NαiyiKi1?αnew1y1K11?αnew2y2K21

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

y1?∑i=3NαiyiKi1=?E1+αold1y1K11+αold2y2K11+bold

得出:

bnew1=?E1?y1K11(αnew1?αold1)?y2K21(αnew2?αold2)+bold

2.如果0<αnew2<C,则

bnew2=?E2?y1K12(αnew1?αold1)?y2K22(αnew2?αold2)+bold

3.如果同时满足0<αnewi<C,则bnew1=bnew2 
4.如果同时不满足0<αnewi<C,则bnew1与bnew2以及它们之间的数都满足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

原文地址:https://www.cnblogs.com/Vae1990Silence/p/8411118.html

时间: 2024-08-26 18:06:48

【机器学习详解】SMO算法剖析(转载)的相关文章

python 详解re模块(转载)

正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系.^ 如果放在字符串的开头,则表示取非的意思.[^5]表示除了5之外的其他字符.而如果^不在字符串的开头,则表示它本身. 具有重复功能的元字符:* 对于前一个字符重复0到无穷次对于前一个字符重复1到无穷次?对于前一个字符重复0到1次{m,n} 对于前一个字符重复次数在为m到n次,其中,{0,} = *,{1,} =

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

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51227754 CSDN?勿在浮沙筑高台 本文力求简化SMO的算法思想,毕竟自己理解有限,无奈还是要拿一堆公式推来推去,但是静下心看完本篇并随手推导,你会迎刃而解的.推荐参看SMO原文中的伪代码. 1.SMO概念 上一篇博客已经详细介绍了SVM原理,为了方便求解,把原始最优化问题转化成了其对偶问题,因为对偶问题是一个凸二次规划问题,这样的凸二次规划问题具有全局最优解,如下: 其

【机器学习详解】SVM解二分类,多分类,及后验概率输出

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51073885 CSDN?勿在浮沙筑高台 支持向量机(Support Vector Machine)曾经在分类.回归问题中非常流行.支持向量机也称为最大间隔分类器,通过分离超平面把原始样本集划分成两部分. 首先考虑最简单的情况:线性可分支持向量机,即存在一个超平面可以把训练样本分开. 1.线性可分支持向量机 1.考虑一个线性二分类的问题:如下左图,在二维平面上有二种样本点x,目

Java虚拟机详解----GC算法和种类

本文主要内容: GC的概念 GC算法  引用计数法(无法解决循环引用的问题,不被java采纳) 根搜索算法 现代虚拟机中的垃圾搜集算法: 标记-清除 复制算法(新生代) 标记-压缩(老年代) 分代收集 可触及性 Stop-The-World 一.GC的概念: GC:Garbage Collection 垃圾收集 1960年 Lisp使用了GC Java中,GC的对象是Java堆和方法区(即永久区) 我们接下来对上面的三句话进行一一的解释: (1)GC:Garbage Collection 垃圾收

KVC/KVO原理详解及编程指南(转载)

KVC/KVO原理详解及编程指南 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢! 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的理解. 2.由于KVO内容较少,而且是以KVC为基础实现的,本文将着重介绍KVC部分. 一.简介 KVC/KVO是观察者模式的一种实现

机器学习入门之四:机器学习的方法--其它算法(转载)

转自 飞鸟各投林 4.聚类算法 前面的算法中的一个显著特征就是我的训练数据中包含了标签,训练出的模型可以对其他未知数据预测标签.在下面的算法中,训练数据都是不含标签的,而算法的目的则是通过训练,推测出这些数据的标签. 这类算法有一个统称,即无监督算法(前面有标签的数据的算法则是有监督算法).无监督算法中最典型的代表就是聚类算法. 让我们还是拿一个二维的数据来说,某一个数据包含两个特征.我希望通过聚类算法,给他们中不同的种类打上标签,我该怎么做呢?简单来说,聚类算法就是计算种群中的距离,根据距离的

jQuery上传插件Uploadify使用详解(3.2.1)(转载)

jQuery上传插件Uploadify使用详解(3.2.1) Sep 25, 2016 | JQuery | 10733 Hits 六年前,因为工作中使用到 jQuery 的上传组件 Uploadify ,写了一篇<JQuery上传插件Uploadify使用详解>的博客来介绍 Uploadify ,其实只是将官方文档简单翻译了下.几年下来居然有50多万的访问量,而且每天通过各种搜索引擎有大几百的朋友会访问到这篇文章.六年时间 Uploadify 从当时的2.1.0到了现在的3.2.1,变化还是

【机器学习详解】AdaBoost算法原理

转载请注明出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51714346 1.概念 AdaBoost是一种级联算法模型,即把几个弱分类器级联到一起去处理同一个分类问题.也就是"三个臭皮匠顶一个诸葛亮"的道理.例如一个专家作出的判定往往没有几个专家一起作出的判定更准确.一种情况:如果每个专家都仅有一票的权利,采用投票机制的方法属于uniform形式:另一种情况是分配给每个专家的票数不一致则属于linear形式.A

聚类之详解FCM算法原理及应用

(一)原理部分 模糊C均值(Fuzzy C-means)算法简称FCM算法,是一种基于目标函数的模糊聚类算法,主要用于数据的聚类分析.理论成熟,应用广泛,是一种优秀的聚类算法.本文关于FCM算法的一些原理推导部分介绍等参考下面视频,加上自己的理解以文字的形式呈现出来,视频参考如下,比较长,看不懂的可以再去看看: FCM原理介绍 FCM分析1 FCM分析2 FCM分析3 首先介绍一下模糊这个概念,所谓模糊就是不确定,确定性的东西是什么那就是什么,而不确定性的东西就说很像什么.比如说把20岁作为年轻