vlambda博客
学习文章列表

一文学会支持向量机(SVM)

SVM是一个二元分类算法,线性分类和非线性分类都支持,其学习策略便是间隔最大化, 最终可以转化为一个凸二次规划问题求解。经过演进,现在也可以支持多元分类,同时经过扩展也能应用于回归问题。

初探SVM

一个简单的例子

下面举个简单的例子。如下图所示,现在有一个二维平面,平面上有两种不同的数据,分别用圈和叉表示。由于这些数据是线性可分的,所以可以用一条直线将这两类数据分开,这条直线就相当于一个超平面,超平面一边的数据点所对应的y全是-1 ,另一边所对应的y全是1。这个超平面可以用分类函数 表示,当 ,x便是位于超平面上的点,而 对应 , 对应 的点。如图:一文学会支持向量机(SVM)换言之,在进行分类的时候,遇到一个新的数据点x,将x代入 中,如果 则将x的类别赋为-1,如果 则将x的类别赋为1。接下来的问题是如何确定这个超平面呢?一文学会支持向量机(SVM)比如对于上图,a和b都可以作为分类的超平面,但最优的超平面只有一个,最优分类平面使间隔最大化。从直观上来讲,距离样本太近的超平面不是最优的,因为这样的直线对噪声敏感度高,泛化性误差差。因此我们的目标是找到一个超平面,离所有点的距离最远。由此SVM算法的实质是找出一个能够将某个值最大化的超平面,这个值就是超平面距离所有训练样本的最小距离。这个最小间隔SVM术语叫做间隔(margin)。

函数间隔与几何间隔

在超平面 确定的情况下, 能够表示点x到超平面距离的远近,而通过观察 的富豪与类标记y的符号是否一致可以判断分类是否正确,所以可以用 的正负来判断分类的正确性。与此我们便引出了函数间隔的概念。定义函数间隔为: .而超平面(w,b)关于训练集中所有样本点 的函数间隔的最小值变为超平面关于训练数据集的函数间隔 但是这样定义函数间隔有问题,即如果成比例的改变 的值(如同时扩大2倍)则函数间隔的值 却变为2倍(虽然此时超平面没有改变),所以只有函数间隔远远不够。事实上,我们可以通过对法向量w加些约束条件,从而引出真正定义点到超平面的距离—几何距离。假定对于一个点 x,令其垂直投影到超平面上的对应点为 是垂直于超平面的一个向量, 为样本x到超平面的距离,如下图所示:一文学会支持向量机(SVM)根据平面几何知识有:一文学会支持向量机(SVM)其中 的二阶范数(范数是一个类似于模的表示长度的概念), 是单位向量(一个向量除以它的模称之为单位向量)。又由于 是超平面上的点,满足 ,代入超平面的方程 可得 ,即 随即对上式两边同时左乘 即可求出 一文学会支持向量机(SVM)为了得到 的绝对值,令其乘上对应类别的绝对值y,我们即可得出几何间隔:一文学会支持向量机(SVM)从上述函数间隔和几何间隔的定义可以看出:几何间隔就是函数间隔除以 ,而且函数间隔y*(wx+b) = y*f(x)实际上就是|f(x)|,只是人为定义的一个间隔度量,而几何间隔 才是直观上的点到超平面的距离。

最大间隔分类器

我们在上面的关于线性分类器的例子当中提出了间隔(margin)的概念。为了使得分类的确信度尽可能高,我们需要让所选择的超平面去最大化这个margin,这个间隔就是下图中的一半。一文学会支持向量机(SVM)通过前面的分析可以直观的看出,函数间隔不适合用来最大化间隔,因为在超平面固定后可以等比例的将 进行缩放,这样可以使得 的值任意大,也就是函数间隔值 可以在超平面保持不变的前提下任意大。但是几何间隔我们除上了 使得在对 进行缩放时几何间隔 是不变的,它只随着超平面而变动,因此这更适合做我们的margin。也就是说这里的最大化间隔其实是最大化我们的几何间隔。用数学式子表示为:

一般我们都取函数间隔 (这里函数间隔的值对我们的优化问题无影响,且令函数间隔为1有利于后面的优化和推导),这样我们的优化函数为:

也就是说我们要在约束条件下,最大化 。由于 的最大化等同于 的最小化。这样SVM的优化函数等价于:

