前言
支持向量机(support vector machine)本来是最早接触的机器学习算法,最初自己写的的机器视觉论文也用到了SVM,但和神经网络一样,一直觉得它是比较复杂的机器学习方法,需要深入的学习和研究。因此先是系统推导了李航的《机器学习》,之后学习Andrew Ng的机器学习课程,并看了july、pluskid等人的技术博客。也不能说自己完全懂了,只能算是学习笔记,总结一些自己能掌握的东西。
我在接触SVM之初,深度学习已经比较火了,之所以还是运用SVM,一方面是因为SVM本身是现成比较成熟的分类算法,另一方面是之前很多论文都说了SVM的可靠性,在各方面表现都不错,而且有很多现成的资源(代表性有台湾林智仁团队的libsvm、liblinear)。为了快速应用机器学习,就选择了SVM。最终发现里面真的是博大精深,包含有太多不同的模型,涉及了大量的数学知识,而且至今仍是很多科研人员的研究方向。
感知机(回顾)
在之前总结感知机(perceptron)时介绍了感知机是神经网络(Neural Networks)和支持向量机(support vector machine, SVM)的基础。首先,我们来看感知机由输入空间到输出空间的映射函数,这与支持向量机是一样的:
f(x)=sign(wT⋅x+b)
其中sign函数的定义为:
sign(x)={
+1,−1,x≥0x<0
当 wT⋅x+b≥0 时, f(x)=1 ;而当 wT⋅x+b<0 时, f(x)=−1 。
现在我们假设有如下图所示的两组数据,红色表示正样本+1,绿色表示负样本-1,点所在位置为样本特征值 x 。对于二分类问题就是找到如图所示的一条直线(高维对应超平面)能够准确将两类样本进行分类。
对于上面定义的感知机,正样本(红点)在直线上面,则 wT⋅x+b≥0 ,对应感知机输出结果 f(x)=1 ,即分类为正样本。同理,当样本点在直线下面时, wT⋅x+b<0 ,对应感知机输出结果 f(x)=−1 ,即负样本。由此我们可以看出,在二维平面的直线 wT⋅x+b=0 就能够将图中的正负样本正确分类。
当样本被错误分类时,样本真实类别 yi 与 wT⋅x+b 总是异号,则对错分样本 yi(wT⋅x+b)<0 。因此对于感知机来说,定义的损失函数为:
L(w,b)=−∑(xi,