分类:支持向量机(二)——数值优化

       在上一篇博客中,较为详细的介绍了在数据完全线性可分的情况下,构建SVM模型的目标,并将构建目标转化为最大化几何距离的优化过程,本篇就将介绍具体优化时的计算过程。还是一样的,先推荐几篇不错的博文,大家也可以参考链接中的文章学习。

  • 关于凸优化问题

        http://www.360doc.com/content/18/0522/09/32196507_756021531.shtml

  • 关于拉格朗日乘子法及对偶优化问题

          https://www.cnblogs.com/xinchen1111/p/8804858.html

          https://www.cnblogs.com/ooon/p/5721119.html

          https://www.cnblogs.com/mashiqi/p/3719101.html

1.凸优化问题

       在一般的优化问题中求最大值或最小值,通常的做法是找出那些梯度为0的点(有的情况下还需要求出边界点的值),然后比较这些点的函数值,最后找出最大值或最小值。这个过程中有两个问题需要注意,一个是当存在多个极值点时,计算量会比较大;另外一个问题就是鞍点(比较常见的是分类:支持向量机(二)——数值优化函数在分类:支持向量机(二)——数值优化处)的问题。所以,如果优化问题能够在附加一些限制条件时能到简化,那将非常利于最大值或最小值的求解,凸优化问题正是这样一种简化后的优化问题。

       1.1  凸集

       对于 分类:支持向量机(二)——数值优化 维空间中点的集合分类:支持向量机(二)——数值优化,如果对集合中任意两个点分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化,以及实数分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化,都有

                                                                         分类:支持向量机(二)——数值优化

则集合分类:支持向量机(二)——数值优化称为凸集,在二维空间中,可以用一张简单的图来描述一下凸集和非凸集的区别

                                             分类:支持向量机(二)——数值优化

 

       在一些特定的情况下,我们来考虑一下凸集 

  • 分类:支持向量机(二)——数值优化 维实向量空间中,分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化,对任意实数分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化,显然有

                                                                    分类:支持向量机(二)——数值优化

        这一结论表明,如果一个优化问题不带约束,那么该优化问题的变量可行域是凸集。

  • 分类:支持向量机(二)——数值优化 维实仿射子空间分类:支持向量机(二)——数值优化

                                                                                     分类:支持向量机(二)——数值优化

       中,假设 分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化,对任意实数分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化,有

                                                           分类:支持向量机(二)——数值优化

       即分类:支持向量机(二)——数值优化,这一结论表明:若优化问题中的约束是一组等式约束,那么它们确定的可行域是凸集。

  • 分类:支持向量机(二)——数值优化 维实向量空间中,多面体空间分类:支持向量机(二)——数值优化定义为

                                                                             分类:支持向量机(二)——数值优化

        在多面体空间分类:支持向量机(二)——数值优化中,假设 分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化,对任意实数分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化,有

                                                              分类:支持向量机(二)——数值优化

        即分类:支持向量机(二)——数值优化,这一结论表明:若优化问题中的约束是一组线性不等式约束,那么它们确定的可行域是凸集。

   最后,还有一个重要的结论是,多个凸集的交集仍然是凸集。​​​​​​                            

       1.2  凸函数

       对于函数分类:支持向量机(二)——数值优化,如果其定义域内的任意两个点 分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化满足

                                                           分类:支持向量机(二)——数值优化

       则函数分类:支持向量机(二)——数值优化成为凸函数,在二维空间中我们映像最深的凸函数就是下面这种情况了   

                                                                      分类:支持向量机(二)——数值优化

      在多维空间中,如何判断一个函数是否为凸函数,需要依据其Hessian矩阵判断。

      在一个优化问题中,若目标函数是凸函数,变量可行域是凸集,那么该优化问题就称为凸优化问题。通过以上对凸集及凸函数的定义,我们可以将单变量的凸优化问题用以下表达式描述,多变量的凸优化问题也类似

                                                     目标:分类:支持向量机(二)——数值优化

                                                     约束:分类:支持向量机(二)——数值优化

                                                                分类:支持向量机(二)——数值优化

    在凸优化问题中,局部最优值即是全局最优值。

