搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > FinTech修行僧 > 【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法

FinTech修行僧 2017-12-01

支持向量机SVM


4、序列最小最优化算法SMO


本节讨论支持向量机的具体实现。


我们知道,支持向量机的学习问题可以形式化为求解凸二次规划问题,这样的凸二次规划具有全局最优解,并且有许多最优化算法可以用于这一问题的求解。


但是,当训练样本容量很大时,这些算法往往变得非常低效,以致无法使用,所以,如何高效地实现支持向量机学习就成为关键,而序列最小最优化算法(sequential minimal optimization,SMO)便可以解决这个问题。


为了方便求解, SVM把原始最优化问题转化成了其对偶问题,且对偶问题是一个凸二次规划问题,如下所示: 

其中, (xi,yi)为训练样本数据,xi为样本特征,yi ∈{+1,-1}为样本标签,C是惩罚系数且由用户自己设定。


上述问题是要求解N个参数【13】支持向量机SVM:SMO算法,其他参数(指x,y和C)均为已知,有多种算法可以对上述问题求解,但是算法复杂度均很大。


但1998年,由Platt提出的序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。


【13】支持向量机SVM:SMO算法

SMO算法的基本思想


SMO算法是一种启发式算法,其核心思想是:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。


SMO的基本思路是:每次选择两个变量αi和αj,并固定其他参数(即其余N-2个α)。这样,在参数初始化后,SMO不断执行如下两个步骤直至收敛:

(1)选取一对需要更新的变量αi和αj

(2)固定αi和αj以外的参数,求解下式,获得更新后的αi和αj ;

【13】支持向量机SVM:SMO算法

注意:αi和αj的选择不是任意的,应按照相应的准则,之后会详细解释这个准则;


SMO算法之所以高效,恰由于在固定其他参数后,仅优化两个参数的过程能做到非常高效。


整个SMO算法包括两大部分:求解两个变量二次规划的解析方法选择变量的启发式方法


【13】支持向量机SVM:SMO算法

求解两个变量二次规划的解析方法



【13】支持向量机SVM:SMO算法

将最优化目标函数视为一个二元函数


为了求解N个参数【13】支持向量机SVM:SMO算法,首先想到的是坐标上升法。例如,求解α1,可以固定其他N-1个参数,于是便可以将目标函数的优化问题,看成关于α1的一元一次函数求解。


但是注意到上述问题的等式约束条件【13】支持向量机SVM:SMO算法,当固定其它参数时,参数α1也就被固定了,因此这种方法不可用。


SMO算法选择同时优化两个参数,固定其他N-2个参数。假设选择的参数为α1和α2,固定其他参数【13】支持向量机SVM:SMO算法 。由于参数【13】支持向量机SVM:SMO算法的固定,可以简化目标函数为只关于α1,α2的二元函数,【13】支持向量机SVM:SMO算法表示常数项(即不包含参数α1,α2的项),即

【13】支持向量机SVM:SMO算法

其中,【13】支持向量机SVM:SMO算法


【13】支持向量机SVM:SMO算法

进而视为一元函数


由等式约束得:【13】支持向量机SVM:SMO算法,可见 ξ 为定值。


等式【13】支持向量机SVM:SMO算法两边同时乘以y1【13】支持向量机SVM:SMO算法,得:

                    【13】支持向量机SVM:SMO算法

将(2)式带回到(1)中得到只关于参数α2的一元函数,由于常数项不影响目标函数的解,以下省略掉常数项【13】支持向量机SVM:SMO算法,如下所示:

【13】支持向量机SVM:SMO算法


【13】支持向量机SVM:SMO算法

对此一元函数求极值点


上式中关于参数α2的函数,对上式求导,并令其为0得:

【13】支持向量机SVM:SMO算法

从上式中我们可求出α2的解,具体推导如下:

【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法

把(4)(6)(7)式带入下式中:

【13】支持向量机SVM:SMO算法


【13】支持向量机SVM:SMO算法

对上述中求得的原始解进行修剪


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

