支持向量机(三)序列最小最优化算法(SMO)

        在支持向量机(一)和支持向量机(二)两篇文章中,我们分别介绍了线性可分的支持向量机和线性向量机,从中可知,我们最终的目的是要计算得出支持向量对应的拉格朗日乘子α,但是我们并没有说怎么算。这篇文章主要介绍了序列化最小优化算法,用来计算α。在介绍之前我们先简单介绍一下其中用到的核函数。

  1. 核函数

        首先我们看下面的两个图:

                                                            支持向量机(三)序列最小最优化算法(SMO)_第1张图片

        我们看上面的两个图,右边的明显是可以用一个直线将数据分开,那就是线性可分的,而左边的图是用一个曲线将数据分开的,这个问题就称之为非线性可分的问题。而非线性问题往往不好求解,而我们希望的就是能用线性求解的问题来求解非线性的问题,方法就是进行一个变换,将非线性问题变成线性问题。

        再看上面左图,是个椭圆的形式,给出椭圆的函数,这个函数明显是非线性函数,下面我们将其做变换令:

                                                                              

                                                                             

        然后我们将其原式替换,得到:

                                                                

        可以看到经过简单的变换,将原来的非线性问题转化为了式1的线性问题。这就是核技巧的基本思想。

核技巧分为两步:首先使用一个变换将原空间的数据映射到新空间;然后在新空间里用线性分类学习方法从训练数据中学习分类模型。

        进行数据映射的话,我们就用到了核函数:

                                                              

        其中K(x,z)就是核函数,φ(x)成为映射函数,就是将原空间映射到新空间的映射方式,对应上面的例子φ(x)=x2,φ(x)∙φ(z)就是两个映射的內积。

        下面我们再看先线性支持向量机的目标函数:

                                                

        我们将式2中的xi和xj的內积替换成映射的內积,即映射后的求解最优值问题:

                                                  支持向量机(三)序列最小最优化算法(SMO)_第2张图片

        然后求解最优解

        线性支持向量机的最终分类函数形式如下:

                                            

        同样将xi和x的內积形式替换为K(xi,x)得:

                                         

        我们常用的核函数有:

       (1)多项式核函数

                                          

       对应的是支持向量机是一个p次多项式分类器,在此情形下,分类决策函数是:

                                

        (2)高斯核函数

                                  

      对应的支持向量机是高斯径向基函数分类器,在此情况下分类决策函数是

                          

       (3)字符串核函数

        这个核函数不做介绍,有兴趣可以自己看。李航《统计学习方法》中有详细介绍。

       