因为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。这个问题可以用现成QP优化包进行求解。一言以蔽之:在一定的约束条件下,目标最优,损失最小。此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。

拉格朗日对偶

前面说过,我们就是要最小化:

这是一个拉格朗日优化问题,可以通过拉格朗日乘数法得到最优超平面的权重向量 和偏置 .

其中 我们看下面这个式子:一文学会支持向量机(SVM)上面是要求解的目标函数及其条件,我们可以得到拉格朗日公式为:一文学会支持向量机(SVM)在这里 被称为拉格朗日算子。然后分别对 进行求偏导,使得偏导数为0解出 :一文学会支持向量机(SVM)下面我们将要产生一个既有等式又有不等式条件限制的式子,我们可以叫做原始优化问题,这里简单介绍下拉格朗日对偶的原理。如下式子:一文学会支持向量机(SVM)上述式子有两个条件(等式条件和不等式条件) 由此我们定义一般化的拉格朗日公式一文学会支持向量机(SVM)这里 都是拉格朗日算子。(不要忘了我们要求解的是最小值)。设如下等式:一文学会支持向量机(SVM)这里的P代表primal。我们设如下约束条件(primal constraints):一文学会支持向量机(SVM)如果条件不全部满足的话,我们总可以调整 使最大值出现正无穷,即会出现如下情况:一文学会支持向量机(SVM)因此我们可以得出如下式子:一文学会支持向量机(SVM)这样我们原来要求的min 可以转换成求:{%asset_img 18.png %}同时我们设一文学会支持向量机(SVM) 将问题转化为先求拉格朗日关于 的最小值,这个时候就把 看成常量,之后再求最大值。如下:一文学会支持向量机(SVM)这个问题就是原问题的对偶问题 。相对于原问题我们只是更换了min和max的顺序,而一般更换顺序的结果是.但是在满足某些情况下二者相等,很幸运在这里我们满足这个条件,所以二者相等。而我们上面所说的条件就是KTT条件。一文学会支持向量机(SVM)

SVM优化

由拉格朗日对偶,我们的优化目标从

变为了:

从上式中我们可以先求 的最小值,接着再求拉格朗日乘子 的最大值。首先我们来求 基于 的最小值,即 .这个极值我们可以通过对 分别求偏导数得到:

从上两式子可以看出,我们已经求得了 的关系,只要我们后面接着能够求出优化函数极大化对应的 ,就可以求出我们的 了,至于 ,由于上两式已经没有 ,所以最后的 可以有多个。我们已经求出了 的关系就可以带入 消去 。我们定义:

现在我们来看将 替换为 后的优化函数 的表达式:

一文学会支持向量机(SVM)从上面可以看出通过对 的极小化以后,我们的优化函数仅仅只有 向量做参数。只要我们能够极大化 就可以求出此时对应的 进而求出 . 对 极大化的数学表达式如下:

可以添加符号变为等价的极小化问题,如下:

只要我们可以求出上式的极小化时对应的向量 向量就可以求出 了。具体怎么极小化上式的 一般要用到SMO算法,这个后面会讲。先假设我们通过SMO算法得到了对应极小值的 .那么根据我们的: 就可以求出对应的

稍微复杂一些,注意到对于任意支持向量 都有:

假设我们有 个支持向量,则对应我们求出S个 ,理论上它们都可以作为最终的结果。但是我们一般采用一种更健壮的办法,即求出所有支持向量所对应的 ,然后将其平均值作为最后的结果。注意到对于严格线性可分的SVM,b的值是有唯一解的,也就是这里求出的所有 都是一样的,这里我们仍然这么写是为了和后面加入软间隔后的SVM的算法描述一致。根据KTT条件中的对偶互补条件 ,如果 则有 即点在支持向量上,否则如果 则有 ,即样本在支持向量上或者已经被正确分类。这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型只与支持向量有关。

线性可分SVM算法的过程

输入是线性可分的m个样本其中x为n维特征向量,y为二元输出,值为1,或者-1. 输出是分离超平面的参数 和分类决策函数。算法过程如下: 1.构造约束优化问题

2.用SMO算法求出上式最小时对应的 向量。3.计算 4.找出所有的S个支持向量,即满足 通过 计算出每个支持向量 对应的 ,计算出这些,所有的 对应的平均值即为最终的 这样最终的分类超平面': ,最终的分类决策函数为:

