前言
本文主要是讲了如何构建SVM的模型,并利用KKT条件构造其对偶型,从而求解问题,并讲述了SVM的硬间隔,软间隔和核函数三个境界。主要参考了周志华的《机器学习》,并在其中补充了自己的想法。由于内容较多,所以很多细节都省略掉了,只留下了整体的框架,该说的东西应该都说了。
SVM基本型
首先,我们先假设一个数据集线性可分的情况,也就是硬间隔的情况,如下图所示。
可以看到,数据集可以被无数条直线正确划分为两类,然而我们希望找到其中最好的一条线来划分这两个数据集,这条直线最好有较好的泛化能力,也就是说在面对未知的数据集的时候,也能够较为正确地划分数据,有较强的抗干扰性。那么怎么样的直线是最好的呢?我们来看下下面这幅图(此图出自林轩田的机器学习技法)。
从图中看出,我们假设每个数据点都带有一定的噪声,也就是说在数据点周围的灰色区域可能都是和这个数据点相同类型的数据点,只不过因为某些噪声干扰产生了一些偏移,就是有方差的意思。那么上图中的第三种情况是最能容忍这种噪声的,也就是我们最希望得到的划分方式。
换另一种方式来说,假设我们有一条直线或超平面 wTx+b=0正确划分了数据集,将直线分别往上方和下方平移,直到碰到数据点,我们假设网上和往下平移的截距是相同的,比如都是 a(如果不同的话就平移一下
为了之后方便处理,我们统一一下,将等式两边同时除以一个 a,即
于是,我们现在就有三条直线或超平面
如下图所示。
其中,在直线上的点就被称为支持向量。我们现在的目的就是找到使得 wTx+b=1和 wTx+b=−1之间距离最大的参数 w和
那个这个距离,或者说这个间隔怎么求呢?这就要用到我们的支持向量了,这个间隔是由它们决定的。
假设有支持向量 x1和 x2分别满足
两式相减则有
注意到 w,
注意到了吗?这里的 ||x1−x2||⋅cosθ就是间隔,不信可以自己画下图看。于是
我们假设现在是一个二分类问题,两类分别标记为 {+1,−1},于是现在问题就转化为了
将式子合起来并将求最大改成求最小则是
这就是SVM的基本型。
这是一个凸二次规划问题,可以直接解决,但效率不高,我们希望找到更高效的方法,所以就去找它的对偶问题。这也是求不等式约束求极值的通用手段。
既然都讲到这里了,干脆先把拉格朗日乘子法和KKT条件都给讲了。
拉格朗日乘子法
拉格朗日乘子法针对的是等式约束,基本形式如下:
拉格朗日乘子法做的就是将约束条件添加到目标函数当中,使其变成一个无约束优化问题。可以这么做的原因是,只要满足 hi(x)=0,那么不管加多少个都是不改变目标值的。
我们假设 x有
上式有 p个
值得注意的是,以上的只是必要条件,并不是充分条件,所以求得结果后最好再检验一下(虽然实际情况下都忽略了这一步)。
KKT条件
KKT条件是在拉格朗日乘子法的基础上多了不等式的约束,其针对的问题的基本型如下所示。
其对偶型为
此时最优解要满足的条件为
至于为什么是这样,参考一下 这个吧,这里偷下懒。
SVM对偶问题
我们再来回顾一下我们得到的SVM基本型。
很显然,这是一个只有不等式的约束的KKT条件问题。
于是,我们可以将问题转化为
这个时候最优解满足的条件为
值得注意的是,这里的 w,
我们将上述方程组的前2个带入到原问题中,消去参数 w和
这个时候,仍然需要满足
这个时候,我们就可以用一个叫做SMO的算法来求解 α,这里不详细介绍这种算法了,不然篇幅太长了。求得 α之后,可以通过 w−∑mi=1αiyixi=0这个式子来求得 w,而剩下的一个参数
软间隔
有时候,噪声太大,会因为某几个点而产生线性不可分的情况。这个时候,就要引入软间隔这个概念了。说白了,就是我们允许某些点是可以被错误分类的,但这种错分的情况要尽可能地少。
所以,我们引入了松弛变量和惩罚函数。
容易看出,当 C为无穷大的时候,就成了硬间隔的状态;当
同样是利用KKT条件,我们可以得到其对偶问题
同样地,这也是可以利用SMO算法求解的,这里不详细介绍。
核函数
以上问题是针对线性可分,或者是针对由于噪声而产生的个别点线性不可分,总体线性可分的情况。那么对于下图左这样本来就线性不可分的数据集该怎么处理呢?
没错,就像上图所示的这样,我们把低维的样本空间映射到一个更高为的空间,使得样本点在高维空间上线性可分。我们用 ϕ(x)表示映射后的特征向量,于是,在特征空间中超平面所对应的模型为
类似上述的问题,我们有
其对偶问题为
但是,这样的处理会导致维度灾难,也就是说本来几百维的一个东西会变成几千维,这样的计算量是无法接受的。于是,核函数就出现了,核函数是在低维空间上计算高维空间点积的一种方法,大大减少了数据量,也就是说,我们完全不用考虑 ϕ(x)是什么东西就能够计算 ϕ(xi)Tϕ(xj)我们将核函数记作
常用的核函数有如下几种,这里不详细介绍核函数。
于是,我们的问题就转化为了
利用上式我们可以求出 α,然而,这并没有什么卵用。由于我们不知道 ϕ(x)是什么,所以仍旧求不出 f(x)=wTϕ(x)+b。
真的是这样吗?别急。
在求对偶型的过程当中,我们会求 ∂L∂w对吧。由该式我们可以知道
我们将其代入 f(x)可得
这样不就求出来了吗!核函数是不是很神奇!
结束语
本文讨论了SVM是怎么来的,以及硬间隔,软间隔,核函数这三个SVM的核心问题。许多细节都省略了,只留下了整体框架。
如有不足,还请指正~
参考文献
[1] 周志华. 机器学习 : = Machine learning[M]. 清华大学出版社, 2016.
[2] http://www.onmyphd.com/?p=lagrange.multipliers
[3] http://www.onmyphd.com/?p=kkt.karush.kuhn.tucker