在最开始讨论支持向量机的时候,我们就假定,数据是线性可分的,亦即我们可以找到一个可行的超平面将数据完全分开。后来为了处理非线性数据,使用 Kernel 方法对原来的线性 SVM 进行了推广,使得非线性的的情况也能处理。虽然通过映射 ϕ(⋅) 将原始数据映射到高维空间之后,能够线性分隔的概率大大增加,但是对于某些情况还是很难处理。例如可能并不是因为数据本身是非线性结构的,而只是因为数据有噪音。对于这种偏离正常位置很远的数据点,我们称之为 outlier ,在我们原来的 SVM 模型里,outlier 的存在有可能造成很大的影响,因为超平面本身就是只有少数几个 support vector 组成的,如果这些 support vector 里又存在 outlier 的话,其影响就很大了。例如下图:

用黑圈圈起来的那个蓝点是一个 outlier ,它偏离了自己原本所应该在的那个半空间,如果直接忽略掉它的话,原来的分隔超平面还是挺好的,但是由于这个 outlier 的出现,导致分隔超平面不得不被挤歪了,变成途中黑色虚线所示(这只是一个示意图,并没有严格计算精确坐标),同时 margin 也相应变小了。当然,更严重的情况是,如果这个 outlier 再往右上移动一些距离的话,我们将无法构造出能将数据分开的超平面来。
为了处理这种情况,SVM 允许数据点在一定程度上偏离一下超平面。例如上图中,黑色实线所对应的距离,就是该 outlier 偏离的距离,如果把它移动回来,就刚好落在原来的超平面上,而不会使得超平面发生变形了。具体来说,原来的约束条件
现在变成
其中 ξi≥0 称为松弛变量 (slack variable) ,对应数据点 xi 允许偏离的 functional margin 的量。当然,如果我们运行 ξi 任意大的话,那任意的超平面都是符合条件的了。所以,我们在原来的目标函数后面加上一项,使得这些 ξi 的总和也要最小:
其中 C 是一个参数,用于控制目标函数中两项(“寻找 margin 最大的超平面”和“保证数据点偏差量最小”)之间的权重。注意,其中 ξ 是需要优化的变量(之一),而 C 是一个事先确定好的常量。完整地写出来是这个样子:
用之前的方法将限制加入到目标函数中,得到如下问题:
分析方法和前面一样,转换为另一个问题之后,我们先让 L 针对 w 、 b 和 ξ 最小化:
将 w 带回 L 并化简,得到和原来一样的目标函数:
不过,由于我们得到 C−αi−ri=0 ,而又有 ri≥0 (作为 Lagrange multiplier 的条件),因此有 αi≤C ,所以整个 dual 问题现在写作:
和之前的结果对比一下,可以看到唯一的区别就是现在 dual variable
α
多了一个上限
C
。而 Kernel 化的非线性形式也是一样的,只要把
⟨xi,xj⟩
换成
κ(xi,xj)
即可。这样一来,一个完整的,可以处理线性和非线性并能容忍噪音和 outliers 的支持向量机才终于介绍完毕了。 ![]()
2463







击节赞叹!
目标函数中的参数C,就要用cross validation这样的方法来确定喽?
(ps:这篇要是能再有一副图就更美了。针对文中现在那张图中的例子,如果用添加了松弛变量的SVM来求解会是什么样子。然后就能有比对了。)
我是想画图的来着,但是图是用 Illustrator 画的,Illustrator 里面又没法像 LaTeX 那样输入字符 \xi ( ξ ) 来表示 slack variable 的距离,后来就索性不画了…… =.=bb
我想就算在线性可分(或者在映射后空间内线性可分)的情况下,原始SVM和这种SVM的解都会不同吧。当然是跟C有关。如果C = 无穷大,那么就跟原始SVM相同;如果C = 0,那么W = 0。
w = 0 是什么场景,真是有点儿难以想象呢。
C 是参数,可以用 cross validation 来求。如果线性可分,C 取多少都无所谓,因为所有 slack variable 都是 0 。如果线性不可分,而 C=∞ 的话,就无解,或者说任意解,因为不管 w 取什么值,目标函数的值都是等于 ∞ 。
不对吧,线性可分情况下C的多少会影响优化方程的最优解。为什么会所有的slack variable 一定等于0呢?
有情况会是这样: 增加slack variable的量,虽然会增加优化方程中第二项所带来的penalty,但是同时也会增加margin值,而可能导致最终的优化方程值更优。
所以最后可能会是slack varible不是0的解。
嗯,你说的有道理,确实是这样子的!
[…] 支持向量机: Outliers http://blog.pluskid.org/?p=692 […]
写的太好了!我见过最好的介绍了。
描述C的作用是那句应该是“寻找margin最大的超平面”吧
恩,确实是这样子,谢谢指出~~
[…] 支持向量机: Outliers http://blog.pluskid.org/?p=692 […]
[…] slack variable […]
[…] 支持向量机:Outliers —— 介绍支持向量机使用松弛变量处理 outliers 方法。 […]
请教博主一个问题:
您用什么工具画的图?
我也想知道博主用的是什么画图软件~~~
写的很清晰。
大致能看懂,不过要是让自己去实现这个东西估计就一筹莫展了,真是悲剧。难道这就是传说中的眼高手低 ·.·
写的太好了,能把这么枯燥的东西介绍的这么生动,佩服的五体投地啊
C越大的话。应该会拟合的越好吧。但是也可能会产生过拟合现象~
将min f(x)转化为max L(…)的过程似乎应该被称作 wolfe dual 哦~~~ 另外鄙人不才 想补充一下 最后的拉格朗日方程中 新引入的拉格朗日系数r 也是为了保证距离参数为正~~ 最后想请教前辈一下 LIBSVM中的 gamma 到底是什么东西 各个kernel的方程不尽相同 很难想象这些核函数能有一个统一的系数 而且还必须要用户事先指定。。。
谢谢。gamma 这样的 hyper parameter 在机器学习中还比较常见,如果没有办法确定的情况下一般是通过 cross validation 枚举选结果最好的一个参数。