机器学习系列之支持向量机

来源:互联网 发布:淘宝大学新手开店教程 编辑:程序博客网 时间:2024/05/27 01:04

支持向量机(Support Vector Machine, SVM)是一种非常重要有效的二类分类模型,甚至有人说是最好的学习方法,针对支持向量机有非常广泛且深入的研究。但是要写好一篇关于支持向量机的文章却是非常难的,因为涉及的东西实在太多,推导也比较复杂,最主要的是已经有大神写的非常之好了,这里推荐一下July的“支持向量机通俗导论”,写得很不错,通俗易懂。因此这里我就不再讲解SVM的推导了,只是说一下自己的理解,将SVM的一些大的方面融会贯通起来,这样可能看起来更有整体性。


1. 从感知机讲起

在第一篇讲解感知机的文章中就已经说明,感知机是SVM的基础,不同的是由于感知机是以分类错误的样本到分类超平面间的距离之和作为损失函数,因此只要当前超平面将数据分开则就认为该超平面为最终的分类超平面,也就造成了输入数据顺序的不同导致分类超平面的不同。而SVM不但要求分类正确,同时还要求间隔最大,这就使得分类超平面唯一,且是最优的分类超平面,其对未知数据的分类能力最强。


2. 间隔

要明确几个定义:函数间隔、几何间隔、“间隔最大”里所指的间隔。对于样本函数间隔指的是但是由于法向量可以成倍放缩,因此又定义了几何间隔,因此函数间隔和几何间隔都是指的单个样本到分类超平面的某种距离。而“间隔最大”里所指的间隔是指分类超平面与数据集中所有样本间的几何间隔中的最小值。


3. 目标函数及约束条件

确定了目标是使得间隔最大,那么就要用数学形式表达出来。如果用表示这个间隔,则应满足所有样本到分类超平面的几何间隔都应大于等于,那么我们的目标就是在满足这个约束的情况下最大化。可是这个应该如何表示呢?我们知道其实也是一个几何间隔,只不过是支持向量与分类超平面间的几何间隔。因为函数间隔与几何间隔差了一个系数,因此我们可以人为地设定支持向量与分类超平面间的函数间隔为1(因为函数间隔可以成倍放缩),则间隔就变为了,那么我们的目标就是极大化,同时约束条件应该变为所有样本到分类超平面的函数间隔都大于等于1。另外由于非凸,不利于我们优化求解,因此我们变形为其等价形式,即极小化,这与极大化是等价的。之所以有是因为在后面对目标函数求导的时候可以抵消掉平方得到的2。


4. 拉格朗日乘子法

有了目标函数和约束条件,我们发现这其实就是一个凸二次规划问题,而且完全可以用现成的工具包来求解。但是实际应用中这可能不太可行,因为效率太低,因此我们必须要想其他更优的求解方法。一般来说,这种带等式和不等式约束的凸优化问题可以通过拉格朗日乘子法来解决。利用拉格朗日乘子法可以将原问题的极小化问题转化为新的极大极小化问题,即先对拉格朗日乘子取极大,再对和b取极小。


5. 对偶形式

转换为拉格朗日乘子形式变为极大极小问题之后我们发现这样求解仍然比较繁琐,而且意义不是很大,因此我们需要将其转换成对偶形式,即极小极大问题,先对和b取极小,再对取极大。但是对偶问题与原问题并不等价,这个很容易理解,极大值中的极小值肯定要大于等于极小值中的极大值,也就是说对偶问题的解是原问题解的一个下界,那么什么时候两者相等呢?当满足KKT条件的时候原问题与对偶问题的解相等。


6. SMO算法

转化为对偶形式,即极小极大问题之后,可以先对和b取极小,将和b表示为的形式,然后带入目标函数,得到关于的求极大的函数形式。因为的个数与样本的个数是一样的,当样本非常多的时候,通常的求解方法太过耗时。为了解决这个问题因此提出了SMO算法。


7. 线性支持向量机

其实上面讲的方法有效的一个前提是样本本身是线性可分的,这样才能满足所有样本的几何间隔都会大于等于,这种条件下的支持向量机叫做线性可分支持向量机。但是实际应用中很多数据都会存在噪声,比如数据总体上是近似线性可分的,近似的意思就是有个别两类的点混在一起,如果不考虑这几个点的话仍然是线性可分的。对于近似线性可分的数据,我们可以用线性支持向量机来解决。线性支持向量机比线性可分支持向量机应用范围更广,后者是前者的一种特殊情况。


8. 松弛变量

为了解决近似线性可分问题,我们对每个样本的约束做了放松,即加了一个松弛变量,使得约束从之前的样本到分类超平面的函数间隔必须大于等于1放松到大于等于1-,也就是说允许一些点在间隔边界之内,同时目标函数变为。之后的优化求解方法与线性可分支持向量机类似。但要注意的是我们还要加一个约束条件,,这个约束保证了对于非支持向量和不在间隔边界之内的样本的为0,即这部分样本的损失为0。


9. 核技巧

无论是线性支持向量机还是线性可分支持向量机,它们都要求数据本身线性可分或者近似线性可分,但是实际中线性不可分的情况比比皆是,那么我们如何解决呢?一种想法是将数据通过某种映射将输入空间映射到高维空间,使得其在高维空间线性可分,然后再在高维空间下使用线性模型来分类。但是这存在一个问题,就是维数爆炸问题,即映射之后的维数可能会非常大,甚至是无穷维,那么光是将样本从输入空间映射到高维空间这一步就很困难甚至不可做了。这时候就需要核函数出马了。核函数可以不必显示的表达出映射函数,也不必在高维空间下运算,而是在原来的输入空间下运算,而其结果却等价于映射到高维空间后的运算!但是要注意的是,使用核函数的前提是有内积运算,且核函数只能用在内积运算上。这也就限制了核函数的应用范围,也就是说并不是所有的线性模型都可以通过核函数来扩展到非线性分类。而SVM的对偶形式恰恰包含内积运算,因此SVM通过核函数一下子扩展到非线性分类领域,这也是为什么要有对偶形式,为什么SVM应用范围如此之广的原因之一。


参考资料

支持向量机通俗导论,July 著

统计学习方法, 李航 著

0 0