学习July博文总结——支持向量机(SVM)的深入理解(上)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ajianyingxiaoqinghan/article/details/72897399

前言

本文是参照CSDN的July大神的热门博文《支持向量机通俗导论(理解SVM的三层境界》)写的。目的是因为July大神文中说,SVM理论的理解,需要一遍一遍的推导公式,直到脑中梳理下来,并可以直接推导相关公式的。本文的写作目的,是在笔者在第一次参考了July大神的博客,并手动推导公式成功后,希望通过Markdown的记录流程,进行第二遍对SVM理论的理解。另外,在笔者第一次研究SVM过程中会存在某些不懂的问题,笔者也会秉着July大神的理念——让没有机器学习理论基础的读者们看懂博文,尽量的将SVM的理论解释清楚。
再次说明,本文的最主要目的是笔者对博主July关于SVM理论介绍的二次学习,如果可以的话,也希望能给笔者的读者一些启发。

本文说明:

  1. 本文中涉及大量的向量,有的加了向量符号,有的没有加向量符号,但由于数量过多,且参考资料比较多,所以难以统一,笔者只能尽量的说明清楚。例如,文中的数据点x都是向量,核函数中的K(xi,x)K(xi,x)表达的是同一个意思。

参考网址:

《支持向量机通俗导论(理解SVM的三层境界》)
《支持向量机(五)SMO算法 》

一、了解SVM

支持向量机(Support Vector Machine, SVM),通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。

1. 分类标准的起源:Logistic回归

(1) 线性分类器

理解SVM,咱们必须先弄清楚一个概念:线性分类器。
给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类),一个线性分类器的学习目标便是要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以表示为:

ωTx+b=0(1.1.1)

  • ωT中的T表示转置;
  • x:数据点
  • y:类别(取1或-1)

对于y取1或-1,可能有读者表示有疑问。其实1或-1的分类标准起源于logistic回归。

(2) Logistic回归

Logistic回归目的是从特征学习出一个0/1分类模型。这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。

有假设函数:

hθ(x)=g(θTx)=11+eθTx(1.1.2)

  • x:n维数据点;
  • g:Logistic函数;
  • θTx:数据点xx的特征;

(关于\thetaθ\omegaω的关系,后面式1.1.5中会给出解释)
g(z) = \frac {1}{1+e^{-z}} g(z)=11+ez的图像如下图1.1所示:



图1.1 Logistic函数曲线

