机器学习十大算法--SVM(支持向量机)

概述

SVM(支持向量机)是一个二分类的模型,它的主要思想就是间隔最大化,那么问题来了,什么是间隔最大化,老规矩,没图说个JB,所以喽,首先先来了解下分类的概念,如图:
线性SVM1

图中,每个点是一个样本,黑色的点属于一类,用1表示;白色的点属于一类,用-1表示。我们现在目的就是找得一条线可以将这两类分开,这条直线具体又是怎么完成分类呢,假设我们现在有了这条直线方程了,那么根据我们高中学过的数学知识可以知道,将黑色的点的坐标带入直线方程,它得到的值都大于0的,同理,白色的点都小于0,那么我们岂不是就完成了分类目的了。。。
下面在来看第二张图:
线性SVM2

从刚才的分析中我们可以总结出:我们的目的就是找到那条可以使样本分开的直线,但是如上图所示我们可以看到有无数条直线都可以将样本分开,你是否又产生了疑问:“那种可以分开的直线有很多条哇,该选哪一条呢?”现在就可以回归刚刚的问题啦,通过最大间隔求得最优的那条,当然还是看图喽:
最大间隔

图中黄色区域就是间隔喽,从我们直观感受可以看出:间隔的大小是由距离直线最近的那些点(也就是图中蓝色和红色圈出的点)所决定,这些点在这里有个名字——支持向量,哦吼,估计你现在对支持向量机这个名字有点认识了,当这些支持向量距离直线的距离达到最大时,间隔也就达到了最大,而这条直线也正是我们要找的。。。

以上就是SVM的基本思想,是不是还挺简单的哈。。。哦,对了还有一点哦,以上都是2维的样本,当样本是3维时,我们就要将那条直线升级为一个平面了;当>3维时,那条直线就是一个超平面,什么是超平面?问得好,我也不知道哦,哈哈,不过把它理解为一个类似三维的平面就可以了,初学千万别花太多时间去想多维是个什么情形,那样会把自己整死。。。

支持向量机的模型有简单到复杂可以分为:线性可分支持向量机、线性支持向量机、非线性支持向量机。下面就分别讲解一下这三种模型,什么鬼,怎么那么多,别紧张,好好看懂线性可分支持向量机就ok了,其他两种只是它的稍微变形。。。

1、线性可分支持向量机

1.1、函数间隔和几何间隔

先来看一些基本字母表示和定义:
以下全是基于多维的情况,一个样本表示为( xi yi ),其中x是特征(n维),y代表了标签(由-1,1组成),i代表了第i个样本。超平面也就是: wTx+b=0 ,其中w是超平面的法向量。

1.1.1 函数间隔

函数间隔被定义为:
γ^=y(i)(wTx(i)+b)
为何这么定义,我们再回忆一下直线方程,我们高中时老师就教给我们,要想知道某个点在直线的上方和下方,只需将这个点带入到直线方程,看得到的值大于0还是小于0即可。同理推理到超平面,我们将第i个样本点带入就得到函数值 wTx(i)+b ,但是这个函数值有正有负,而函数间隔在我们日常表达中都是正的,因此我们需要在刚刚的函数值之前乘上一个标签 y(i) ,因为y取1对应于样本在超平面的上方(函数值为正)而y取-1对应于样本在超平面的下方(函数值为负),所以上式中的 γ^ 实际上就是 |wTx(i)+b|
总结:这样定义的好处是不管是正例还是反例,当求得的 γ^ 较大时就说明距离超平面的距离越远,反之亦然。。。

1.1.2 几何间隔

先来看个图:
几何间隔

如图所示:B点是A点在超平面上的投影,样本A表示为( xi yi ),A点到超平面的几个间隔为 γ(i) ,向量BA的方向和法向量w一致,这个方向的单位向量表示为: w||w|| ,因此BA向量可以表示为: γ(i)w||w|| ,根据向量(矢量)的加减可知B点是: xiγ(i)w||w|| ,将B点带入超平面 wTx+b=0 可得:

公式1

经过移位和简单变换,求解出 γ(i) ,上式变为:

公式2

同样的给它乘上标签y,那么最终完美的 γ(i) 写成了:

