首页 > 代码库 > 支持向量机的常见问题和推导

支持向量机的常见问题和推导

一.问题:

1.      Svm是什么

2.      什么是支持向量

3.      什么是最优间隔分类法

4.      最优间隔分类法与最小二乘、最大似然法的比較

5.      什么是拉格朗日

6.      什么是对偶

7.      为什么要做对偶

8.      什么是KKT条件

9.      为什么满足KKT条件强对偶成立

10.  Svm怎样解决非线性问题?神经网络呢?

11.  什么是核函数

12.  Svm怎样面对噪音问题

13.  什么是松弛变量

14.  松弛变量项vs权重惩处项

15.  什么是结构风险、期望风险、经验风险、置信范围

16.  Svm怎样体现结构风险最小化的?

17.  Svm怎样做经验风险和置信范围的平衡的?

18.  什么是坐标下降法?(not梯度下降)

19.  什么是SMO算法

20.  SMO算法怎样求解

 

二.思路

Svm是一个有监督的模型,那么在模型训练的过程中,一定是有一个评价标准的,或者叫做目标函数,也就是依照什么样的目标来训练,像我们之前用过的有最小二乘法、最大似然法

 对于svm来说,目标函数是怎么得到的什么呢,是通过一个叫最优间隔的方法,何为最优间隔,最优间隔指的是可以使正负样本分开,而且分开的间隔最大,思考一下,假设数据是线性可分的,那么可以让数据分开的超平面有非常多,那么究竟选择哪个超平面呢,就是选择那个使得数据分开的间隔最大的超平面,在这样的思路的指导下,我们就得到了目标函数。事实上这里体现的就是结构风险最小化的原则,能将数据分开代表的是经验风险,也就是分类误差,最大化间隔代表的是置信范围,结构风险最小化和经验风险与置信范围之间的权衡在模型含有噪音的情况下体现的更加淋漓尽致,卖个关子,后面看。

有了目标函数,怎样求解呢,这个时候就须要最优化理论来帮忙了,详细来说,这个问题是不等式约束的最优化问题,我们的思路就是构造拉格朗日函数,将有约束的问题转化为无约束的问题,构造完了之后我们发现这个问题是不好求解的,进而我们将这个原始问题转化为对偶问题,这个时候我们就会有疑问,原始问题和对偶问题的解是一样的么,或者什么情况下两者的解是一样的,答案是在满足KKT条件的时候。构造了目标函数,有了优化方法,是不是将这个问题一股脑的交给数值优化算法就能够了。等等,好像不是这种,前面仅仅是在处理线性可分的问题。

线性不可分的情况应该怎么处理呢,假设让我们回到那个年代,把这个问题交给我们,我们会採取什么样的思路呢,我认为比較好想的一种方法就是人多力量大的方法,一个线性的分类器不行那么组合多个线性的分类器,当然,假设简简单单的组合线性分类器还是处理不了非线性问题,那么就在线性分类器的输出上加一个非线性的函数是不是就能够了,恩,是的,这样的思路的代表就是神经网络,也就是在拓扑结构上下功夫。那么还有别的方法么,有,可是可能不太好想,所以发明这样的算法的人确实非常牛,当中一种方法就是SVM,SVM的思路我认为并非非常好想,我猜这也是SVM比神经网络来的稍晚一些的原因。

SVm处理非线性问题的思路是什么呢,数据在低维空间中不可分,那么在高维空间中是不是就线性可分了呢,是的,不然就不会说了,svm就是将低维空间不可分的数据映射到高维从而使得数据能够线性可分,线性可分之后就能够用到前面的最优间隔法了。

维度增高了,计算量也就随着增大了,怎样解决计算量的问题呢,依照前面的思路,由低维映射到高维,维度添加的速度是恐怖的,比如2维会映射到5维,3维会映射到19维,这样在向量内积的计算上会带来非常大复杂度,project上使用的模型要求简单、可解释啊。如此高的复杂度怎么能满足project上的要求,作为一个在学术界和工业界都混得开的模型来说,解决问题自然不在话下,这个问题假设交给我们,我们怎样思考,向量先从低维映射到高维再计算内积,那能不能先计算内积再做映射呢,非常多好的想法都是从这样的疑问中产生的,我认为这样的思维我们也是具备的,这里的关键问题就是计算完内积时怎样做映射,这个事实上须要依据数据的分布来做,比如通过数据分析发现数据的正负样本是成椭圆形的,那么就构造一个椭圆形的映射曲线,说起来简单,对于高维数据,怎样发现这样一个映射函数呢,非常难,只是人们在实际运用的过程中发现了几个函数,在实际的数据中的效果还不错,所以就用这些发现的函数来做映射,这些函数就叫做核函数。这个时候我们的问题看似攻克了,回想一下我们的思路,对于线性可分的数据,我们直接用最优间隔法来训练,对于线性不可分的,我们映射到高维从而达到了线性可分,对于计算量的问题,採用核函数。