【13】支持向量机SVM:SMO算法

在二维平面上直观表达上述两个约束条件,如下:

【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法


求解【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法


【13】支持向量机SVM:SMO算法

取临界情况


【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法


【13】支持向量机SVM:SMO算法

选择变量的启发式方法(选取参数的准则)


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


【13】支持向量机SVM:SMO算法

第1个变量的选择(外循环)


SMO称选择第1个变量的选择过程为外循环


外层循环首先遍历整个样本集,选择违反KKT条件最严重的样本点,并将其对应的变量作为第一个变量。具体地,检验训练样本点(xi,yi)是否满足KKT条件,即

                    【13】支持向量机SVM:SMO算法

                    【13】支持向量机SVM:SMO算法

其中,【13】支持向量机SVM:SMO算法为分类决策函数。


在检验过程中,外层循环首先遍历所有满足条件0<αi<C的样本点,即在间隔边界上的支持向量点,检验它们是否满足KKT条件。


如果这些样本点都满足KKT条件,那么遍历整个训练集,检验它们是否满足KKT条件。


【13】支持向量机SVM:SMO算法

第2个变量的选择(内循环)


SMO称选择第2个变量的过程为内循环


假设在外循环中找到第1个变量并记为α1,第2个变量选择的标准是希望能使α2有足够大的变化。


【13】支持向量机SVM:SMO算法

当 i = 1,2时,Ei为函数g(x)对输入 xi 的预测值与真实输出 yi 之差。


由于【13】支持向量机SVM:SMO算法【13】支持向量机SVM:SMO算法

,我们知道【13】支持向量机SVM:SMO算法是依赖于|E1-E2|的,为了加快计算速度:


选择α2的第一种方法是,选择α2使其对应的|E1-E2|最大。


因为α1已定,E1也就确定了。如果E1为正,那么选择最小的Ei作为E2;如果E1是负的,那么选择最大的Ei作为E2。通常将所有的E值保存在一个列表中。


选择α2的第二种方法


如果内层循环通过第一种方法选择的α2不能使目标函数有足够的下降,那么采用以下启发式规则继续选择α2

首先,遍历在间隔边界上的支持向量点,依次将其对应的变量作为α2试用,直到目标函数有足够的下降;


若找不到合适的α2,那么遍历训练数据集;


若仍找不到合适的α2,则放弃第1个α1,再通过外层循环寻求另外的α1


【13】支持向量机SVM:SMO算法

阈值b的计算


在每次完成两个变量的优化后,都要重新计算阈值b,因为b 的值关系到f(x)的计算,即关系到下次优化时Ei 的计算。


【13】支持向量机SVM:SMO算法

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

【13】支持向量机SVM:SMO算法

得出:

【13】支持向量机SVM:SMO算法

2、如果【13】支持向量机SVM:SMO算法,则:

【13】支持向量机SVM:SMO算法

3、如果同时满足【13】支持向量机SVM:SMO算法

4、如果同时不满足【13】支持向量机SVM:SMO算法以及它们之间的数都是符合KKT条件的阈值,这时选择它们的中点作为bnew


【13】支持向量机SVM:SMO算法

SMO算法总结


【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法


【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法

【13】支持向量机SVM:SMO算法



参考文献

【1】李航 · 统计学习方法 · 清华大学出版社 第七章

【2】周志华 · 机器学习 · 清华大学出版社 第六章

【3】SMO算法剖析 http://blog.csdn.net/luoshixian099/article/details/51227754

【4】用讲故事的办法帮你理解SMO算法 http://www.jianshu.com/p/55458caf0814

【5】SMO算法 http://blog.csdn.net/susu_love/article/details/53377010

【6】Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines,John C. Platt 



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【13】支持向量机SVM:SMO算法》的版权归原作者「FinTech修行僧」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注FinTech修行僧微信公众号

FinTech修行僧微信公众号:gh_10ea17f22036

FinTech修行僧

手机扫描上方二维码即可关注FinTech修行僧微信公众号

FinTech修行僧最新文章

精品公众号随机推荐