非线性可分SVM

容错性与软间隔

我们在上一节看到的是一个线性可分数据的简单例子,但现实中的数据通常是很凌乱的,你也很可能遇到一些不能正确线性分类的例子。如图:一文学会支持向量机(SVM)很显然使用一个线性分类器通常都无法完美的将标签分离,但是我们也不想将其完全抛弃不用,毕竟除了几个错点他基本上能很好的解决问题。那么我们如何解决呢?SVM引入了软间隔最大化的方法来解决。所谓的软间隔是相对于硬间隔来说的,我们可以认为上面的SVM分类方法属于硬间隔最大化。回顾下硬间隔最大化的条件:

接着我们再看如何可以软间隔最大化呢?SVM对训练集里面的每个样本 引入了一个松弛变量 ,使函数间隔加上松弛变量大于等于1,也就是说:

对比硬间隔最大化,可以看到我们对样本到超平面的函数距离要求放松了,之前一定要大于等于1,现在只需要加上一个大于等于0的松弛变量 满足大于等于1就可以了。当然松弛变量不能白加,也是需要有成本的,每一个松弛变量 对应一个代价 ,这就得到了我们的软间隔最大化SVM的学习条件:

这里 为乘法参数,可以理解为我们一般回归和分类问题正则化时候的参数。参数C其实表示了我们要在两种结果中权衡:1)拥有很宽的间隔。2)精确分离训练数据。C的值越大,意味着在训练数据中允许的误差越小。这是一个权衡的过程,如果想要更好的分类训练数据,那么代价就是间隔会更宽。一下几个图展示了在不同的C值分类器和间隔的变化:一文学会支持向量机(SVM)注意决策边界随 C 值增大而倾斜的方式。在更大的 C 值中,它尝试将右下角的红点尽可能的分离出来。但也许我们并不希望在测试数据中也这么做。第一张图中 ,看起来更好的抓住了普遍的趋势,虽然跟更大的 C 值相比,它牺牲了精确性。

线性分类SVM软间隔最大化及函数优化

和线性可分SVM的优化方式类似,我们首先将软间隔最大化的约束问题用拉格朗日函数转化为无约束问题如下:

其中 均为拉格朗日系数。也就是说,我们现在要优化的目标函数是:

这个优化也满足KTT条件,也就是说我们可以通过拉格朗日对偶将我们的优化问题转化为等价的对偶问题来解决:

我们可以先求优化函数对于 的最小值,接着再求拉格朗日乘子 的最大值。对于最小值我们可以通过求偏导得到:

好了,现在我们可以利用上面的三个石子取消除 了。

一文学会支持向量机(SVM)可以发现,这个式子和我们线性可分SVM的一样,唯一不一样的就是约束条件。

对于 可以消除 只留下 也就是 ,同时将优化目标函数变号,求极小值,如下:

这就是软间隔最大化时的线性可分SVM的优化目标形式,和上一篇的硬间隔最大化的线性可分SVM相比,我们仅仅是多了一个约束条件 我们依然可以通过SMO算法来求上式极小化时对应的 向量就可以求出 了。

软间隔最大化时的支持向量

在硬间隔最大化时支持向量比较简单,就满足 即可。根据KTT条件中的对偶互补条件 ,如果 则有 即点在支持向量上,否则 则有 即样本在支持向量上或已经被正确分类。 在软间隔最大化时稍微复杂一些,因为我们为每个样本 引入了松弛变量 .我们从下图来研究软间隔最大化时支持向量的情况,第i个点到对应类别支持向量的距离为 一文学会支持向量机(SVM)根据软间隔最大化时KKT条件中的对偶互补条件

我们有: 1)如果 那么 ,即样本点在间隔边界或者已经被正确分类。2)如果 ,根据KTT条件 以及 我们得到 ,则 ,即在间隔边界上是支持向量。3)如果 ,说明这是一个可能比较异常的点,需要检查此时 i)如果 那么点被正确分类,但是却在超平面和自己类别的间隔边界之间。如图中的样本2和4. ii)如果 那么点在分离超平面上,无法被正确分类。iii)如果 那么点在超平面的另一侧,也就是说,这个点不能被正常分类。如图中的样本1和3.

