四、使用松弛变量处理 outliers 方法
之前我们假定,数据是线性可分的,亦即可以找到一个可行的超平面将数据完全分开。后来为了处理非线性数据,使用 Kernel 函数的方法对原来的线性 SVM 进行了推广,使得非线性的情况也能处理。虽然通过映射
Φ(.)
将原始数据映射到高维空间之后,能够线性分隔的概率大大增加,但是对于某些情况还是很难处理。
例如可能并不是因为数据本身是非线性结构的,而只是因为数据有噪声。对于这种偏离正常位置很远的数据点,我们称之为 outlier,在我们原来的 SVM 模型里,outlier 的存在有可能造成很大的影响,因为超平面本身就是只有少数几个支持向量组成的,如果这些支持向量里又存在 outlier 的话,其影响就很大了。例如下图:
用黑圈圈起来的那个蓝点是一个 outlier,它偏离了自己原来所应该在的那个半空间,如果直接忽略掉它的话,原来的分隔超平面还是挺好的,但是由于这个 outlier 的出现,导致分隔超平面不得不被挤歪了,变成图中黑色虚线所示(这只是一个示意图,并没有严格计算精确坐标),同时间隔也相应变小了。当然,更严重的情况是,如果这个 outlier 再往右上移动一些距离的话,我们将无法构造出能将数据分开的超平面来。
为了处理这种情况,SVM 允许数据点在一定程度上偏离一下超平面。例如上图中,黑色实线所对应的距离,就是该 outlier 偏离的距离,如果把它移动回来,就刚好落在原来的超平面上,而不会使得超平面发生变形了。
首先我们看到原来的约束条件为:
yi(wTxi+b)≥1
意思是说离分类面最近的样本点函数间隔也要比 1 大。如果要引入容错性,就给
yi(wTxi+b)≥1−ξi
其中 ξi≥0 称为松弛变量(slack variable),因为松弛变量是非负的,因此最终的结果是要求间隔可以比 1 小。但是当某些点出现这种间隔比
min12||w||2+C∑ni=1ξi
其中 C 是一个参数,用于控制目标函数中两项(“寻找间隔最大的超平面”和“保证数据点偏差量最小”)之间的权重。注意,其中
这个式子有这么几点要注意:
1、并非所有的样本点都有一个松弛变量与其对应。实际上只有“离群点”才有,或者也可以这么看,所有没离群的点松弛变量都等于 0 ;
2、松弛变量的值实际上标示出了对应的点到底离群有多远,值越大,点就越远;
3、惩罚因子
4、惩罚因子
5、尽管加了松弛变量,但这仍然是一个优化问题,解它的过程比起原始的硬间隔问题来说,没有任何更加特殊的地方。
利用类似于之前分析的
⎧⎩⎨⎪⎪⎪⎪⎪⎪maxα∑ni=1αi−12∑ni,j=1αiαjyiyjxTixjs.t.0≤αi≤C,i=1,2,...,n∑ni=1αiyi=0
具体方法可以参考附录2。
附录2 加入松弛变量的优化问题的转化
首先我们给出加入松弛变量的优化问题:
⎧⎩⎨⎪⎪⎪⎪⎪⎪min12||w||2+C∑ni=1ξis.t.yi(wTxi+b)≥1−ξiξi≥0
用之前的方法将约束条件加入到目标函数中,得到拉格朗日函数,如下所示:
L(w,b,ξ,α,γ)=12||w||2+C∑ni=1ξi−∑ni=1αi(yi(wTxi+b)−1+ξi)+∑ni=1γiξi
分析方法和前面一样,先让 L 针对
⎧⎩⎨⎪⎪⎪⎪∂L∂w=0∂L∂b=0∂L∂ξ=0
得到:
⎧⎩⎨⎪⎪w=∑ni=1αiyixi∑ni=1αiyi=0C−αi−γi=0
将 w 带回
maxα∑ni=1αi−12∑ni,j=1αiαjyiyjxTixj
不过,由于我们得到 C−αi−γi=0 而又有 γi≥0 (作为拉格朗日乘子的条件),因此有 C≥αi≥0 ,所以整个对偶问题现在写作:
⎧⎩⎨⎪⎪⎪⎪⎪⎪maxα∑ni=1αi−12∑ni,j=1αiαjyiyjxTixjs.t.0≤αi≤C,i=1,2,...,n∑ni=1αiyi=0