这里写图片描述

为什么说它很完美呢,因为你有没有发现,当 ||w||=1 时,几何间隔就变成了函数间隔。我们反过来再看函数间隔,对于超平面 wTx+b=0 ,当w和b都同时增大或减小相同倍数时,我们发现对这个超平面的位置没有影响(可以约掉放大的倍数),所以这样就会没有唯一解,所以我们要对函数间隔归一化,归一化后正好就是我们刚刚求得的几何间隔,这时不禁要第一次感慨一下数学家的睿智,之所以要说是第一次,因为看到后面你会继续被数学家所折服。说了那么多你可能会问,干嘛整出来什么函数间隔,直接用我们平时地几何间隔不就完了吗,哈哈,提出这个当然是有用的喽,不然数学家干吗费这个脑子哟,这个问题我会在接下来的一小节中讲解。。。

总结函数间隔和几何间隔的关系是:
γ=γ^||w||

1.2、 最大间隔分类器

现在再次回到我们的初始目标:寻找最优一个超平面,使得距离它最近的点(支持向量)到它的距离最大,也就是所谓的间隔最大化,将其用公式表示如下:

最大间隔分类器公式1

这里加上了约束 ||w||=1 ,这样就使得 y(i)(wTx(i)+b) 是几何间隔了,但是 ||w||=1 是非凸的不易求解(可以经过贪婪或非贪婪的方式求解),所以我们刚才提出的问题答案就在这里了,我们这时就要用到函数间隔这个概念了,我们将模型改为如下形式:

最大间隔分类器公式2

可以看到模型中,目标函数由原来的几何间隔变成了函数间隔除以 ||w|| ,因为 γ=γ^||w|| ,所以目标函数还是几何间隔,但是约束里就没有了 ||w||=1 这一项。解决了约束问题,但是目标函数中还是含有非凸的 ||w|| 项,这怎么办呢,当然不是凉拌炒鸡蛋,这里首先将 γ^=1 ,也就是将支持向量到超平面的距离定义为1,目标函数就变成了 1||w|| ,最大化这个目标函数,也就相当于最小化 12||w||2 ,为什么这么写,因为这样它就是一个凸函数了哇,就容易求解喽,最终模型如下:

最大间隔分类器公式3

通过上述模型我们能够求解出最优w和b,也就求得了最大间隔超平面了,求得超平面后,我们将要测试的样本点带入,当求得的函数值>0时归为正例一类,将函数值<0的归为负例一类。到这里就结束了吗,当然没有,还记得我说的被数学家的睿智所彻底折服吗,这里就需要你来膜拜了。。。

当然在进行下面的推导之前你需要看下一对偶问题的求解,要是只是想会用SVM不看也没关系,你可以直接跳过标有红色字体的理解,单纯的记住需要这样就ok啦。

为什么需要求解对偶问题呢?问的好,优点:1.对偶问题更容易求解;2.方便我们之后进入核函数,这是后话,到讲到核函数时,你就是茅塞顿开啦。

我们先将约束进行改写为:

对偶求解公式1

接着构造拉格朗日函数为:

对偶求解公式2

根据KKT条件可知:只有支持向量前面的系数α>0,其他样本点前的系数α=0。当满足KKT条件时,原问题和对偶问题是等价的,所以我们可以将原模型改变为如下公式的对偶问题。

对偶求解公式3

也就是说我们现在的目的就变成了解决上式。。首先先求内部这里写图片描述,固定α,对w和b求偏导如下:

这里写图片描述
这里写图片描述

整理上式可得:

这里写图片描述

将求偏导后的结果带入这里写图片描述化简后得到如下:

这里写图片描述

我们再将向量内积这里写图片描述换一种表示形式为:这里写图片描述

我们可以看出上式只和α有关了,也就比较好求解了,我们需要求出α,然后就可以得到w和b了,现在我们要求解外层这里写图片描述了,将上述求出的内层结果带入,相当于求解下式:

这里写图片描述

对于上式模型的求解,做经典的就是使用SMO(Sequential minimal optimization)算法了,具体的思想请移步:欲知详情请点我哦!