那么有没有在高维依旧线性不可分的情况呢,当然有,比如数据中的噪音,特征全然一样,可是类标签不一样,当然这是一种极端的情况,无论怎么做映射都不能做到线性可分,这个时候怎么办呢,退一步海阔天空么,别那么严肃,放松一下限制条件,同意错分,也就是同意经验风险不为0,这样做的优点就是会添加分类间隔,从而减小置信范围,所以这是一个经验风险置信范围权衡的问题,详细怎么做呢,就是加一个叫做松弛变量的因子,以下的问题就剩求解了,能够使用数值优化的算法,只是,svm没有使用通用的梯度下降、牛顿法等来进行參数的计算,而是採用了类似坐标下降法的算法,详细的算法在以下的推导上看。

总结一下svm的思路,svm就是这样一个一环扣一环的模型,有问题,有解决方式。

线性可分=>最优间隔法

线性不可分=>映射到高维空间

映射到高维空间中计算量大=>核技巧

数据含有有噪音=>松弛变量

加快求解速度=>SMO算法

三.推导

1.      最优间隔分类器

最优分类器主要有几点,

一是理解一下什么是最优间隔法,体现出的是什么思想

二是了解怎么由最优间隔法得到目标函数

三是跟最小二乘法、最大似然法做一下比較。

技术分享技术分享

技术分享

2.      最优化方法

在求解目标函数的时候,使用了最优化方法,主要有几点

一是体会解决不等式约束最优化问题的思路

二是理解原始问题的表达

三是理解为什么要将原始问题变为对偶问题

四是理解什么是KKT条件

五是理解为什么满足KKT条件时原始问题跟对偶问题的解是一样的

六是理解支持向量的真正含义

技术分享

技术分享技术分享

技术分享

技术分享

技术分享

3.      核

核技巧,这里主要是做一下介绍,这个部分假设要研究应该能够研究的非常深,主要有几个问题

一是低维到高维映射的思路

二是理解核函数的作用

技术分享

技术分享技术分享

技术分享

4.      噪音

有噪音的情况是svm比較精彩的地方,主要精彩的地方就是结构风险最小化中经验风险和置信范围的权衡问题。

我们训练模型的目的事实上就是希望模型的期望风险最小,期望风险最小指的是模型在预測未知样本的时候误差最小,遗憾的是,由于是未知样本,这个误差我们是得不到的,那怎么办呢,有人得到了期望风险的上界,既然不能最小化期望风险,那么我们就最小化期望风险的上界吧,这个上界是什么呢,就叫做结构风险。

结构风险是有两部分构成的,一是经验风险,这是大多数模型採用的优化目标,二是vc置信范围,vc置信范围与两个因素有关,一是样本数量,二是vc维,vc维表示的是模型复杂程度

在本问题其中,||w||表示的是置信范围,而表示的是经验风险,C表示的是误差的权重,当C越大时,表示经验风险越重要,相对的置信范围就没那么重要,这个时候easy造成过拟合,当C越小时,表示的是经验风险没那么重要,相对的置信范围显得更加重要,那么这个时候就要考虑是否会造成过拟合。想想我们之前在做线性回归和逻辑回归时加的权重惩处项,是不是就是考虑了结构风险最小化原则。

技术分享

技术分享技术分享

技术分享

5.      SMO算法

SMO是一个求解方法,主要理解几个问题

一是坐标下降法的思路

二是KKT条件在选择alpha的作用

三是详细的推导过程。

技术分享

技术分享技术分享

技术分享

技术分享

技术分享

技术分享


技术分享

技术分享

技术分享

6.      代码演示

四.參考文档

1.        http://blog.csdn.net/xceman1997/article/details/7971398

2.        http://blog.pluskid.org/?page_id=683

3.        http://zhihaozhang.github.io/2014/05/09/svm2/

4.        《统计学习方法》

支持向量机的常见问题和推导