首页 > 代码库 > 话说svm

话说svm

一.问题:

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维,这样在向量内积的计算上会带来很大复杂度,工程上使用的模型要求简单、可解释啊。如此高的复杂度怎么能满足工程上的要求,作为一个在学术界和工业界都混得开的模型来说,解决这个问题自然不在话下,这个问题如果交给我们,我们如何思考,向量先从低维映射到高维再计算内积,那能不能先计算内积再做映射呢,很多好的想法都是从这种疑问中产生的,我觉得这种思维我们也是具备的,这里的关键问题就是计算完内积时如何做映射,这个其实需要根据数据的分布来做,例如通过数据分析发现数据的正负样本是成椭圆形的,那么就构造一个椭圆形的映射曲线,说起来简单,对于高维数据,如何发现这样一个映射函数呢,很难,不过人们在实际运用的过程中发现了几个函数,在实际的数据中的效果还不错,所以就用这些发现的函数来做映射,这些函数就叫做核函数。这个时候我们的问题看似解决了,回顾一下我们的思路,对于线性可分的数据,我们直接用最优间隔法来训练,对于线性不可分的,我们映射到高维从而达到了线性可分,对于计算量的问题,采用核函数。

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

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

线性可分=>最优间隔法

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

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

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

加快求解速度=>SMO算法

三.推导

1.      最优间隔分类器

最优分类器主要有几点,

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

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

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



2.      最优化方法

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

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

二是理解原始问题的表达

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

四是理解什么是KKT条件

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

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






3.      核

核技巧,这里主要是做一下介绍,这个部分如果要研究应该可以研究的很深,主要有几个问题

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

二是理解核函数的作用




4.      噪音

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

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

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

在本问题当中,||w||表示的是置信范围,而表示的是经验风险,C表示的是误差的权重,当C越大时,表示经验风险越重要,相对的置信范围就没那么重要,这个时候容易造成过拟合,当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.        《统计学习方法》

话说svm