1.前言
这几天把支持向量机看了几次,从一开始碰到朦朦胧胧的感觉再到找了挺多资料看了后,现在也算是有所了解了,但是但让也存在有不太懂的地方,欢迎指出错误之处。因为SVM的内容还是很多并且也有难度,没那么容易懂,所以会打算花一些篇幅来记录我理解的思路和我发现的一些问题。
2.SVM
SVM是我们机器学习领域一个很重要并且很常用的分类回归算法,在很多场景下的SVM都是效果很好的。SVM名称为support vector mechine,直译过来就是支持向量机。看着这个名词也联想不到他的原理大概是做什么的,这要一点一点讲起。
实际上,支持向量机和我们的逻辑回归算法有相似之处,他们的出发点都是寻找一个合适的决策边界,以达到我们回归或者分类的效果。那他们既然为两种不同的算法,当然他们是有差异的:
(1).逻辑回归算法在找决策边界时找的是全局最优解,也就是说他考虑的是使得他的损失函数最小时的那个决策边界。
(2).考虑到我们若只考虑将样本合理分类,那么可能会出现不止一条符合这一要求的决策边界。这些决策边界中差异也是可能很大的。在SVM算法中,我们选择的是找这么一个有很强泛化能力的决策边界。也就是找一个决策边界,使得对于那些离决策边界最近的点来说,他们到决策边界的距离是最大的。 这是SVM算法与逻辑回归算法找决策边界的不同之处。
3.支持向量
这里先补充一下支持向量的概念:支持向量就是说针对于某一个决策边界,离这个决策边界最近的那些点。也就是上文所提到的那些距离要最大的点。
4.最大边缘超平面
最大边缘超平面,也就是maximal margin hyperplane,选择最大边缘超平面作为我们的决策边界,也是使得上图的margin值最大,同时也是d(支持向量到决策边界的距离)最大,margin = 2 * d。
最大边缘超平面的函数式是:
而这里基于,决策边界和支持向量也诞生了另外两个平面:
(1).Plus-plane:指的是上支持向量平面,是平行于决策边界且过支持向量的一个超平面:
(2).Minus-plane:指的是下支持向量平面:
5.为何我们选择的是边缘最大的超平面?
前面讲了,SVM正是从这个边缘最大化来找到最优解,也就是最优的决策边界。那为什么是最大的呢?又不是最小?这主要考虑的是模型的泛化能力。这里有两种解释:
解释1:我们决策边界的边缘越小,决策边界受数据影响越大,数据稍微有波动,对模型的分类结果有很大的影响
解释2:我们考虑模型额泛化能力,计算它的泛化误差,在统计学习中有一种方法就是SRM理论(structural risk minimization),又叫结构化风险最小理论
SRM理论:该理论给模型的繁华误差一个上界R,这个上界也就是模型的最坏情况,一定程度上反应模型的泛化能力。上界涉及训练误差Re,训练样本数,模型复杂度h(也就是模型能力)。分类器的泛化误差上界R<=Re+f(h),其中函数f(h)是个h的递增函数,也就是说复杂度越高f越大。
**那么这个上界说明,R受模型的训练误差和模型复杂度影响,若两者都高,则泛化误差就会很大,泛化能力差。**
根据SRM理论,我们想要选择的泛化能力高的模型(决策边界),如果决策边界边缘越小,模型更加灵活,更容易拟合训练数据,导致模型复杂度增大,模型的泛化误差上界就会很大,导致泛化能力差。 所以选择的是最大边缘超平面。
6.如何求SVM的最优解(第一部分)
根据SRM里面,我们需要找的是最大边缘超平面。我们要做的就是找到一个向量w和一个常数b,这样就构成了我们决策边界。对这个最优的决策边界的目标就是
(1).能将训练数据很好的划分
(2).最大化margin(支持向量到决策边界的距离要最大)
那么为了解决这两个目标,我们也从两个角度去考虑:
(1).我们找的这么一个决策边界中,对于正类的训练数据,都位于Plus-plane上或之上;对于负类的训练数据也相对应的在Minus-plane上或之下。在代数上就表示为训练数据点到决策边界的距离大于或等于支持向量到决策边界的距离d:
(2).要是margin最大化,也就是支持向量到决策边界的距离d最大化。d的公式如下:
这里的x值得是支持向量。我们先看看Plus-plane和Minus-plane这两个平面,我们可以通过如下转化:
这样就能得到
此时再看,因为支持向量是在Plus-plane和Minus-plane上,则满足上面两个式子,代入就为+1或者-1。那么d的分子就为1(原因d是支持向量影响的)。那d就变成了
最大化d也就转化为最小化w的模,也就等价于下列问题:
最终问题就转化为求一个最值问题,同时也是有限制条件的。
7.如何求SVM的最优解(第二部分)
对于上面分析,这不难发现是一个凸优化问题,也就是这个问题的局部最优解也就是全局最优解。
Step 1:
我们在解决这种有限制条件的多元极值问题中,是通过引入标准的拉格朗日乘子(Lagrange multiplier),也就是构造拉格朗日函数来解决。 首先构造拉格朗日函数:
通过求解这个拉格朗日函数的极值就是原方程的最优解。值得提醒的是此时的参数由原来的向量w和常数b,增加了一组拉格朗日乘子(λi,一个训练数据对应一个拉格朗日乘子)。
Step 2:
对这个拉格朗日函数,我们发现还不完整,原因是原本的最优化问题涉及的是不等式约束而非等式约束,此时我们要引入KKT条件(Karuch-Kuhn-Tucher) :
这里KKT条件是通过引入拉格朗日乘子作为一个约束条件,把不等式约束转化为等式约束,只要限制拉格朗日乘子非负,这种变化就是可行的。
Step 3 :
加入了KKT条件,理论上是可以通过计算解出这个拉格朗日函数所对应的局部最优解的。但是,由于我们总共要解决的参数十分之多,包括向量w,常数b,还有一组拉格朗日乘子,此时计算解这个拉格朗日函数的代价是十分之大的。此时,我们通过转化对偶问题(dual problem) 来解决。
【这里补充一下我们是如何思考转化对偶拉格朗日这个问题:
】
找到原先拉格朗日函数的对偶函数,我们要消去一些变量,我们通过使用原拉格朗日函数对参数w和常数b进行求导:
解出两个参数的值:
把结果代入到原拉格朗日方程中得到对偶拉格朗日函数:
此时KKT条件也会发生变化:
现在就从找最小化原拉格朗日函数,转化为最大化对偶拉格朗日函数,这样做的优点是可以使得对偶拉格朗日函数中的参数数目变少,同时他们两个问题的最优解是等价的。
Step 4 :
再看对偶拉格朗日函数求极值,此时的参数就是一组拉格朗日乘子。后续工作就是利用数值计算技术来找出一组拉格朗日乘子,再用拉格朗日乘子代入下式求得w向量。
再代入KKT条件求出常数b:
8.记录一些SVM的个人理解
(1).为何叫支持向量机?这是因为我们选取的最优的决策边界是由支持向量来决定的。回看刚刚的参数计算过程,注意再求向量w参数时,我们先看KKT条件:
这里λi的取值只能等于0或者大于0 ,而在第一条KKT条件中,若第二个乘积项不为0(意味这个数据点不是支持向量)此时λi只能为0 ;若第二个乘积项为0(意味着这是支持向量),此时λi肯定不为0。
总结起来,就是支持向量的λi肯定不为0,非支持向量的λi一定为0 。
而通过λi代入下式求向量w:
不难发现λi为0时,也就是非支持向量时,这个累加项为0,对向量w无任何影响;反而λi不为0时,也就是支持向量,会决定了参数w的值。同理在计算b时也一样,所以我们说决策边界由支持向量所决定,因而称之为支持向量机。