2.拉格朗日乘子法

       拉格朗日乘子法用于求解带约束的优化问题,我们先从带等式约束的情况着手,一步步分析到带不等式约束的情况。

       2.1  等式约束    

       现假设有函数分类:支持向量机(二)——数值优化,带约束的优化目标为

                                                                                    分类:支持向量机(二)——数值优化

                                                                                            分类:支持向量机(二)——数值优化

函数分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化投影在分类:支持向量机(二)——数值优化平面上的等值线分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化如下图所示

                                                     分类:支持向量机(二)——数值优化

 

 图中带箭头的线条表示曲线在该点处的梯度方向。从上图中可以看到,只有约束曲线分类:支持向量机(二)——数值优化与等值线分类:支持向量机(二)——数值优化相切的地方,目标函数分类:支持向量机(二)——数值优化才有局部极值,因为在分类:支持向量机(二)——数值优化曲线与等值线不相切处(即交点处),变量分类:支持向量机(二)——数值优化沿分类:支持向量机(二)——数值优化曲线移动时分类:支持向量机(二)——数值优化会增大或者减小,分类:支持向量机(二)——数值优化无法得到局部极值。因此,在计算分类:支持向量机(二)——数值优化最小值时,首先应该计算出所有满足约束的极值点,然后在这些极值点中找出最小值。

        现在观察一下等值线分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化曲线相切时的特征,在二维空间中,梯度与切线方向垂直(在多维空间中,梯度与切点处切超平面垂直),也就是说分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化在切点处的梯度共线(这里不能说反向,尽管上图中显示的是反向),因此在切点处有

                                                                       分类:支持向量机(二)——数值优化                                         (1)

分类:支持向量机(二)——数值优化为梯度,分类:支持向量机(二)——数值优化为任意实数,依据梯度的计算方式,式(1)等价于

                                                                       分类:支持向量机(二)——数值优化                                            (2)

                                                                       分类:支持向量机(二)——数值优化                                            (3)

分类:支持向量机(二)——数值优化为偏导数计算符号,这样在求解极值点时,联立式(2)、式(3)和分类:支持向量机(二)——数值优化计算即可。为了方便,构造函数分类:支持向量机(二)——数值优化

                                                                   分类:支持向量机(二)——数值优化

                                                                                 分类:支持向量机(二)——数值优化

求极值时直接求分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化的偏导数,并令其为0即可,结果和上面过程一样,这种方法就是等式约束下的拉格朗日乘子法。

        在多个等式约束情况下,也是一样的做法,构造函数分类:支持向量机(二)——数值优化,然后求解分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化 的偏导数并令其为0

                                                           分类:支持向量机(二)——数值优化

                                                                          分类:支持向量机(二)——数值优化

        2.2 不等式约束

        针对2.1节中的优化问题,现增加一个不等式约束                                                  

                                                                                 分类:支持向量机(二)——数值优化

                                                                                     分类:支持向量机(二)——数值优化

                                                                                            分类:支持向量机(二)——数值优化

        在带不等式约束的优化问题中,我们还是要采用先找出局部极值,然后通过比较极值的方式找出最小值,如果局部极值存在,那么只可能有两种情况,一种情况是局部极值点在分类:支持向量机(二)——数值优化的边界上,另外一种是时局部极值点在分类:支持向量机(二)——数值优化的区域内。我们先将函数分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化投影到分类:支持向量机(二)——数值优化平面上,点分类:支持向量机(二)——数值优化为曲线分类:支持向量机(二)——数值优化与等值线分类:支持向量机(二)——数值优化的切点。

        第一种情况如下图所示

                           分类:支持向量机(二)——数值优化

