机器学习二一:SMO算法

来源:互联网 发布:淘宝买家信息收购 编辑:程序博客网 时间:2024/05/12 16:57

AI


在SVM的前两篇里,我们优化的目标函数最终都是一个关于α向量的函数。


而怎么极小化这个函数,求出对应的α向量,进而求出分离超平面我们没有讲。


本篇就对优化这个关于α向量的函数的SMO算法做一个总结。

1. 回顾SVM优化目标函数


我们首先回顾下我们的优化目标函数:

 我们的解要满足的KKT条件的对偶互补条件为:


根据这个KKT条件的对偶互补条件,我们有:


 由于

,我们令


则有:


SMO算法的基本思想


由于在目标优化问题中,变量是拉格朗日乘子α i,一个变量 对应于一个样本点(x i,y i) ,且变量的总数等于训练样本容量 m


要解决的是在参数

上求最大值W的问题,这m个变量组成的向量α需要在目标函数极小化的时候求出。


至于

都是已知数。C由我们预先设定,也是已知数


按照坐标上升的思路,我们首先固定除 α1 以外的所有参数,然后在 α1上求极值


等一下,这个思路有问题,因为如果固定以外的所有参数,那么将不再是变量(可以由其他值推出),因为问题中规定了:


因此,我们需要一次选取两个参数做优化,比如 α1 和 α2,此时 α2 可以由 α1 和其他参数表示出来。这样回带到W中,W就只是关于的函数了,可解。


故SMO算法的思想就是它每次只优化两个变量,将其他的变量都视为常数。


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

二次规划的解析方法


下面讨论具体方法:

假设我们选取了初始值

满足了问题中的约束条件。

接下来,我们固定了

这样W就是 α1 和 α2 的函数。并且 α1 和 α2满足条件:


由于左边都是已知固定值,因此为了方面,可将等式右边标记成实数值 ζ 

那么有:


根据上面的约束条件

又由于y1,y2均只能取值1或者-1, 这样α1,α2在[0,C]和[0,C]形成的盒子里面,并且两者的关系直线的斜率只能为1或者-1,也就是说α1,α2的关系直线平行于[0,C]和[0,C]形成的盒子的对角线,如下图所示:

接下来假设问题初始可行解为



上一轮迭代得到的解是:

并且假设沿着约束方向α2未经剪辑的解是

由于

必须满足上图中的线段约束。假设L和H分别是上图中 α2new

所在的线段的边界。那么很显然我们有:

而对于L和H,我们也有限制条件如果是上面左图中的情况,则

如果是上面右图中的情况,我们有:


也就是说,假如我们通过求导得到的α2new,unc,则最终的α2new应该为:

那么如何求出α2new,unc呢?很简单,我们只需要将目标函数对α2求偏导数即可。


首先我们整理下我们的目标函数。

为了简化叙述,我们令


其中g(x)就是我们在第一节里面的提到的


我们令


这样我们的优化目标函数进一步简化为:

由于

并且

可以得到用α1用α2表达的式子为:

将上式带入我们的目标优化函数,就可以消除α1,得到仅仅包含α2的式子:

 

忙了半天,我们终于可以开始求α2new,unc了,现在我们开始通过求偏导数来得到α2new,unc

整理上式有:


将ς=α1y1+α2y2带入上式,我们有:


我们终于得到了α2new,unc的表达式:

利用上面讲到的α2new,unc和α2new的关系式,我们就可以得到我们新的α2new了。利用α2new和α1new的线性关系,我们也可以得到新的α1new


选择变量的启发式方法


第一个变量的选择

    SMO算法称选择第一个变量为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点。对于每个样本点,要满足的KKT条件我们在第一节已经讲到了: 

一般来说,我们首先选择违反第二个条件的点。如果这些支持向量都满足KKT条件,再选择违反第一条 和 第三条的点


第二个变量的选择

     假设我们在外层循环已经找到了α1, 第二个变量α2的选择标准是让|E1−E2|有足够大的变化。


由于α1定了的时候,E1也确定了,所以要想|E1−E2|最大,只需要在E1为正时,选择最小的Ei作为E2, 在E1为负时,选择最大的Ei作为E2,可以将所有的Ei保存下来加快迭代。


    如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做α2,直到目标函数有足够的下降, 如果所有的支持向量做α2都不能让目标函数有足够的下降,可以跳出循环,重新选择α1 


 计算阈值b和差值Ei 

    在每次完成两个变量的优化之后,需要重新计算阈值b。当

时,我们有


    于是新的b1new为:


    计算出E1为:


看到上两式都有

因此可以将b1new用E1表示为:


    同样的,如果

那么有:


最终的bnew为:



其中,S是所有支持向量xj的集合。

好了,SMO算法基本讲完了,我们来归纳下SMO算法。


算法总结


 输入是m个样本(x1,y1),(x2,y2),...,(xm,ym),,其中x为n维特征向量。y为二元输出,值为1,或者-1.精度e。输出是近似解α


    1)取初值α0=0,k=0

    2)按照变量选取的方法选取出a1k与a2k,求出新的α2new,unc。


    3)按照下式求出α2k+1


    4)利用α2k+1和α1k+1的关系求出α1k+1

    5)按照阈值与差值的计算方法算出bk+1和Ei

    6)在精度e范围内检查是否满足如下的终止条件:


    7)如果满足则结束,返回αk+1,否则转到步骤2)


AI


相信SVM最让大家头疼的就是拉格朗日对偶和SMO,对比这么复杂的推导过程,SVM的思想确实那么简单。它不再像logistic回归一样企图去拟合样本点(中间加了一层sigmoid函数变换),而是就在样本中去找分隔线,为了评判哪条分界线更好,引入了几何间隔最大化的目标。


之后所有的推导都是去解决目标函数的最优化上了:拉格朗日对偶的重要作用是将w的计算提前并消除w,使得优化函数变为拉格朗日乘子的单一参数优化问题


在解决最优化的过程中,发现了w可以由特征向量内积来表示,进而发现了核函数,仅需要调整核函数就可以将特征进行低维到高维的变换,在低维上进行计算,实质结果表现在高维上。由于并不是所有的样本都可分


为了保证SVM的通用性,进行了软间隔的处理,导致的结果就是将优化问题变得更加复杂,然而惊奇的是松弛变量没有出现在最后的目标函数中。最后的优化求解问题,也被拉格朗日对偶和SMO算法化解,使SVM趋向于完美。


另外,其他很多议题如SVM背后的学习理论、参数选择问题、二值分类到多值分类等等还没有涉及到,以后有时间再学吧。


不失初心,不忘初衷


AI玩转智能


原创粉丝点击