好啦,现在我们经过SMO算法更新迭代求得了最优的α了,那么根据公式这里写图片描述,我们就可以求出法向量最优w,在这里我们可以看到求解w时,对所有样本做运算,这岂不是要耗时很多哇,给这个算法差评,哈哈,当然不是,这里就再次体现了支持向量的优势之处了,还记得我们前面说过的只有支持向量的系数α>0,其他样本的系数α都等于0吗,这样我们不难发现实际上只是那几个少数的支持向量参与了运算,计算量是不是就很小了哇,然后再根据公式:

这里写图片描述

求得最优的b,知道了最优的w和b,那么很自然的含有最大间隔的超平面也就相应地可以求得啦,这就完成了我们最终的目的喽,求解出了线性可分支持向量机,第一部分到这里完全结束啦。

2. 线性支持向量机

上一节我们讲了线性可分支持向量机,为什么起的是这个名字呢,因为它的所有样本是线性可分的,但是当存在离群点时,什么是离群点呢,如下图所示:

这里写图片描述

上图中左边的图形是线性可分的情况下的描述,右图的最上方那个圆圈样本就是离群点,当这种样本存在时,我们发现超平面的位置改变了,它使原来的最大间隔变小了,这是我们特别不希望的,再有更糟糕的情况,就是离群点完全在另一类中了,如下图所示:

这里写图片描述

这种糟糕的情况就变成了线性不可分的情况,也许你会说我们找到一个曲线(如图中所示)区分不就行了,但是这样会产生严重的过拟合(对训练样本表现极好,对测试样本表现不好,泛化能力差),所以我们需要将上一节中的模型进行改进,改进结果如下:

这里写图片描述

在上式中我们可以看到:增加了一个松弛因子 ξi ,它的作用就是允许离群点存在(离群点到超平面的距离小于1),在目标函数中我们又对那些离群点乘了一个C(惩罚项),C就是为了让这些离群点对最大间隔超平面的影响变小,C值越大对离群点的惩罚增大,C值越小对离群点的惩罚减小。

对于上式的求解和化简,类似于上一节中对模型的计算,首先将其化为拉格朗日函数,然后根据对偶函数求解化简,最终得到下式:

这里写图片描述

首先看一下这个推导化简后的式子, ξi 不见了,在我们推导的过程被约去了,再仔细看这个式子,有没有似曾相识的赶脚,是的,你没看错,就和上一节的线性可分支持向量机的最终模型是差不多的,所不同的就是对α的约束这里不同了,此时有没有感觉到提出SVM的研究者的思想之高深。。。

对于上式模型的求解,当然还是用到了SMO(Sequential minimal optimization)算法,首先迭代求解出最优的α,然后根据α和对应的样本,求出最大间隔超平面就ok啦!第二部分就结束了,下面让我们来看看非线性支持向量机。

3. 非线性支持向量机

上一节我们讲了线性不可分的情况,当离群点特别多,多到如下图那样时,我们就需要再改进一个新模型来解决了:

这里写图片描述

这是一个二维空间的例子,我们可以看到两类样本完全无法分开,我们这样想,将这些样本映射到高维空间是什么情形了,看如下的一种映射:

这里写图片描述

我们将刚刚二维空间的样本映射到三维,是不是显而易见就变成了线性可分的啦,此时我就就能又能解决分类问题啦,当然喽,此时你需要补充的就是核函数这个概念了(点我了解核函数)。。。

现在你已经看完了核函数,没看也没关系,你只要记住:我们的模型改进是在上一节的模型中将样本内积这里写图片描述换成核函数就ok了,核函数的值代表了样本在高维空间的内积(千万别认为核函数是将低维空间的样本映射到高维空间,然后做的内积,因为它没有映射这个过程),改进后的最终模型如下:

这里写图片描述

大家和上一节中的最终模型对比,可以看到只有内积换成了核函数,其他的都没有变,也是一样的,通过SMO算法求得最优的α,然后再求出最终的最大间隔超平面,就可以进行分类啦。。。

对于SVM的理论介绍就讲到这里了,也许有些地方的理解不到位,欢迎留言,共同进步!

猜你喜欢

转载自blog.csdn.net/michael__corleone/article/details/72793625