此时不等式约束成为了等式约束,在2.1节中的约束问题中,因为等式约束的原因无法施加更多的约束,只能要求目标函数分类:支持向量机(二)——数值优化与约束函数分类:支持向量机(二)——数值优化在切点处的梯度共线,而在不等式约束中,尽管切点位于约束区域的边界上,但仍能将约束条件加强,我们知道梯度是数值增大最快的方向,函数分类:支持向量机(二)——数值优化在切点分类:支持向量机(二)——数值优化处的梯度肯定不是指向可行域分类:支持向量机(二)——数值优化的,因为这会使分类:支持向量机(二)——数值优化的值减小,而我们的目标是极小值优化问题,切点分类:支持向量机(二)——数值优化处是一个极小值点,因此在可行域内越靠近切点分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化的值越小,所以函数分类:支持向量机(二)——数值优化在切点分类:支持向量机(二)——数值优化处的梯度方向应该是指向分类:支持向量机(二)——数值优化区域的,因此函数分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化在切点分类:支持向量机(二)——数值优化处的梯度方向相反,这样我们可以利用拉格朗日乘子法构建函数分类:支持向量机(二)——数值优化

                                                        分类:支持向量机(二)——数值优化

极值点一定满足如下条件

                                                       分类:支持向量机(二)——数值优化

                                                                             分类:支持向量机(二)——数值优化

                                                                             分类:支持向量机(二)——数值优化

                                                                                   分类:支持向量机(二)——数值优化

 

        第二种情况,切点分类:支持向量机(二)——数值优化 不在分类:支持向量机(二)——数值优化区域的边界上,满足分类:支持向量机(二)——数值优化

                                           分类:支持向量机(二)——数值优化

这种情况下在切点处的不等式约束相当于不存在,我们可以构建函数分类:支持向量机(二)——数值优化

                                                      分类:支持向量机(二)——数值优化

极值点一定满足如下条件

                                                       分类:支持向量机(二)——数值优化

                                                                         分类:支持向量机(二)——数值优化

                                                                          分类:支持向量机(二)——数值优化

                                                                                  分类:支持向量机(二)——数值优化

结合以上两种情况,我们可以利用拉格朗日乘子法构造如下函数

                                 分类:支持向量机(二)——数值优化

该函数的极值点满足

                                                    分类:支持向量机(二)——数值优化

                                                                           分类:支持向量机(二)——数值优化

                                                                           分类:支持向量机(二)——数值优化

                                                                                   分类:支持向量机(二)——数值优化

                                                                      分类:支持向量机(二)——数值优化

3.KKT条件与对偶问题

       第2节中最终总结出了极值点需满足的条件,这样一组约束条件即称为KKT条件,它是优化问题中获取极值点的必要条件。当然,在实际中并不是所有情况下极值点一定满足KKT条件,解出的极值点还是要代入目标函数中检查,要想一个优化问题的极值点满足KKT条件还需要一些规范性条件,我这里不在此列出这些规范性条件了(可以在文章推荐的文章中学习)。依据以上KKT条件,我们就可以求解优化问题了,但一般直接求解这组方程是比较困难的,为了更好的解决这个优化问题,数学家还找到了它的对偶问题,当对偶问题比较容易求解时,我们可以通过求解对偶问题来间接的求解原优化问题,我们还是以单个等式约束、不等式约束问题为例来说明其对偶问题。

       利用拉格朗日乘子法构建以下函数及约束条件

                                                     分类:支持向量机(二)——数值优化

                                                                        分类:支持向量机(二)——数值优化

                                                                               分类:支持向量机(二)——数值优化

                                                                                        分类:支持向量机(二)——数值优化

                                                                            分类:支持向量机(二)——数值优化

我们先来看一下分类:支持向量机(二)——数值优化,约束范围内的点满足分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化,所以可以得到

                                                                        分类:支持向量机(二)——数值优化

不在约束范围内的点,可以调整 分类:支持向量机(二)——数值优化 和 分类:支持向量机(二)——数值优化 的值使用分类:支持向量机(二)——数值优化取到无穷大

                                                                         分类:支持向量机(二)——数值优化