从图中可以看出,Logister函数将范围为负无穷到正无穷的自变量z,映射到了区间(0, 1)。
前面提到的假设函数(式1.1.2),就是类型属于y = 1的概率。
\left\{\begin{matrix} \begin{align*} & P(y=1|x;\theta)=h_\theta(x) \\ & P(y=0|x;\theta)=1-h_\theta(x) \end{align*} \end{matrix} \right. \qquad (1.1.3)

{P(y=1|x;θ)=hθ(x)P(y=0|x;θ)=1hθ(x)(1.1.3)

这样,当我们要判别一个新来的特征属于哪个类时,只需求h_\theta(x)hθ(x)即可,若h_\theta(x)hθ(x)大于0.5,数据点就是y=1的类;反之,属于y=0类。

注:hθ(x)只与θTx有关

  • θTx>0时,则hθ(x)>0.5,即g(z)只是用来映射;
  • θTx0时,则hθ(x)=1θTx0时,则hθ(x)=0

如果我们只从特征θTx出发,那么我们所构建的模型的目标,就是让训练数据中,y=1y=1的特征θT0,且y=0的特征θT0。Logistic回归,就是要学习得到θ,使得正例的特征远大于0,负例的特征远小于0,而且要在全部训练实例上达到这个目标。

(3) Logistic回归变形

为了后面的使用方便,我们这里对Logistic回归进行变形。
首先,将使用的结果标签y=0y=1替换为y=1y=1。展开特征θTx,如下式:

θTx=θ0+θ1x1+θ2x2+...+θnxn(x0=1)(1.1.4)

然后将上式(1.1.4)中的θ0替换为b,最后将后面的θ1x1+θ2x2+...+θnxn替换为ωTx。如此,则得到了:
θTx=ωTx+b(1.1.5)

也就是说,除了分类值y,由y=0变为y=1之外,线性分类函数与Logistic回归的形式hθ(x)=g(θTx)=11+eθTx没有区别。
进一步,我们可以将假设函数hω,b(x)=g(ωTx+b)中的g(z)函数做一个简化,将其简单映射到y=1y=1上。映射关系如下:
g(z)={1,z01,z<0(1.1.6)

2. 线性分类的一个例子

(1) 线性分类举例

下面举个简单的例子。如下图1.2所示,现在有一个二维平面,平面上有两种不同的数据,分别用圈和叉表示。由于这些数据是线性可分的,所以可以用一条直线将这两类数据分开,这条直线就相当于一个超平面,超平面一边的数据点所对应的y全是-1 ,另一边所对应的y全是1。



图1.2 二维平面线性分类

这个超平面可以用分类函数f(x)=ωTx+b表示,当f(x)等于0的时候,x便是位于超平面上的点,而f(x)大于0的点对应y=1的数据点,f(x)小于0的点对应y=1的点,如下图1.3所示:



图1.3 二维平面超平面分类

换言之,在进行分类的时候,遇到一个新的数据点x,将x代入f(x)中。如果f(x)小于0,则将x的类别赋为-1;如果f(x)大于0,则将x的类别赋为1。

注:
有的资料定义特征到结果的输出函数为u=ωxb(后文也有用到),与这里定义的f(x)=ωTx+b本质上是一样的。
为什么呢?因为无论是u=ωxb,还是f(x)=ωTx+b,都不影响最终的优化结果。
下文你将看到,当我们转化到优化目标函数max1ω,s.t.,yi(ωTxi+b,i=1,...,n)的时候,为了求解方便,我们会把yf(x)令为1。即yf(x)无论是y(ωT+b),还是y(ωTb),对我们要优化的目标函数max1ω已经没有影响。

(2) y的取值意义

在July大神的博客中,有人问:SVM函数间隔中, γ^=y(wTx+b)=yf(x)中的y是只取1和-1 吗?y的唯一作用就是确保函数间隔的非负性?
此处总结July博客下面评论中的解释如下:

这个问题将问题搞混了。y是个分类标签,二分时,y就取了两个值,而刚好取了-1和1。只是因为用超平面分类时,不同的类中的点的函数值刚好有不同的符号,所以这里就用符号来进行了分类。
具体阐述如下:
1. 对于二类问题,因为y只取两个值,这两个是可以任意取的,只要是取两个值就行;
2. 支持向量机去求解二类问题,目标是求一个特征空间的超平面;而超平面分开的两类对应于超平面的函数值的符号是刚好相反的;
3. 基于上述两种考虑,为了使问题足够简单,我们取y的值为1和-1;
4. 在取定分类标签y为-1和1之后,一个平面正确分类样本数据,就相当于用这个平面计算yf(x)>0
5. 并且这样一来,yf(x)也有了明确的几何含义;

总而言之要明白,二类问题的标签y是可以取任意两个值的,不管取怎样的值对于相同的样本点,只要分类相同,所有的y的不同取值都是等价的。之所以取某些特殊的值,只是因为这样一来计算会变得方便,理解变得容易。正如July大神的朋友张磊所言,svm中y取1或-1的历史原因是因为感知器最初的定义,实际取值可以任意,总能明确表示输入样本是否被误分,但是用+1、-1可以起码可以是问题描述简单化、式子表示简洁化、几何意义明确化。
举个例子:如果取y为1与2(比如原来取-1的现在取1,原来取1的现在取2 ),那么分类正确的判定标准就变成了(y1.5)f(x)>0。所以取1和-1只是为了计算简单方便,没有实质变化,更非一定必须取一正一负。

接下来的问题是,如何确定这个超平面呢?从直观上而言,这个超平面应该是最适合分开两类数据的直线。而判定“最适合”的标准就是这条直线离直线两边的数据的间隔最大。所以,得寻找有着最大间隔的超平面。

3. 函数间隔与几何间隔

(1) 函数间隔(Functional Margin)

在超平面ωTx+b=0确定的情况下,|ωTx+b|能够表示点x到超平面的距离远近,而通过观察ωTx+b的符号与类型标记y符号是否一致,可以判断分类是否正确
所以,我们可以用y(ωT+b)的正负性来判定或表示分类的正确性。所以我们便在此处引出了函数间隔(Functional Margin)的概念。
定义函数间隔如下所示:

γ^=y(ωTx+b)=yf(x)(1.3.1)

式(1.3.1)中参数含义如下:

  • x:特征;
  • y:结果标签;
  • i:表示第i个样本;

而超平面(ω,b)关于训练数据集T中所有样本点(xi,yi)的函数间隔最小值,便成为超平面(ω,b)关于T的函数间隔:

γ^=minγi^(i=1,...n)(1.3.2)

(2) 几何间隔(Geometrical Margin)

上面给出了函数间隔的定义,但这样定义的函数间隔有问题。比如成比例的改变ω,b(如将他们都增大2倍),则函数间隔f(x)的值变成了原来的2倍,但此时超平面却没有改变。所以只有函数间隔远远不够。
事实上,我们可以对法向量ω加些约束条件,从而引出真正定义点到超平面的距离–几何间隔(geometrical margin)的概念。
假定对于一个点x,令其垂直投影到超平面上的对应点为x0ω是垂直于超平面的一个向量,为样本x到超平面的距离,如下图1.4所示:



图1.4 点x在超平面的投影x0

根据平面几何知识,有:

x=x0+γωω(1.3.3)

上式(1.3.3)中参数说明如下:

  • ωω的二阶范数,是一个类似于模的表示长度的概念;
    • 例如有向量ω={a,b,c},则ω=a2+b2+c2
  • ωω是单位向量,即一个向量除以它的模;

又由于x0是超平面上的点,满足f(x0)=0,所以代入超平面的方程ωTx+b=0,可得到ωTx0+b=0,即ωTx0=b
然后,令式(1.3.3)即x=x0+γωω两端同时乘ωT,再根据ωTx0=bωTω=ω2,可以得到:

γ=ωT+bω=f(x)ω(1.3.4)

为了得到γ的绝对值,令γ乘上对应的类别y,即可得出几何间隔(用γ˜表示)的定义:
γ˜=yγ=γ^ω(1.3.5)

式(1.3.5)中,γ^是前文中的函数间隔。所以可以看出,几何间隔就是函数间隔除以ω,而且函数间隔y(ωTx+b)=yf(x)实际上就是|f(x)|,只是人为定义的一个间隔度量。几何间隔yf(x)ω才是直观上的点到超平面的距离。

4. 最大间隔分类器(Maximum Margin Classifier)

(1) “间隔”的说明

对一个数据点进行分类,当超平面离数据点的”间隔”越大,分类的确信度(confidence)也越大。所以,为了使得分类的确信度尽量高,需要让所选择的超平面能够最大化该“间隔”值。这个间隔就是下图1.5中的Gap的一半。



图1.5 超平面的间隔

通过由前面的分析可知:函数间隔不适合用来最大化间隔值,因为在超平面固定以后,可以等比例地缩放ω的长度和b的值,这样可以使得f(x)=ωT+b的值任意大,即函数间隔γ^可以在超平面保持不变的情况下被取得任意大。
但由于几何间隔γ˜ω做了除运算,所以在缩放ωb的时候,几何间隔γ˜不会改变,它只随着超平面的变化而变动。因此,这是更加合适的一个间隔,即这里要找的最大间隔分类超平面中的“间隔”指的是几何间隔

(2) 最大间隔分类器的定义

最大间隔分类器(maximum margin classifier)的目标函数可以定义为:

maxγ˜(1.4.1)

同时需要满足一些条件,根据式(1.3.2)中间隔的定义,存在:
s.t.,yi(ωTxi+b)=γi^γ^,i=1,...,n(1.4.2)

上式(1.4.2)中,s.t.即Subject to的缩写,约束条件的意思。
回顾式(1.3.5)中几何间隔的定义γ˜=yγ=γ^ω,可知如果令函数间隔γ^=1,则有γ˜=1ω,且约束条件如上式(1.4.2)。综上,上述目标函数便转化成了:
max1ωs.t.,yi(ωTxi+b)=γi^γ^,i=1,...,n(1.4.3)

上式(1.4.3),相当于在相应的约束条件yi(ωTxi+b)1,i=1,...,n下,将值1ω最大化,即最大化几何间隔γ˜

注:为什么令γ^=1
在几何间隔部分说到,若成比例改变ω,b,超平面不会改变,但函数间隔γ^会成比例改变,所以可以通过等比例改变ω,b值的方法使函数间隔γ^=1
具体方法:令γ^=y(ωTx+b)中的ω,b同乘γ^=1,得到ω=ωγ^,b=bγ^,再将ω,b代入式(1.4.1)中,即得到最大间隔分类器的目标函数。
此处如下图1.6所示:



图1.6 超平面上的支持向量

中间的实线便是寻找到的最优超平面(Optimal Hyper Plane),其到两条虚线边界的距离相等,这个距离就是几何间隔γ˜。两条虚线间隔边界之间的距离等于2γ˜,而虚线边界上的点,就是支持向量。由于这些支持向量刚好在虚线间隔边界上,且我们之前把函数间隔γ^设置为1,所以它们满足y(ωTx+b)=1。而对于其他所有不是支持向量的点,则显然有y(ωTx+b)>1

至此算是将SVM的第一层讲解完毕,对于那些只关心怎么用SVM的朋友便已足够,不必再更进一层深究其更深的原理。

二、深入SVM

1. 从线性可分到线性不可分

接着考虑上一章中得到的式(1.4.3)中的目标函数:

max1ωs.t.,yi(ωT+b)=γi^γ^,i=1,...,n

由于求max1ω的最大值,相当于求12ω2的最小值,所以上述目标函数等价于下式:
min12ω2s.t.,yi(ωT+b)=γi^γ^,i=1,...,n(2.1.1)

(1) 从原始问题到对偶问题的求解

由于现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。
这个问题可以用现成的QP (Quadratic Programming) 优化包进行求解。一言以蔽之:在一定的约束条件下,目标最优,损失最小。
此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(Dual Problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法
这样做的优点在于:

  • 对偶问题往往更容易求解;
  • 可以自然的引入核函数,进而推广到非线性分类问题。

什么是拉格朗日对偶型呢?简单的讲,通过给每一个约束条件加上一个拉格朗日乘子α(Lagrange Multiplier),定义拉格朗日函数如下式(2.1.2):

L(ω,b,α)=12ω2i=1nαi[yi(ωTxi+b)1](2.1.2)

注:
1. 这里定义为拉格朗日函数的好处,在于通过拉格朗日函数将约束条件融合到目标函数里,从而只用一个函数表达式便能清楚表达出我们的问题。(具体内容可以见大学课堂的概率论教材);
2. 拉格朗日乘子α={αi},i=1,...,n,且αi>0,i=1,...,n

然后令:

θ(ω)=maxαi0L(ω,b,α)(2.1.3)

容易验证,当某个约束条件不满足时,例如yi(ωTxi+b)<1,那么显然有θ(ω)=+(只要让αi=+即可)。
而当所有约束条件都满足时,此时式(2.1.3)多项式的后一项ni=1αi[yi(ωTxi+b)1]>0,此时式(2.1.3)的最优值为θ(ω)=12ω2,该值也为最初要最小化的量。
因此,在约束条件得到满足的情况下(包括拉格朗日乘子的约束条件:α={αi},i=1,...,n,且αi>0,i=1,...,n),最小化12ω2,实际上等价于直接最小化(2.1.3)式θ(ω)。因为如果约束条件没有得到满足,θ(ω)会等于无穷大,自然不会是我们所要求的最小值。
具体写出来,目标函数变成了:
minω,bθ(ω)=minω,bmaxαi0L(ω,b,α)=p(2.1.4)

这里用p表示这个问题的最优解,而且与最初的问题等价。如果直接求解,那么一上来便得面对ωbb两个参数,而\alpha_iαi又是不等式约束,这个求解过程不好做。所以这里我们把最小和最大的位置交换,变成:
\max _{\alpha_i \geq 0} \min _{\omega, b} \mathcal{L}(\omega, b, \alpha) = d^* \qquad (2.1.5)
maxαi0minω,bL(ω,b,α)=d(2.1.5)

交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用d表示,而且这里有dp,在满足某些条件(后文中的Slater条件)的情况下,d=p。这时候就可以通过求解对偶问题,间接地求解原始问题。换句话说,之所以从式(2.1.4)中的原始问题p,转换到式(2.1.5)中的对偶问题d,一是因为dp的近似解,而是因为转化为对偶问题后更容易求解。

下面,我们可以先求Lω,b的极小值,然后求Lα的极大值。

(2) KKT条件

上一小节中提到,在满足某些条件的情况下,d=p。这里某些条件是指Slater条件。
所谓Slater条件,就是指凸优化问题:如果存在一个点x,使得所有等式约束都成立,而且所有不等式约束都严格成立(即取>,<,不取,),则满足Slater条件。
对于此处,Slater条件成立,所以dp可以取等号。

一般情况下,一个最优化数学模型能表示成下列标准形式:

minf(x)s.t. hj(x)=0,j=1,...,pgk(x)0,k=1,...,qxXRn(2.1.6)

式(2.1.6)中参数如下:

  • f(x):需要最小化的函数;
  • h(x):等式约束;
  • g(x):不等式约束;
  • p,q:等式约束和不等式约束的数量;

同时,我们需要了解以下两点:

  1. 凸优化的概念:
    • χRn为一凸集,f:χRn为一个凸函数;
    • 凸优化就是找出一点xχ,使得每一个xχ满足f(x)f(x),即xf(x)的极小值点;
  2. KKT条件的意义:
    • KKT条件是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件;

而KKT条件就是指上面式(2.1.6)中最优化数学模型的标准形式中的最小点x必须满足下面的条件,这些条件如下式(2.1.7)所示:

hj(x)=0,j=1,..,p,gk(x)0,k=1,...,qf(x)+j=1pλjhj(x)+k=1qμkgk(x)=0λj0,μk0,μkgk(x)=0(2.1.7)

经过论证,我们这里的问题是满足KKT条件的。原因如下:

  1. 满足Slater条件;
  2. f=min12ω2可微,g=yi(ωTxi+b)10可微,即在拉格朗日函数L(ω,b,α)中,Lω,b都可导;

因为我们现在转化为求解第二个问题。也就是说,原始问题(即式(1.4.3))max1ω,通过满足KKT条件,已经转化成了对偶问题(即式(2.1.5))maxαi0minω,bL(ω,b,α)=d

(3) 对偶问题求解的3个步骤

求解这个对偶学习问题,分为三个步骤:
1. 令L(ω,b,α)关于ωb最小化;
2. 利用SMO算法求解对偶问题中的拉格朗日乘子,求对α的极大;
3. 求参数ω,b

注:July大神的原文中的步骤与笔者的不同,是因为笔者没有理解按照July大神的步骤。按照原文中的(2)(3)步骤的话,是已经在步骤(2)中求出了α的极大(即已经求出了α),然后又在步骤(3)中用SMO算法求了一遍α,这是笔者不能理解的。所以笔者在此按照自己的理解,把这三个步骤改了一下。如果真有读者看到了这里而且有指点意见的话,笔者感激不尽。

下面按步骤进行说明:

A. 首先固定α,令L关于ω,b最小化

对于式(2.1.2),我们分别对ω,b求偏导数,即令Lω,Lb等于0。

Lω=0ω=i=1nαiyixiLb=0i=1nαiyi=0(2.1.8)

注:关于二范数的求导如下式(2.1.9)所示:

xxα2=xαxα2x22x=xTx2x=2x(2.1.9)

将上式(2.1.8)代入之前的式(2.1.2),即L=12ω2ni=1αi[yi(ωTxi+b)1]中,得到:

L=12i,j=1nαiαjyiyjxTixji,j=1nαiαjyiyjxTixjbi=1nαiyi+i=1nαi=i=1nαi12i,j=1nαiαjyiyjxTixj(2.1.10)

关于上式(2.1.10)的推导比较复杂,如下式所示:
L(ω,b,α)=12ω2i=1nαi[yi(ωTxi+b)1]=12ωTωi=1nαiyiωTxibi=1nαiyi+i=1nαi(2.1.11)

将式(2.1.8)中的ω=ni=1αiyixi代入上式(2.1.11)中得:
L(ω,b,α)=12ωTi=1nαixiyiωTi=1nαiyixibi=1nαiyi+i=1nαi=12ωTi=1nαiyixibi=1nαiyi+i=1nαi=12[i=1nαiyixi]Ti=1nαiyixibi=1nαiyi+i=1nαi=12i=1nαiyi(xi)Ti=1nαiyixibi=1nαiyi+i=1nαi=12i,j=1nαiαjyiyjxTixj+i=1nαi(2.1.12)

经过式(2.1.11)与(2.1.12)的推导,即可得到式(2.1.10)。

在式(2.1.10)中我们可以看出,由于xi,yi都是已知量,所以此时的拉格朗日函数只包含了一个变量,那就是αi(i=1,...,n)。只要求出了αi,就能在后面的步骤中求出ω,b,从而求出分类函数f(x)=ωT+b

B. 利用SMO算法求解对偶问题中的拉格朗日乘子

求对α的极大值,就是关于对偶问题的最优化问题。经过上一个步骤的求取ω,b,得到的拉格朗日函数已经没有了变量ω,b,只存在变量α
通过上面的式(2.1.5), (2.1.6), (2.1.10),可以得到此时的目标函数:

maxαi=1nαi12i=1nαiαjyiyjxTixjs.t.,αi0,i=1,...,ni=1nαiyi=0(2.1.13)

这时候通过SMO算法可以求解对偶问题中的拉格朗日乘子α
注:关于SMO算法,可以跳到后文,即下一篇博客的第三章第5节。但SMO算法中需要使用到后文讲到的核函数、松弛因子的概念,所以笔者建议还是按照顺序进行学习。

这样求出了极值情况下的αi,就可以求出极值情况下的ω,b

C. 求参数ω,b

上面一步求出了拉格朗日乘子α。通过式(2.1.8),可以计算出:

ω=i=1nαiyixi

这里的ω是指极值情况下的ω值,再然后可以求b值。由于对于边界上的支持向量有:
y(ωTx+b)=1(2.1.14)

式(2.1.14)的参数x数据点是支持向量,参数y表示支持向量所属类别(取值1或-1)。
而在y=1,y=1的类别中,支持向量处于边界点。由超平面的图(即图1.6)可得:
maxyi=1ωTxi+b=1minyi=1ωTxi+b=1(2.1.15)

上式(2.1.15)中的两式相加,得到极值情况下的b值,记为b
b=12[maxyi=1ωTxi+minyi=1ωTxi](2.1.16)

这样就求出了ω,b,α,便求出了我们在线性情况下的超平面f(x)

(4) 线性不可分的情况

到目前为止,我们的 SVM 还比较弱,只能处理线性的情况,下面我们将引入核函数,进而推广到非线性分类问题。
让我们再来看看上述推导过程中得到的一些有趣的形式。首先就是关于我们的超平面,对于一个数据点x分类,实际上是通过把x带入到f(x)=ωTx+b算出结果,然后根据其正负号进行类别划分的。在前面的推导中,我们得到式(2.1.8)):

ω=i=1nαiyixi

因此我们的分类函数为:
f(x)=(i=1nαiyixi)Tx+b=i=1nαiyixi,x+b(2.1.17)

上式(2.1.17)中,符号,表示向量内积。
这里的形式的有趣之处在于,对于新点x的预测,只需要计算它与训练数据点的内积即可。这一点是之后使用核函数Kernel进行非线性推广的基本前提,至关重要。
此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有非支持向量所对应的系数α都是等于零的,因此对于新点的内积计算,不需要针对所有的训练数据,实际上只要针对少量的支持向量就可以了。

为什么非支持向量对应的α等于零呢?直观上来理解的话,就是这些“后方”的点(即在超平面另一侧的点)——正如我们之前分析过的一样,对超平面是没有影响的,由于分类完全有超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。
在本节第一小节中,通过拉格朗日乘子得到的目标函数(式(2.1.3))如下:

θ(ω)=maxαi0L(ω,b,α)=maxαi012ω2i=1nαi[yi(ωTxi+b)1]

注意:如果x_ixi是支持向量的话,上式右边的[y_i(\omega ^ T x_i + b) - 1][yi(ωTxi+b)1]部分是等于0的,因为支持向量的函数间隔等于1;而对于非支持向量来说,函数间隔大于0,所以[y_i(\omega ^ T x_i + b) - 1][yi(ωTxi+b)1]部分是大于0的。而\alpha_i \geq 0αi0(见式(2.1.2)的注),所以为了满足最大化,\alpha_iαi必须等于0。这也是非支持向量点的局限性。
从第一章第4节到上述所有内容,便得到了一个最大间隔超平面分类器(Maximum Margin Hyper Plane Classifier),这就是所谓的支持向量机(Support Vector Machine)。但是到目前为止,我们的 SVM 还比较弱,只能处理线性的情况。不过,在得到了对偶dual 形式之后,通过核函数Kernel推广到非线性的情况就变成了一件非常容易的事情了。

2. 核函数Kernel

(1) 特征空间的隐式映射

事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。
在上文中,我们已经了解到了SVM处理线性可分的情况,那对于非线性的数据SVM应该怎么处理?对于非线性的情况,SVM 的处理方法是选择一个核函数\mathcal{K}(⋅,⋅)K(,) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图2.1所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:



图2.1 二维空间数据映射到三维空间里并划分

而在我们遇到核函数之前,如果用原始的方法,那么在用线性学习器学习一个非线性关系,需要选择一个非线性特征集,并且将数据写成新的表达形式,这等价于应用一个固定的非线性映射,将数据映射到特征空间,在特征空间中使用线性学习器,因此,考虑的假设集是如下式(2.2.1)这种类型的函数:
f(x) = \sum_{i=1}^n \omega_i \phi_i (x) + b \qquad (2.2.1)
f(x)=i=1nωiϕi(x)+b(2.2.1)

这里的\phi : X \rightarrow Fϕ:XF从输入空间到某个特征空间的映射
这意味着,建立非线性学习器分为两步:

  1. 使用一个非线性映射将原始数据xx变换到一个特征空间F;
  2. 在特征空间使用线性学习器分类。

而由前面的内容可以了解到,对偶形式是线性学习器的一个重要性质,这意味着假设可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:
f(x) = \sum_{i=1}^n \alpha_i y_i \langle \phi (x_i) , \phi (x)\rangle + b \qquad (2.2.2)

f(x)=i=1nαiyiϕ(xi),ϕ(x)+b(2.2.2)

上式(2.2.2)中, \langle \phi (x_i) , \phi (x)\rangleϕ(xi),ϕ(x)的意义就是在特征空间中直接计算内积。这种像在原始输入点的函数中一样,有可能将上面两个步骤融合到一起建立一个非线性的学习器,这样直接计算的方法,被称为核函数方法
这里的核,是一个函数\mathcal{K}K,对于所有的数据点x,zX,满足:
K(x,z)=ϕ(x),ϕ(z)(2.2.3)

(2) 核函数:如何处理非线性数据

A. 原始数据的映射

来看个核函数的例子。如下图2.2所示的两类数据,分别分布为两个圆圈的形状,这样的数据本身就是线性不可分的,此时我们该如何把这两类数据分开?
注:后面会有July大神的好友pluskid提供的gif动图说明。



图2.2 圆圈状的数据

事实上,上图所述的这个数据集,是用两个半径不同的圆圈加上了少量的噪音生成得到的。所以,一个理想的分界应该是一个“圆圈”,而不是一条线(超平面)。如果用x1,x2来表示这个二维平面的两个坐标的话,我们知道一条二次曲线(圆圈是二次曲线的一种特殊情况)的方程可以写作这样的形式:
a1x1+a2x21+a3x2+a4x22+a5x1x2+a6=0(2.2.4)

在上面形式的基础上,如果我们构造另外一个五维的空间,其中五个坐标的值分别为Z1=x1,Z2=x21,Z3=x2,Z4=x22,Z5=x1x2,那么显然式(2.2.4)中的方程在新的坐标系下可以写成:
i=15aiZi+a6=0(2.2.5)

关于新的坐标Z,这正是一个超平面的方程!解释一下,就是说如果我们做一个映射ϕ:R2R5,将x按照上面的规则映射为Z,那么在新的五维空间中,原来的数据将会变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了。这正是Kernel方法处理非线性问题的基本思想。

在进一步描述Kernel的细节之前,不妨再来看看这个例子映射过后的直观例子。虽然我们可能无法把 5 维空间画出来,不过由于July大神这里生成数据的时候就是用了特殊的情形,具体来说,我们这里的超平面实际的方程是这个样子(圆心在 X2 轴上的一个正圆),因此我们只需要把它映射到Z1=x1,Z2=x21,Z3=x2这样一个三维空间里就可以了。
下图2.3是July大神的好友pluskid提供的gif动图:



图2.3 映射到三维空间的数据动图

上图映射之后的结果,将坐标轴经过适当的旋转,就可以很明显地看出,数据是可以通过一个平面来分开的。

上面的例子可以体现,核函数相当于将原来的分类函数:

f(x)=i=1nαiyixi,x+b

映射成了式(2.2.2)中的:
f(x)=i=1nαiyiϕ(xi),ϕ(x)+b

而其中的α值是可以通过求解由(2.1.13)映射变形来的对偶问题得到:
maxαi=1nαi12i=1nαiαjyiyjϕ(xi),ϕ(xj)s.t.,αi0,i=1,...,ni=1nαiyi=0(2.2.6)

B. 维度爆炸问题的解决

看起来问题似乎解决了:拿到了非线性数据,就找一个映射ϕ(),然后一股脑把原来的数据映射到新空间中,再做线性 SVM 即可。

而实际上并没有这么简单,原因在于可能出现维度爆炸的情况。
刚才的方法稍想一下就会发现有问题:在最初的例子里,我们对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了五个维度;如果原始空间是三维,那么我们展开后会得到19维的新空间。这样的话,维度数目是呈爆炸增长的,这给ϕ()的计算带来了非常大的困难,而且如果遇到了无穷维的计算,就根本无从计算了。
这时候仍然需要Kernel方法解决这个问题。

仍然从最开始的简单例子出发:设两个向量x1=(η1,η2)T,x2=(ξ1,ξ2)T,而ϕ()是前面说到的五维空间映射。映射后的内积为:

ϕ(x1),ϕ(x2)=η1ξ1+η21ξ21+η2ξ2+η22ξ22+η1η2ξ1ξ2(2.2.7)

对于上式(2.2.7)的推导,其实就是把x1,x2的映射ϕ(x1),ϕ(x2)展开,然后作相应的内积运算即可得到。讲解如下:
由上面可知,若有向量x=(x1,x2)T,则映射的结果应该是:
ϕ(x)=x1+x