机器学习之支持向量机


背景

支持向量机(Support Vector Machine,SVM)属于有监督学习模型,主要用于解决数据分类问题。通常SVM用于二元分类问题,对于多元分类可将其分解为多个二元分类问题,再进行分类,主要应用场景有图像分类、文本分类、面部识别和垃圾邮件检测等领域。

这个名字听上去挺牛逼的(好像及机器学习里好多听上去感觉很似高大上的词汇~),其实耐心看完它的一些资料后其实也还行,不是那么难理解、其实,分类中,在一维上,它的表现就是一个点,一个用来分割不同类别的点;在二维上,就是一条直线,到了三维空间,则是一个平面了。


含义

支持向量机在高维或无限维空间中构造超平面或超平面集合,将原有限维空间映射到维数高得多的空间中(为什么需要映射因?因为数据在原来的维度上不再可分),在该空间中进行分离可能会更容易。它可以同时最小化经验误差和最大化集合边缘区,因此它也被称为最大间隔分类器。直观来说,分类边界距离最近的训练数据点越远越好,因为这样可以缩小分类器的泛化误差。

以一个二元分类问题为例讲解模型原理。首先假设有两类数据,如图,需要找出一条边界来将两类数据分隔开来。
机器学习之支持向量机
但下图中列出一些可行的分隔方式。在当前的数据集的条件下,三种分隔方式都是可行的,我们该如何做选择?
机器学习之支持向量机
一般说来,需要选择的是具有较强分类能力的直线,有较稳定的分类结果和较强的抗噪能力,比如在数据集扩展之后,如下图所示,在这三种分隔方式中,b的分隔效果更好。

线性可分:在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,可以如此想象下去,如果不关注空间的维数,这种线性函数还有一个统一的名称——超平面(Hyper Plane)

找到最优分类数据的分界线,使得对样本数据的分类效果更好的方法就是要尽可能地远离两类数据点,即数据集的边缘点到分界线的距离d最大,这里虚线穿过的边缘点称作支持向量,分类间隔为2d。如下图所示。
如何证明划分的向量是最优的
机器学习之支持向量机


核函数

假设训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类。然而在现实任务中,原始样本空间内,也许并不存在一个能正确划分两类样本的超平面。譬如,我们的数据称球状分布,这时就不能简单的在原来的维度上进行划分了。

解决办法,对于原空间中的非线性可分问题,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。

假设X是输入空间,H是特征空间,存在一个映射ϕ使得X中的点x能够计算得到H空间中的点h :h=ϕ(x),对于所有的X中的点都成立。

而x,z是X空间中的点。函数k(x,z)满足条件:k(x,z)=ϕ(x)⋅ϕ(z),都成立,则称k为核函数,而ϕ为映射函数。

例如:特征空间在三维空间中,原空间在二维,我们定义映射函数为,x=(x1,x2):

机器学习之支持向量机
即二维空间向三维空间映射:

机器学习之支持向量机

到这里,可能还很难理解,我截了一张这位博主的图进行说明

机器学习之支持向量机
从图中,我们可以看到,在将低维转高维的过程时非常繁琐的,但引入核函数后,我们可以简化这个计算过程,也就是说核函数本质上还是一个包含低维到高维的映射的函数。

线性核函数(Linear Kernel)

这个是是最简单的核函数,主要用于线性可分的情况,表达式如下:

K(x,y) = (x^T)·y+c

其中c是可选的常数。线性核函数是原始输入空间的内积,即特征空间和输入空间的维度是一样的,参数较少运算速度较快。适用的情景是在特征数 量相对于样本数量非常多时。

多项式核函数(Polynomial Kernel)

该函数是一种非稳态核函数,适合于正交归一化后的数据,表达式如下:

K(x,y) = [a·(x ^ T)·y+c]^d

其中a是调节参数,d是最高次项次数,c是可选的常数。

径向基核函数(Radial Basis Function Kernel)

这个函数具有很强的灵活性,应用广泛。与多项式核函数相比参数较少。因此大多数情况下都有较好的性能。径向基核函数类似于高斯函数,所以也被称为高斯核函数。在不确定用哪种核函数时,可优先验证高斯核函数。表达式如下:

K(x,y) = exp{-[(||x-y||^2)/(2·(a^2))]}

其中a^2越大,高斯核函数就会变得越平滑,此时函数随输入x变化较缓慢 ,模型的偏差和方差大,泛化能力差,容易过拟合。 a^2越小,高斯核函数变化越剧烈,模型的偏差和方差越小,模型对噪声样本比较敏感。

Sigmoid核

Sigmoid核(Sigmoid Kernel)来源于MLP中的**函数,SVM使用Sigmoid相当于一个两层的感知机网络,表达式如下:

K(x,y) = tanh(a·(x^T)·y+c)

其中a表示调节参数,c为可选常数,一般情况c取1/n,n是数据维度。