软间隔最大化的线性可分SVM的算法过程

{%asset_img 27.png %}

核函数

我们已经介绍过支持向量机如何处理完美或者接近完美线性可分数据,那对于那些明确的非线性可分数据,SVM 又是怎么处理的呢?毕竟有很多现实世界的数据都是这一类型的。当然,寻找一个分离超平面已经行不通了,这反而突出了 SVMs 对这种任务有多擅长。对于非线性可分的情况,SVM处理方法是选择一个核函数m通过将数据映射到高维空间来解决在原始空间线性不可分的问题。关于核函数具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:回顾线性可分SVM的优化目标函数:

注意到上式低维特征仅仅以内积 的形式出现,如果我们定义一个低维空间到高维空间的映射,将所有特征映射到一个更高的维度,让数据线性可分,我们就可以继续按照上面的方法来优化目标函数了,并求出分离超平面和决策函数。也就是说现在我们的SVM优化目标函数变成:

可以看到,和线性可分SVM的优化目标函数的区别仅仅是将内积 替换为 看起来似乎这样我们就已经完美解决了线性不可分SVM的问题了,但是事实是不是这样呢?我们看看,假如是一个2维特征的数据,我们可以将其映射到5维来做特征的内积,如果原始空间是三维,可以映射到到19维空间,似乎还可以处理。但是如果我们的低维特征是100个维度,1000个维度呢?那么我们要将其映射到超级高的维度来计算特征的内积。这时候映射成的高维维度是爆炸性增长的,这个计算量实在是太大了,而且如果遇到无穷维的情况,就根本无从计算了。而我们上面的博客有说到,核函数解决的就是将数据从低维映射到高维的简化内积计算的一种方法。假设 是一个从低维的输入空间 欧式空间的子集或者离散集合)到高维的希尔伯特空间的 映射。那么如果存在函数 ,对于任意 都有:

那么我们就称 为核函数。仔细观察上式可以发现, 的计算是在低维特征空间来计算的,它避免了在刚才我们提到了在高维维度空间计算内积的恐怖计算量。也就是说,我们可以好好享受在高维特征空间线性可分的红利,却避免了高维特征空间恐怖的内积计算量。我们总结一下非线性可分时核函数的引入过程:我们遇到线性不可分的样例时,常用的做法是把样例特征映射到高维空间中取,但是遇到线性不可分的样例一律映射到高维空间,那么这个维度大小是会很高的。此时,核函数就体现出它的价值了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上,这样避免了直接在高维空间中的复杂计算,真正解决了SVM线性不可分的问题。

分类SVM算法总结

引入核函数后,我们的SVM算法才算是比较完整了。现在我们做一个总结,不再区分是否线性可分(因为引入核函数以及软间隔,我们的SVM有很大的容错性了)。输入是m个样本其中x为n维特征向量。y为二元输出,值为1,或者-1。输出是分离超平面的参数 和分类决策函数。算法过程如下::1)选择适当的核函数 和一个惩罚系数 , 构造约束优化问题:

2)用SMO算法求出上式最小时对应的 3) 得到 此处可以不直接显式的计算 4)找出所有的S个支持向量,即满足 对应的样本 通过计算出每个支持向量 对应的 .计算出这些,所有的 对应的平均值即为最终的 。这样最终的分类超平面为:,最终的分类决策函数为至此,我们的分类SVM算是总结完毕.

SMO算法原理

在前面我们的优化目标函数最终都是一个关于 向量的函数。而怎么极小化这个函数求出对应的向量进而分离出我们的超平面呢?首先我们回顾下我们的优化目标函数:

我们的解要满足的KKT条件的对偶互补条件为

根据这个KKT条件的对偶互补条件,我们有:

由于 ,我们令,则有:

SMO算法的基本思想

上面这个优化式子比较复杂,里面有m个变量组成的向量 需要在目标函数极小化的时候求出。直接优化是很难的。SMO算法采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于 。加入将 固定,那么 之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两个变量优化问题。为了后面表示方便,我们定义 。由于 都成了常量,虽有的常量我们都从目标函数去除,这样我们上一节的目标优化函数变成:

关于SMO算法原理

鸣谢

本文学习总结自以下,都是很好的资料!

JULY

数据挖掘十大算法详解

刘建平

刘晓坤