很多人(包括我)第一次听说 SVM 时都觉得它是个非常厉害的东西,但其实 SVM 本身“只是”一个线性模型。
只有在应用了核方法后,SVM 才会“升级”成为一个非线性模型
不过由于普遍说起 SVM 时我们都默认它带核方法,所以我们还是随大流、称 SVM 的原始版本为 LinearSVM。
不过即使“只是”线性模型,这个“只是”也是要打双引号的——它依旧强大,且在许许多多的问题上甚至要比带核方法的 SVM 要好(比如文本分类)
在进入正题之前,我们先回顾一下感知机,因为 LinearSVM 往简单来说其实就只是改了感知机的损失函数而已,而且改完之后还很像
感知机模型只有和这两个参数,它们决定了一张超平面
。感知机最终目的是使得,其中是训练数据集、只能取正负一训练方法则是梯度下降,其中梯度公式为:
我们在实际实现时,采用了“极大梯度下降法”(亦即每次只选出使得损失函数最大的样本点来进行梯度下降)(注:这不是被广泛承认的称谓,只是本文的一个代称):
然后有理论证明,只要数据集线性可分,这样下去就一定能收敛
由感知机损失函数的形式可知,感知机只要求样本被正确分类,而不要求样本被“很好地正确分类”。
这就导致感知机弄出来的超平面(通常又称“决策面”)经常会“看上去很不舒服”:
之所以看上去很不舒服,是因为决策面离两坨样本都太近了。从直观上来说,我们希望得到的是这样的决策面:
那么应该如何将这种理想的决策面的状态翻译成机器能够学习的东西呢?直观来说,就是让决策面离正负样本点的间隔都尽可能大;而这个“间隔”翻译成数学语言,其实就是简单的:
在有了样本点到决策面的间隔后,数据集到决策面的间隔也就好定义了:
所以我们现在的目的就转化为:
让所有样本点都被正确分类:
让决策面离正负样本点的间隔都尽可能大:
注意到的值在同时扩大 k 倍时不会改变,所以我们完全可以假设:
但是这会导致另一个问题:当数据集线性不可分时,上述优化问题是必定无解的,这就会导致模型震荡(换句话说,这个约束太“硬”了)。
所以为了让模型在线性不可分的数据上仍有不错的表现,从直观来说,我们应该“放松”对我们模型的限制(让我们模型的约束“软”一点):
注意我们感知机的损失函数为,于是综上所述可以看出,LinearSVM 在形式上和感知机的差别只在于损失函数、且这两个损失函数确实长得很像
转自:机器学习算法与自然语言处理