此时求解分类:支持向量机(二)——数值优化是没什么意义的。现在我们只考虑满足约束的点,那么原优化问题分类:支持向量机(二)——数值优化可以表达成

                                                                          分类:支持向量机(二)——数值优化                                              (4)

该问题的对偶问题即为

                                                                         分类:支持向量机(二)——数值优化                                               (5)

我们有

                                                  分类:支持向量机(二)——数值优化                       

在很多文章中都说 “ 最大值中的最小值比最小值中的最大值大是很显然 ”,这样的理解在多变量函数中理解起来有点费劲,不过也暂时只能先这样理解了。求解公式(5)得到的解并不一定是公式(4)中的最优解,那么我们自然就会问,在什么条件下,公式(5)与公式(4)表示的问题是等价的呢?在上面说到的满足KKT条件所需的一些规范性条件中,有一个条件称为 分类:支持向量机(二)——数值优化条件,满足 分类:支持向量机(二)——数值优化条件的约束问题具有强对偶性质,公式(5)与公式(4)中的解是等价的。 分类:支持向量机(二)——数值优化条件表述为:如果优化问题是个凸优化问题,且至少存在一个点满足分类:支持向量机(二)——数值优化 和 分类:支持向量机(二)——数值优化,则极值一定满足 KKT 条件,并且满足强对偶性质。

       本篇文章到这里为止,已经将准备知识说完了,接下来我们着手处理一下上一篇遗留的优化问题。

4.构建SVM超平面时的优化问题

   上一篇中最后的优化问题为

                                                               分类:支持向量机(二)——数值优化      

   我们将其转化为

                                                                                 分类:支持向量机(二)——数值优化   

                                                                                   分类:支持向量机(二)——数值优化

这是等价的,目标函数显然是一个我们熟知凸函数,约束条件定义的可行域也是上文中所说的凸集,所以这是一个凸优化问题。先利用拉格朗日乘子法构建如下函数

                                                           分类:支持向量机(二)——数值优化

                                                                           分类:支持向量机(二)——数值优化                                                                               

                                                                                               分类:支持向量机(二)——数值优化

我们的优化目标可以表达如下

                                                                 分类:支持向量机(二)——数值优化                                        

                                                                                  分类:支持向量机(二)——数值优化                                                                               

                                                                                               分类:支持向量机(二)——数值优化

其对偶问题为

                                                                 分类:支持向量机(二)——数值优化                       (6)                                                       

                                                                分类:支持向量机(二)——数值优化                                                                               

                                                                                               分类:支持向量机(二)——数值优化

很明显,支持向量上的点满足分类:支持向量机(二)——数值优化,因此优化问题满足 分类:支持向量机(二)——数值优化条件,因此其对偶问题的解等价于原问题的解,这样我们可以直接求解其对偶问题的最优解。

 求取分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化的偏导数,并令其为0,得到

                                                      分类:支持向量机(二)——数值优化       

                                                      分类:支持向量机(二)——数值优化

将计算的结果代入公式(6)中,得到

                                                                 分类:支持向量机(二)——数值优化

利用一些数值计算软件,在训练数据集上就可以计算出结果满足最优结果的分类:支持向量机(二)——数值优化值了,继而求解出分类:支持向量机(二)——数值优化分类:支持向量机(二)——数值优化。也有一些算法能快速计算出结果,这个我们后面再介绍,完全线性可分情况下的支持向量机构建到这里也就完成了。事实上,并不是所有的分类:支持向量机(二)——数值优化值均非0,只有支持向量机上的点其对应的分类:支持向量机(二)——数值优化值才非0,这和不等式约束中的第一种情况一致。

5.小结

      本篇博客中首先介绍了构建SVM时涉及的数值优化计算过程的背景知识,但是我没有很详细的介绍,只是介绍了一些必须的部分,感兴趣的同学可以自己再去多了解一些。本系列的前两篇介绍的是在数据完全线性可分情况下SVM的构建,但数据完全线性可分的情况毕竟很少,因此这样构建的SVM模型分类效果并不好,下一篇开始将进一步介绍数据不完全线性可分情况下SVM的构建。