对于线性不可分的情况,线性可分的支持向量机学习方法是不适用的,因为数据中有些样本点距离太近,不能满足函数间隔大于等于的约束条件。因此我们对每个样点都引入一个松弛变量,使函数间隔加上松弛变量大于等于1.
随之变化的是我们的约束条件:
对于每个松弛变量,都要支付一个代价,因为这个点本来离超平面很近,为了把这个点拉到对应边界,我们需要付出努力。我们当然希望我们付出的努力少并且同时实现间隔最大化,我们需要找的就是这两个条件之间拉扯出的最好的点。
下面我们结合图更好的理解下松弛变量。下图中红色正例在负例的分隔边界里面,我们如果想让这个点满足约束条件需要很大的,付出代价会很大,对这样的点我们要有很高的容忍能力;而图中绿色的点(奇异点在两个分隔边界内部且离各自的分隔边界很近)满足约束条件就不用付出很大的代价,只需要一个很小的松弛变量。
由于需要付出代价,所以此时我们的目标函数就变成了:
C>0称为惩罚参数,上面我已经提到此时我们最小化目标函数需要满足间隔尽量大和付出的代价尽量少(即误分类的点少),而C正是调节二者的系数。C增大时,为了让目标函数尽可能小,就要求松弛变量要小(又叫对误分类的惩罚增大)。
引入了松弛变量(实际上就相当于把线性不可分转化成了线性可分)就可用线性可分的思路来考虑训练数据集线性不可分的支持向量机学习问题,这个过程就是软间隔最大化。
下面计算的过程就大致相同了:
对偶算法:
原始最优化问题的拉格朗日函数是: