理解支持向量机SMO算法
Posted yxysuanfa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解支持向量机SMO算法相关的知识,希望对你有一定的参考价值。
在支持向量机模型的求解中,我们用到了SMO算法来求解向量α。
那么什么是SMO算法?在讲SMO算法之前。我们须要先了解下面坐标上升法。
1、坐标上升法
如果有优化问题:
算法的思想为:每次仅仅考虑一个变量进行优化,将其它变量固定。这时整个函数能够看作仅仅关于该变量的函数,能够对其直接求导计算。
然后继续求其它分变量的值,整个内循环下来就得到了α的一组值,若该组值满足条件。即为我们求的值,否则继续迭代计算直至收敛。一个示意图例如以下:
如图为一个二次椭圆曲线的等高线,变量维数为2,初始值在点(2,-2),可见其优化路径为折线式前进,由于算法每次仅仅在一个方向上对函数进行优化。
2、SMO算法
在讲支持向量机求目标函数最优时,通过求解对偶问题转换为求解目标函数对α的极大值,例如以下:
能够看到优化问题与上面提到的坐标上升法非常类似。參考上面讲到的坐标上升法,我们也能够选择向量α的一个变量,将其它变量固定进行优化。但与上面不同的是。该处优化问题包括了约束条件,
变量必须满足等式约束,所以考虑每次选择两个变量进行优化。
不失一般性,将设选择的两个变量为α_1,α_2,其它变量α_i (i=3,4,…,N)是固定的。
于是优化问题的子问题能够写作:
则约束条件改写为:
直线被约束条件0≤α_i≤C约束在了一个C×C的正方形中。
从图中能够看出,最优问题的子问题是求在正方形内的线段上的最优值。
这使得两个变量的最优化问题成为了实质上的单变量的最优化问题,最好还是设为变量α_2的最优化问题,由不等式约束可得α_2的取值范围:
L,H分别为正方形区域内线段的端点值。
引入符号:
由条件:
将α_1代入最优子问题的目标函数。得到仅仅包括α_2的函数,对α_2求偏导并令其为0 ,可得的值。
加上取值范围约束进而得到 的值,再而得到。
α_2。α_1 的更新值例如以下:
若α值满足停止条件,则α即为我们求的近似解。
否则又一次扫描选择两个变量继续迭代计算直至满足停止条件。
3、变量的选择
如今的问题就是怎样选择两个变量构造最优子问题。
SMO採用启示式选择方法选择变量。所谓启示式,即每次选择拉格朗日乘子时。优先选择前面样本系数中满足条件0<α_i < C的
α_i作优化,不考虑约束条件中相等的情况是由于在界上的例子相应的系数α_i 一般都不会改变。
通过启示式搜索找到第一个变量。那么第二个应该怎样选取呢?由于要考虑算法的收敛性。第二个变量显然不是随便选的。实际上由Osuna定理,仅仅要选择的两个变量中有一个违背KKT条件。那么目标函数在一步迭代后值就会减小,而且我们希望找到的α_2 在更新后能够有足够大的变化。
由上面 的公式能够看出,其值依赖于,当α_1 确定后E_1也就确定了,因此在给定第一个变量的初始值α_i=0后,对输入例子循环遍历,找出违背KKT条件中使最大的例子点的系数作为α_2。
在特殊情况下,通过以上选择的α_2 不能使目标函数有足够的下降。那么採用下面启示式规则继续选择α_2:
遍历在间隔边界上的支持向量点,依次将其相应的变量作为α_2 试用,直到目标函数有足够的下降。若找不到合适的α_2,那么再遍历训练数据集寻找
若仍未找到。则放弃第一个α_1,又一次选择α_1 。
在α_1,α_2 完毕一次更新后,还须要对阈值b进行更新,b的更新能够通过KKT约束条件:
以上介绍了SMO算法的思路和大概流程。没有对算法的推导及实现上的细节做具体的介绍,大家有兴趣想要深入了解SMO的话。能够看Andrew ng的支持向量机视频和John C.Platt的《Sequential Minimal Optimization A Fast Algorithm for Trainning Support Vector Machines》。
以上是关于理解支持向量机SMO算法的主要内容,如果未能解决你的问题,请参考以下文章
支持向量机(SVM):超平面及最大间隔化支持向量机的数学模型软间隔与硬间隔线性可分支持向量机线性支持向量机非线性支持向量机核函数核函数选择SMO算法SVM vs LR优缺点