软间隔与正则化(支持向量机)-------机器学习
软间隔与正则化
软间隔
之前的博文中提过,支持向量机有一定的容错性,它允许有样本被分错,支持向量机以大局为重。特别是在存在噪音或者异常点的情况下,将这些所有的样本都完全的进行线性可分,这样很容易引起过拟合。所以支持向量机是允许在一些样本上出错的,为此,引入了“软间隔”的概念。
在之前的博文中介绍的支持向量机形式是要求将所有的样本全部分类正确,这称为“硬间隔”。“软间隔”是允许某些样本不满足约束。但是不满足约束的样本也不能太多,否则这个分类器的学习能力不足,很容易欠拟合。所以,在最大化间隔的时候,优化目标写成:
在我们写代码,调用sklearn库的时候,SVM函数中有一个参数为,就是上述等式中的
。我们一步一步慢慢看看这个等式的含义。首先
大于0,是一个常数,其中:
我们解释一下上面这个等式, 之前就说过是我们样本的真实标签,
,
是我们分类器的预测结果,这里也就是支持向量机的预测结果。
第一种情况:如果真实标签和预测结果一致,那么=1,这个应该不难理解,这样一来就是说我们的分类器分类是对的,那么
,按照
函数的定义,此时
,如果我们要求所有的样本都分类对,那么无论对于i等于几,就相当于无论哪个样本,这个时候的
,将m个这样的等式累计还是0,那么我们的优化目标和支持向量机的基本型一样还是
,这个仍然是“硬间隔”。
第二种情况:如果允许某些样本真实标签和预测结果不一致,那么=-1,
-1<0,按照
函数的定义,对于某些i(i为第几个样本)来说。此时
。那么我们这个时候的优化目标就会带着后面的尾巴
。所以这就是我们在调用sklearn库中的SVM函数中,其中那个C的参数需要我们自己写明。接下来在“软间隔”也就是允许有某些样本分类错误的前提下,C的大小如何影响最终的结果。
我们的目标是最小化,现在单看后面这一个加数,C为无穷大的时候,势必是希望
越小越好,从我们上面对两种情况的讨论来看,
最小是为0,当期为0的时候,我们对应了第一类讨论结果,这是“硬间隔”的情况,是不允许我们分类有误的,所以C越大,支持向量机的越不能容忍我们分错,C取有限制的时候,支持向量机是允许有些样本分错。到这里应该是把C解释清楚了,如果大家觉得博主理解不正确,可以留言,大家一起交流。
另外关于这个函数,很明显这个函数是一个分段函数,不连续,往往这种函数的数学性质不好,就如同我们逻辑回归中最开始引入的那个阶跃函数,不连续,不可导,所以最后换成了Sigmoid函数,这里也是出于这种考虑,人们用别的函数来替代
函数,称为“损失替代”,西瓜书上例举了三种:
感觉对数函数在机器学习中很受欢迎。 为了方便书写,引入了“松弛变量”,这个东西其实就是替代损失函数。那么在“软间隔”的前提下,优化目标为:
其中约束条件为:
优化目标加上约束条件,这就是“软间隔支持向量”的形式。 每个样本都有这么个对应的松弛变量,用以表示这个样本不满足约束条件的程度,换言之,就是说这个样本允许没分错的程度。剩下的关于这个目标函数的解法就是之前也介绍过的拉格朗日乘子法以及引入KKT条件。关于“软间隔”,博主的理解就是这些。
正则化
西瓜书上的介绍是将“软间隔支持向量机”的形式替换来得到其他的学习模型。
以上是更一般的优化目标形式,其中第一项仍然是划分超平面的间隔大小,而第二项是训练集上的误差,整个式子称为正则化问题,C为正则化常数。博主印象中的正则化一般是为了防止过拟合,在损失函数后面加入一项正则化,例如L1正则化,L2正则化,在之前的博文中提到的不同的线性回归,岭回归中的损失函数就是加了正则化项。
我们举个例子,解释一下加入正则化为什么可以防止过拟合。
如图,我们做一个回归问题,上面三个图中蓝色的我们的样本,红色的为我们的回归函数,很明显,第三个回归函数比第一个回归函数复杂得多,假设第一个回归函数为。第三个回归函数为
。函数越复杂,参数也就越多越复杂。一般而言我们回归任务中的损失函数为:
,这个时候如果我们加个L2正则化项
,那么我们的损失函数就变成了
,同时最小化两项,同理,如果
很大,那么
就会变小,
是参数向量摸的平方,如此一来,参数就是变稀疏,某些参数可能被最小化为0,那么我们的回归函数中的参数就会减少,也就不会那么复杂,可以有效的防止过拟合。关于L1和L2正则化,大家可以看看https://blog.****.net/jinping_shi/article/details/52433975,这里解释的也很清楚。