在上一篇博客中,较为详细的介绍了在数据完全线性可分的情况下,构建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 等式约束
现假设有函数



函数





图中带箭头的线条表示曲线在该点处的梯度方向。从上图中可以看到,只有约束曲线








现在观察一下等值线











求极值时直接求

在多个等式约束情况下,也是一样的做法,构造函数




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



在带不等式约束的优化问题中,我们还是要采用先找出局部极值,然后通过比较极值的方式找出最小值,如果局部极值存在,那么只可能有两种情况,一种情况是局部极值点在








第一种情况如下图所示
此时不等式约束成为了等式约束,在2.1节中的约束问题中,因为等式约束的原因无法施加更多的约束,只能要求目标函数












极值点一定满足如下条件




第二种情况,切点


这种情况下在切点处的不等式约束相当于不存在,我们可以构建函数


极值点一定满足如下条件




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

该函数的极值点满足





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





我们先来看一下




不在约束范围内的点,可以调整


此时求解



该问题的对偶问题即为

我们有

在很多文章中都说 “ 最大值中的最小值比最小值中的最大值大是很显然 ”,这样的理解在多变量函数中理解起来有点费劲,不过也暂时只能先这样理解了。求解公式(5)得到的解并不一定是公式(4)中的最优解,那么我们自然就会问,在什么条件下,公式(5)与公式(4)表示的问题是等价的呢?在上面说到的满足KKT条件所需的一些规范性条件中,有一个条件称为





本篇文章到这里为止,已经将准备知识说完了,接下来我们着手处理一下上一篇遗留的优化问题。
4.构建SVM超平面时的优化问题
上一篇中最后的优化问题为

我们将其转化为


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



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



其对偶问题为



很明显,支持向量上的点满足


求取



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

利用一些数值计算软件,在训练数据集上就可以计算出结果满足最优结果的

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