2.序列最小最优化算法

        支持向量机的学习问题是求解凸二次规划问题,其目的要求N个拉格朗日乘子,序列最小最优化算法(SMO),选择两个变量,固定其他变量,然后针对这两个变量构建一个二次规划问题;这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,应为这会使得原始二次规划问题的目标函数值变的更小;更重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。

        假设我们选择作为选择的两个变量进行求解,然后代入目标问题:

                            

                          条件:

                                  

        每次求解,我们先固定其中一个,假设为α1,然后另一个用约束条件自动确定,下面我们先介绍一下关于两个变量的约束问题。这个约束可以用二维空间上的图形表示:

                               支持向量机(三)序列最小最优化算法(SMO)_第3张图片

                                                                图1

       图1是表示的等式约束问题,使得在平行于盒子[0,C]×[0,C]的对角直线上。我们看式3,中的y1和y2只是用来判断是否分类正确,1表示正确,-1表示不正确,所以式3就可以简化成(y1≠y2),(y1=y2),因为我们是固定其他α的,所以式3中右边那一坨我们就可以用k来代替了。在每次求这一组解的时候,我们是先确定一个α1,然后通过约束问题确定α2,这样其实就是变成了一个单变量的最优化问题。

        假设问题的初始可行解是,最优解是,并且假设在沿着约束方向未经剪辑时α2的最优解是,这个解是指每次经过计算得来的新的α2,但这个解可能是违反约束条件的,然后经过约束条件约束调整后才是,而其约束条件是:

                                                

        L和H是上下界,其中0<=L,H<=C,L<=H。L与H也是图1中所在的对角线段断点的界。如果y1≠y2,则如图1左侧所示:

                                               

        如果是y1=y2,则如图1右侧的图所示:

                                              

        为什么得出上面两个计算的表达式,我们可以将图1中的图像函数化,α2是因变量,所以我们得出函数α2-α1=k(这里的k不要和图1中的k混为一样,是不一样的,按理说应该是符号相反的),k即为截距,结合0<=α2<=C,L≤α2new≤H两个条件,我们就可以得出上面求L和H的表达式;由于L和H的值是动态变化的,并且是范围是不断缩小的,所以我们就可以通过这个迭代的过程求出对应的α。

        下面就是具体的计算过程,以及计算所用到的一些函数

        首先记:

                                     

        令

                        

        Ei表示在α1和α2情况下,输入的xi对应的预测值和实际值之间的差值。

        沿着约束方向未经剪辑时的解是:

                              

        其中

                           

         式4是要通过公式推理出来的,具体的推理过程在李航《统计学习方法》中有详细过程。α2new,unc是未经剪辑过的值,就是直接通过公式计算出来的,下面对其进行剪辑,也就是通过约束条件对其进行约束:

                               

        由 求得 ,是

                         

        对于式6,当y1和y2不同号时( ),α1和α2的变化量是相同的,但是方向是相反的(一个值减小,一个值增加);当y1和y2同号时(),α1和α2的变化量是相同的,方向也是相同的(同时增加或者减少某个值)。因为参考图1,对应的直线是需要在和对角线平行的方向上平移的,这就规定了这两种情况下α1和α2的变化关系。

        在SMO中我们每次计算都要选择两个变量进行优化,其中至少一个是违反KKT条件的。下面我们进行第一个变量的选择。

        SMO选择第一个变量的过程称为外层循环。外层循环下训练样本中选取违反KKT条件最严重的的样本点,并将其对应的变量作为第一个变量。具体的检验训练样本点(xi,yi)是否满足KKT条件,即

                             
                        

                        

         其中的。怎么得出上面的KKT条件,首先,然后可以集合我的另一篇文章支持向量机(二)中的支持向量相关解释理解。该检验是在ε范围内进行的,在检验过程中,外层循环首先比那里所有满足条件的 样本点,即在间隔边界上的点,检验它们是否满足KKT条件。如果这些样本点都满足KKT条件,那么遍历整个训练集,检验他们是否满足KKT条件。

        接下来我们进行第二个变量的选择。SMO称第二个变量的选择过程为内层循环。假设在外层循环中已经找到了第一个变量α1,那么选择第二个变量α2的标准是希望其有足够大的变化,这样才可以使其下降速度够快。由式4和式5可知 是依赖的,所以一种简单的做法是选择α2,使其对应的最大。因为α1是已经定了的,E1也是定了的,所以如果E1是正的,那么选择最小的Ei作为E2,如果E1是负的,那么选择最大的Ei作为E2。所以要实现这个过程,就需要提前计算所有的Ei并将其保存起来。

        在特殊情况下,如果内存循环通过以上方法选择的α2不能使木变函数有足够的的下降,那么遍历在间隔边界上的支持向量点,以此将其对应的变量作为α2试用,直到目标函数有足够的下降。如果还是找不到,那么就编列整个训练集。如果还是找不到,就放弃前面选择的α1,重新选择α1开始。

        下面我们进行阈值b和差值Ei的计算。每次计算完两个变量后,都要重新就计算b值的。当时,由KKT条件可知:

                                                             

       那么可以得到:

                                    

        又由E1的定义可知,

                                

我们将式7和式8联立,得到如下表达式:

                                    

        公式中E1、K11、K21都是可以通过前面提到的公式计算出来的,是可以通过内外层循环(变量选择过程)找出来的,也是可以通过上面的过程计算出来的。

        同样,如果,那么:

                                

       如果同时,那么说明都在间隔边界上,所以;如果是0或者C,那么不在间隔边界上,则以及他们之间的数都是符合KKT条件的阈值,这是选择他们的中点作为bnew。

        每次优化完两个变量的时候,我们需要重新更新E值以及他们对应的α:

                                 

        S是所有支持向量xi的集合。

        下面给出SMO算法的步骤:

       输入:训练数据集T={(x1,y1),(x2,y2),…,(xn,yn)},其中yi={-1,+1},精度ε。

        输出近似解:

  1. 取初始值,令k=0;
  2. 选取优化变量,解析求将两个变量的最优化问题,求得最优解,更新α为
  3. 若在精度范围内满足停止条件:

                          支持向量机(三)序列最小最优化算法(SMO)_第4张图片

       其中

                   

        则转4;否则令k=k+1,转2;

      4.取α=α(k+1)

        怎么理解上面的停止条件,是最优化问题中的条件决定的。这个只是说满足条件,但是不一定所有的样本点分类正确,样本点分类错误的点也是可以满足优化问题中的条件的,所以不能将两者弄混在一起了。

你可能感兴趣的:(机器学习,机器学习,支持向量机(SMO算法))