本文主要是对自己理解的pluskid大神的SVM系列内容做一个简单的介绍。注意:以下的内容在讲解核函数之前均是对做数据进行线性分类。
一、什么是最优的线性分类器
首先,对于什么是最优的分类器,我们是如何度量的呢?这些单是凭人类的感觉来度量肯定是不准确的,而SVM是基于严格的统计学习理论的,所以对于最优的分类器也是有严格的度量标准的。而这里的度量标准主要分为两个,函数距离和几何距离。
假设我们得到了一个二维的线性分类器,其分类的效果如图所示:
那么,究竟什么才是函数距离和几何距离呢?这里首先给出它们两个的定义。设训练集中的一个训练实例为xi,分类超平面的方程为wTx=0.由简单的数学知识可知,当训练集数据xi分别处于平面的两侧的时候,带入yi=wTxi后的求得的yi的符号肯定不同,且 xi距离平面的距离越远,对应的函数值越大。故而我们定义函数距离为:fi=|wTxi|=yi∗wTxi。而且,函数距离越大,代表数据离超平面的距离越远,分类效果越好。
但是,函数距离作为这样的一个度量值是具有一定缺陷的,这就是,当wT扩大n倍的时候,显然平面并没有改变,但是函数距离fi却扩大了n倍。也就是说,即使在超平面不变的情况下,函数距离也并不唯一。为了解决这个问题,于是进一步提出来了几何距离。
几何距离,其实指的就是点到超平面的最短(垂直)距离,示意图如上(上图中的
x记为
xi)。已知
w是分类超平面的法向量,过实例数据
x作超平面的垂线,且垂足为
x0。则几何距离
γi=|wT∗(xi−x0)|w||,又易知
x0在法平面上,所以
wTx0=0,而由上可知
fi=|wTxi|。故几何距离可以进一步化简为
γi=fi|w|。很容易可以得出,几何距离
γ克服了函数距离的缺点,它是唯一的。
SVM理论认为满足
Maxγ {
Min Γ+,MinΓ−}这一关系的才是最好的分类器,其中,
Γ+和
Γ−分别为正例和负例的所有实例的几何距离的集合。换句话来说,也就是超平面离两个类别中离它最近的实例数据的距离相等。我们称这些离超平面最近的距离相等的数据点为支持向量,这也是SVM(支持向量机)名字的来源。同时,由于SVM算法中的超平面仅仅是由几个支持向量来确定,所以对错误点异常敏感。下图所示就是一个SVM的例子,中间深红的线就是我们的分类直线。
又进一步我们令支持向量的函数距离
fi=1,这就得到了SVM的优化目标函数的表达式:
Maxw γ=Maxw1|w|,fiwTxi≥1,i=1,2,......n,n是训练数据集的大小。.
就是由于SVM满足几何距离最大这一条件,所以SVM被称为最大间隔分类器。现在介绍一下最后那个限制条件的由来。由于对于所有训练数据集中的实例来说,支持向量距离超平面的距离最短,且将函数距离规定为1,所以应该对训练集中所有的数据有函数距离不小于1。
二、SVM的优化目标函数推导
以下是纯数学推导,只供像我一样的感兴趣的人参考研究。直接想应用这一算法的人可以直接跳过。
由上一部分的内容可知,SVM的初步优化函数为
L=Maxw γ=Maxw 1||w||,fiwTxi≥1,i=1,2,......n,n是训练数据集的大小。.
可以将上式化简为它的等价形式:
L=Minw 12||w||2,
fiwTxi≥1,i=1,2,......n,n是训练数据集的大小。
容易知道,这是一个凸二次规划问题。凸优化问题是指最优化问题:
{Minwf(w)s.t.gi(w)≤0,hi(w)=0其中,f(w)和gi(w)是Rn上的连续可微的凸函数,hi(w)是Rn上的仿射函数。
对上面问题构造拉格朗日函数有:
L′(w,α1,α2,......,αn)=12||w||2+∑ni=1αi(1−fiwTxi),αi≥0,fiwTxi≥1,i=1,2,......n
根据拉格朗日对偶性,求解问题的对偶问题是极大极小问题:
Maxα Minw L′(w,α1,α2,......,αn)
(这一步可以参考李航的统计学习方法一书)。
1)首先运用拉格朗日数值法并在满足KKT的条件下求解
Minw L′(w,α1,α2,......,αn)=
12||w||2+∑ni=1αi(1−fiwTxi),αi≥0,fiwTxi≥1,i=1,2,......n
(这一步可以参考
拉格朗日数值法这一篇文章)。
因为上述方程满足KKT条件,所以应该有:
⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪∂L′/∂w=w−∑ni=1αifixiαi(1−fiwTxi)αi1−fiwTxi=0=0≥0≤0
由上易知:
w=∑ni=1αifixi
将该式子带入原式可得:
L′=12∑ni,j=1αiαjfifjxixj−∑ni,j=1αiαjfifjxixj+∑ni=1αi=−12∑ni,j=1αiαjfifjxixj+∑ni=1αi
2)接着我们求解的函数应当变为了
Maxα L′(w,α1,α2,......,αn)=
−12∑ni,j=1αiαjfifjxixj+∑ni=1αi,αi≥0,i=1,2,......n,为了求解这个问题,我们需要进一步地将问题进行转化:
Minα L′(w,α1,α2,......,αn)=12∑ni,j=1αiαjfifjxixj−∑ni=1αi,αi≥0,i=1,2,......n
= 12∑ni,j=1αiαjfifj<xi,xj>−∑ni=1αi,其中αi≥0,i=1,2,......n,<xi,xj>代表xi和xj向量之间的内积。
容易知道,我们可以采取梯度下降或者是其他的算法来算得
α的值,再带入
w=∑ni=1αifixi中求得
w的值。
在使用SVM进行二分类的时候,我们其实是通过判断wTx的符号来对新的训练实例x进行分类的。又由上面计算得知:w=∑ni=1αifixi,因此也就是要判断f(x)=∑ni=1αifixix=∑ni=1αifi<xi,x>的符号,其中<xi,x>代表的是xi和x向量之间的内积。这个表达式告诉了我们可以通过计算新的数据x和训练数据集中的点之间的内积来对x进行分类,它也是日后我们使用kernel fuction的一个基础。
三、kernel fuction核函数
使用核函数进行分类的理论基础是:对于某些在原来数据空间线性不可分的数据集合,在经过一些特殊映射之后,在更高维的映射空间上可以进行简单的线性划分。一个简单的示例为:
很容易看以看出,这个数据集的分类边界应该是一个圆形
(x−x0)2+(y−y0)2+d=0,于是,我们采取如下的映射规则来对原来的数据空间进行映射:
(x,y)→(x,x2,xy,y2,y)
那么,映射之后的空间坐标
(z1,z2,z3,z4,z5)=(x,x2,xy,y2,y)之间应该满足关系:
∑5i=1zi+d=0。
这样,在新的映射空间就可以实现对数据的线性划分了,这也就进一步验证了我们的理论。实际的分类效果如下(五维的空间无法可视化,这里使用了特殊化的数据集,这些数据的分类超平面实际是圆心在y轴上的一个正圆):
但是,如果我们每一次都要设计好映射规则,之后再进行映射的话,不仅会非常麻烦,也会导致计算量大大增大,有个时候可能还不能表示出来,那么我们是否可以采取其他的方式在达到我们的目的的情况下却可以避开以上的缺点呢?核函数就可以帮助我们达到这个目的。
首先,给出核函数的定义:设
x,z∈Rn空间,非线性函数
Φ实现输入空间
X到特征空间
F的映射,其中
F属于
Rm空间,n远小于m。则称
K(x,z)=<Φ(x),Φ(z)>为这一映射关系下的核函数。通俗来说就是,核函数就是映射之后得到空间中的两个向量的内积。
那么,核函数是如何避开复杂计算的呢?由上部分内容可知我们最终的优化函数为
Minα L′(w,α1,α2,......,αn)=
12∑ni,j=1αiαjfifj<xi,xj>−∑ni=1αi,其中αi≥0,i=1,2,......n,最后用于分类的函数为
f(x)=∑ni=1αifi<xi,x>。我们发现这两个式子都是与内积有关,而且对于映射之后的空间而言,相似的应该有
Minα L′(w,α1,α2,......,αn)=
12∑ni,j=1αiαjfifj<Φ(xi),Φ(xj)>−∑ni=1αi和
f(x)=∑ni=1αifi<Φ(xi),Φ(xj)>,其中,
Φ(x)是将
x映射之后得到的新向量。那么如果
<Φ(x),Φ(z)>可以用
<x,z>来进行表示的话不就可以了吗?也就是,如果求出了核函数,那么就可以避开映射关系间接地使用核函数来进行计算了。
但是,不要高兴地太早!在通常的情况下,核函数和映射关系是存在一定的对应关系的,这就是确定了核函数之后,往往至少能找到一个映射关系与它对应;而确定了映射关系后,核函数也就确定下来了。那么我们是不是可以任意地选择一个函数来作为核函数呢?答案也是否定的。由于核函数的特殊性,这就要求了它必须是正定核函数,即满足以下关系:设
K:χ×χ→R是对称函数,对任意
xi∈χ,i=1,2,…,m,K(x,z)对应的Gram矩阵
K=[K(xi,xj)]m∗n是半正定矩阵。下面介绍几个常用的核函数:
高斯核函数(Gaussiankernelfuction):多项式核函数(Polynomialfuction):线性核函数(Linearfuction):KG=exp(−||x−x0||22δ2)KP=(<x,x0>+d)rKL=<x,x0>