【技术分享】机器学习之SVM - 理论知识

2019-09-12 11:28:19 浏览数 (1)

本文原作者:汪毅雄,经授权后发布。


导语:本文用一些简单的例子来解释了SVM是什么,然后通过SVM中最大间隔、核函数、软间隔、SMO四个关键部分,依次进行数学推导和解释。

相信了解机器学习的同学都知道,SVM的“完美强迫症”使得其在各大模型中,几乎是一个“统治性”的地位。但是也不是那么绝对啦,SVM比较耗时,因此不适合那些超大样本。

认识SVM

性质:首先一般情况,它主要解决的是分类问题(当然,回归也是可以做)。

解决的2个主要问题:

1、最大间隔问题

先看一组图片 (图片出处

假设有一堆球,想用一根棍子把它们分开,怎么做?

有人这么做,确实分开了,那就可以下班了吗?显然不行

SVM看到后,强行把棍子扭一扭才舒服,扭完后棍子离两边的球都比较远了。

OK,先给出几个关于SVM的术语:

小球:数据

棍子:超平面

间隔:离超平面最近的那个数据,到超平面距离

如图,假设间隔为f(x),则SVM做的事就是找的一个棍子(超平面),使得max{ 2f(x) },也就是找到最大间距对应的那个超平面。

核函数

还是先看一张图

星星和圆分别代表一些样本,这时候需要分开它们怎么处理?

这时候用一个简单的核函数就能处理了,我们令z = x^2 y^2,这样在z轴上就能得到一些数据,如下图。

这个超平面在z轴的值我们随便举说个,比如9,那超平面可以描述为x^2 y^2 = 9

回到第一张图,看这个核函数的超平面就是这样的划分的。

好了,SVM的认识到此,如果只是想了解SVM是什么的,可以就此打住了,后面的是数学的推导。

详解 数学推导

最大间隔问题

我们知道一个平面的方程可以用

来表示。而点x0到面的距离可以这么表示:

好了,开始真正的说SVM了,这里我们沿用经典的SVM推导方式。

如上图(图片来自wiki),我们假设样本是线性可分的,如果采用最大间隔的方法的话,那么它一定可以表示成如上的模型。也就是说对于所有的白点和黑点都满足:

 yi用-1和1来区分,方便推导

而他们的间隔则为

那么最大间隔问题模型就转化为求解使得间隔r最大的w和b,即(s.t.表示受限制于):

为了方便计算,我们把问题转化成:

这个就是最大间隔问题的最初模型。可以看到这个是一个带不等式约束条件的求最小值问题,而目标函数又是一个凸函数,这个问题就转化成一个凸优化问题!

在我的另一篇文章《 怎么理解凸优化及其在SVM中的应用 》中,详细的解释了凸优化及上述问题的推导,这里直接给出结论。

对于带约束条件的极值问题,肯定也是采用拉格朗日乘子法,其函数:

上述问题的等价问题为:

其对偶问题为:

先求min(L),对w和b分别求偏导得:

代回L中即得到minL,手撕一段吧:

上图最后一行就是最大间隔的对偶问题的最终形式,对偶问题和原始问题等价的话,需要满足KKT条件,令

则KKT条件为:

模型最终转化成参数为alpha的函数最大值问题,也就是由w,b两个参数变成一个参数了!

怎么求?显然,梯度下降法绝对是可行的,但是效率太低。

为了提高效率,大牛们提出了很多高效的算法,其中最著名的一个是SMO算法,这个放到文章最后讲!

核函数

核函数不是SVM独有的,只是SVM让它发扬光大了!在最大间隔问题中,我们的分割平面设为:

这就是说,它只能处理线性分割。而要实现非线性分割,则必须使用核函数了。核函数的作用,其实就是把样本映射到更高维的空间,使得原本线性不可分的样本变得在某一个纬度变得线性可分。

在模型上看来就是把

,代入最大间隔模型中就是

其对偶问题为:

核函数即为:

如果已知φ(x),那核函数肯定就能求出来,但是通常情况

1、我们往往很难求出合适的。

2、纬度太高的话,求内积会非常非常吓人

因此对于核函数,只能定义一些常用的。但是不是随便定义的,由于是做φ(x)的内积,学过矩阵的应该知道,其核矩阵必须是半正定的

一些常见的核函数有(内容来自wiki):

而我们最常用的核函数主要是:线性核(φ(x)=x)、高斯核。

软间隔

先看几幅图

如果样本是如上图,那么沿用上述理论划分是没问题的。

要是这样呢?

有一个样本跑到上面去了(脏数据),如果依然采用之前的理论,那么它会这么划分,这显然不是什么更好的结果。

更好的结果是,我们接受一个错误样本,使得其容错性更强。

怎么在数学上体现呢,SVM采用的是引入松弛变量ε,也就是把目标函数改成:

其中ε指的样本的损失程度,如果样本符合最大间隔条件,那么ε=0。

而C指的是人为引入的权值。比如说上图那个突出的黑点,我们人为的干预它,认为它十分重要/它一定是黑色的。那么C可以设为很大,以致如果把它分错了的话,后果相当严重(损失函数值很大,反映出来的也就是误差很大)

对于软间隔同理,我们可以采用相同的计算方式,得到它的对偶问题为:

和不加损失函数一样,只不过

这个约束条件变成

其KKT条件也变化为:

当然损失函数不是只有这一种啦,还有一些甚至可以扩展至回归的,有兴趣的同学可以研究一下。

SMO算法

在最大间隔中,提到了一个解对偶问题的算法也就是SMO,这里也介绍下。刚才我们的优化问题最终描述为:

其中y、x和C都是已知数,要解决的是以α为参数的最大值问题,其中α有m个。

通常,我们的优化思路是,这m个参数逐个地优化,比如说,先固定除α1外的其他参数,然后对它求偏导求极值。但是有个问题在于,我们存在一个约束条件:

这就意味着,如果只保留1个参数α1的话,它可以通过下式直接被算出来:

因此,这里SMO采用保留2个参数的方式。

SMO的优化过程是分很多轮的,每一轮都有这么一些步骤:

1、选出两个合适的参数α1、α2,固定其他参数

2、利用约束条件,算出α1和α2关系,代回目标函数中消掉其中一个α1,那么目标的参数就只剩α2了。

3、唯一参数问题,求偏导求极值

这样经过一轮后,目标函数已经在α1、α2两个参数上max了

这样经过n轮后迭代后,可以选出一组符合条件“最”优解(不一定需要到最优才停止)。

那么问题又来了,怎么选参数呢?SMO有这么一些规则

1、只选择不满足KKT条件的,直观来说就是带来误差(错误样本)的α,每次都从中选取带来误差最大的α作为第一个参数,也就是我们要优化的参数,假设为α1。

2、选取第二个参数的时候,我们要选取对待优化参数α1带来积极影响最大的那个参数.怎么算积极影响呢?SMO定义一个指标E:

先算出所有的参数的E值,已知我们优化的参数为α1的话,那么E1如果为正,则取其他参数中负的最大的那个,反之取正的最大的那个,也是使得|E1 - Ei|最大的那个αi.

这样所有环都通畅了,且每次迭代带来的收益都是最高,迭代次数可能会更少。

主要参考文献

机器学习   周志华

知乎 - SVM是什么意思(https://www.zhihu.com/question/21094489/answer/86273196

Wiki - SVM

等等

更多优质技术文章请关注官方微信公众号:

长按/扫描关注我们长按/扫描关注我们

更多优质技术文章请关注官方知乎机构号:

https://www.zhihu.com/org/teng-xun-zhi-neng-tai-ji-qi-xue-xi-ping-tai/activities

0 人点赞