支持向量机:SMO算法剖析

Posted 机器学习算法那些事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支持向量机:SMO算法剖析相关的知识,希望对你有一定的参考价值。

来源:CSDN

链接:

https://blog.csdn.net/luoshixian099/article/details/51227754


SMO算法概括:SMO算法是序列最小最优化算法,如下图,首先选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题,求解目标函数最小值对应的拉格朗日乘子α1和α2;然后,选择两个变量的方法:第一个变量遍历所有样本的拉格朗日乘子α,选择违反KKT条件最严重的变量α1;第二个变量遍历所有样本,选择与第一个变量变化值最大(|E2-E1)的拉格朗日乘子α2。


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


1. SMO概念



上一篇文章已经详细介绍了SVM原理,为了方便求解,把原始最优化问题转化成了其对偶问题,因为对偶问题是一个凸二次规划问题,这样的凸二次规划问题具有全局最优解,如下:

支持向量机:SMO算法剖析

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


2. SMO原理分析



2.1  视为一个二元函数

为了求解N个参数支持向量机:SMO算法剖析,首先想到的是坐标上升的思路,例如求解α1,可以固定其他N-1个参数,可以看成关于α1的一元函数求解,但是注意到上述问题的等式约束条件

支持向量机:SMO算法剖析

当固定其他参数时,参数α1也被固定,因此此种方法不可用。 

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

支持向量机:SMO算法剖析

支持向量机:SMO算法剖析

2.2  视为一元函数


由等式约束得:

支持向量机:SMO算法剖析

其中,支持向量机:SMO算法剖析为定值 。

等式支持向量机:SMO算法剖析两边同时乘以y1,且支持向量机:SMO算法剖析,得


支持向量机:SMO算法剖析

(2)式代入(1)中得到只关于参数α2的一元函数,由于常数项不影响目标函数的解,以下省略掉常数项Constant


支持向量机:SMO算法剖析


2.3  对一元函数求极值点


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


支持向量机:SMO算法剖析

  1. 由上式中假设求得α2的解,代入(2)式中可求得α1的解,分别记为支持向量机:SMO算法剖析,优化前的解记为支持向量机:SMO算法剖析,由于参数支持向量机:SMO算法剖析固定,由等式约束支持向量机:SMO算法剖析,得

    支持向量机:SMO算法剖析

即:

支持向量机:SMO算法剖析

2. 假设SVM超平面的模型为支持向量机:SMO算法剖析,已推导出 w的表达式,将其代入模型得:

支持向量机:SMO算法剖析

f(xi)表示样本xi的预测值,yi表示样本xi的真实值,定义Ei表示预测值与真实值之差为:

支持向量机:SMO算法剖析

3. 由于支持向量机:SMO算法剖析,因此,由(5)式得:


支持向量机:SMO算法剖析


把(4)(6)(7)代入(2.3)式得:

支持向量机:SMO算法剖析

化简求解支持向量机:SMO算法剖析未考虑约束问题,先记为支持向量机:SMO算法剖析,得:


支持向量机:SMO算法剖析

代入(5)式,并记  支持向量机:SMO算法剖析,得:

支持向量机:SMO算法剖析

2.4  对原始解修剪


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

支持向量机:SMO算法剖析

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


支持向量机:SMO算法剖析


最优解必须要在方框内且在直线上取得,因此


支持向量机:SMO算法剖析

支持向量机:SMO算法剖析

过上述约束的修剪,最优解就可以记为支持向量机:SMO算法剖析了。

支持向量机:SMO算法剖析

2.5  求解支持向量机:SMO算法剖析


由于其他N-2个变量固定,因此


支持向量机:SMO算法剖析

所以可求得

支持向量机:SMO算法剖析

2.6  取临界情况


大部分情况下,有

支持向量机:SMO算法剖析

但是在如下几种情况下,支持向量机:SMO算法剖析需要取临界值L或者H


1. η<0,当核函数K不满足Mercer定理时,矩阵K非正定;

2. η=0,样本 x 1 与x2输入特征相同;


也可以如下理解,对(3)式求二阶导数得:

支持向量机:SMO算法剖析

计算方法:

支持向量机:SMO算法剖析

支持向量机:SMO算法剖析

代入目标函数(1)内,比较 支持向量机:SMO算法剖析支持向量机:SMO算法剖析的大小,α2取较小的函数值对应的边界点

支持向量机:SMO算法剖析

其中,

支持向量机:SMO算法剖析

3.   启发式选择变量


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


3.1  第一个变量的选择

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

边界上的样本对应的 αi=0 或者 αi=C,在优化过程中很难变化,然而非边界样本0<αi<C会随着对其他变量的优化会有大的变化。  


3.2  第二个变量的选择

SMO称第二个变量的选择过程为内循环,假设在外循环中找个第一个变量记为α1,第二个变量的选择希望能使α2有较大的变换,由于α2是依赖于|E1-E2|,当E1为正时,那么选择最小的Ei作为E2,如果E1为负,选择最大Ei作为E2,通常为每个样本的Ei保存在一个列表中,选择最大的|E1-E2|来近似最大化步长。


有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤:


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


写在结束的话

SMO算法是求解拉格朗日乘子αi的一种快速实现算法,SMO算法比较抽象,若花了较长时间还没有弄懂的话就跳过吧,会用就行了。


推荐阅读文章




以上是关于支持向量机:SMO算法剖析的主要内容,如果未能解决你的问题,请参考以下文章

支持向量机原理SMO算法原理

13支持向量机SVM:SMO算法

机器学习之支持向量机:SMO算法

理解支持向量机SMO算法

支持向量机(SVM):超平面及最大间隔化支持向量机的数学模型软间隔与硬间隔线性可分支持向量机线性支持向量机非线性支持向量机核函数核函数选择SMO算法SVM vs LR优缺点

ML-9-3支持向量机--SMO算法原理