前 言
SVM,英文全称为 Support Vector Machine,中文名为支持向量机,由数学家Vapnik等人早在1963年提出。在深度学习兴起之前,SVM一度风光无限,是机器学习近几十年来最为经典的,也是最受欢迎的分类方法之一。
1
SVM与“三八线”
不少人在初识SVM时会感觉到高深难懂。现在,就从你我熟知的“三八线”来走进SVM的思想内涵。
回忆下小时候,同桌同学经常会用粉笔或是小刀在课桌中间划一条“三八线”将课桌一分为二。大家约定好每个人只能在自己的那半课桌领域活动,谁也不能越界,越界是小猪、小狗。
同桌“三八线”
这样的“三八线”就可以看作二维空间中SVM的形象解释,它传递出了以下几点重要的信息:
1.是一条直线(线性函数);
2.能将桌面分为两个部分,分别属于你和我(具有分类功能,是一种二值分类);
3.位于课桌正中间,不偏向任何一方(注重公平原则,才能保证双方利益最大化)。
以上三点也正是SVM分类器的中心思想所在。
这是因为:SVM本质模型是特征空间中最大化间隔的线性分类器,是一种二分类模型。
首先,线性分类器指的就是线性函数;其次,最大化间隔离不开公平原则;再者,其解决的是二值分类问题(分两类);而特征空间则表明了其学习分类的对象是样本的特征数据。接下来,我们将会一一了解到这些SVM的本质精髓。
2
为何叫支持向量机?
通过回忆“三八线”的故事,我们已经清楚了SVM的几个中心思想。下面我们再来了解支持向量机这一名称的渊源。
之所以叫支持向量机,因为其核心理念是:支持向量样本会对识别的问题起关键性作用。那什么是支持向量(Support vector)呢?支持向量也就是离分类超平面(Hyper plane)最近的样本点。
如下图所示,有两类样本数据(橙色和蓝色的小圆点),中间的红线是分类超平面,两条虚线上的点(橙色圆点3个和蓝色圆点2个)是距离超平面最近的点,这些点即为支持向量。简单地说,作为支持向量的样本点非常非常重要,以至于其他的样本点可以视而不见。而这个分类超平面正是SVM分类器,通过这个分类超平面实现对样本数据一分为二。
支持向量与分类超平面示例
3
什么是线性分类器?
SVM是一种线性分类器,分类的对象要求是线性可分。因此我们首先要了解什么是线性可分与线性不可分。
假如在课桌“三八线”的两旁分别放了一堆苹果和一堆荔枝,通过“三八线”这样一条直线就能把苹果和荔枝这两种类别的水果分开了(如左下图),这种情况就是线性可分的。但是如果苹果和荔枝的放置位置是苹果包围荔枝的局面(如右下图),就无法通过一条直线将它们分开(即这样的直线是不存在的),这种情况则是线性不可分的情形。当然,这里举例的对象是苹果、荔枝等具体实物。在机器学习上,学习分类的对象则转化为一系列的样本特征数据(比如苹果、荔枝的相关特征数据,形状、颜色等)。
线性可分 线性不可分
因此,只有当样本数据是线性可分的,才能找到一条线性分割线或分割面等,SVM分类才能成立。假如样本特征数据是线性不可分的,则这样的线性分割线或分割面是根本不存在的,SVM分类也就无法实现。
在二维的平面课桌上,一条直线就足以将桌面一分为二。但如果扩展到三维空间中,则需要一个平面(比如一面墙、一扇屏风等)才能将立体空间区域一分为二。而对于高维空间(我们无法用图画出),能将其一分为二的则称为超平面。
墙体分割三维空间
屏风分割三维空间
图片来源网络
因此,对于不同维度空间,SVM的形式特点也不同,具体表现如下:
课桌是一个水平面,属于二维空间,因此,中间的“三八线”就可以简单看做SVM的一种形象解释。如果沿“三八线”的竖直方向放置一块挡板,那这块挡板就可形象看作三维空间的SVM。而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。
我们已经清楚SVM是一种线性分类器,无论是二维空间的直线,还是三维空间的平面,以及多维空间的超平面,它们的数学表现形式都有着相同的特性,那就是都属于线性函数。线性函数的特点是计算简单,易于求解。
对于我们熟悉的二维空间(平面坐标),直线的函数表达式为:
y=ax+b
如下图所示,我们只要通过平面上两个坐标点A、B的数值代入上述方程,即可求出系数a,b。从而得到直线方程的表达式。
直线方程示意图
在高维空间中,超平面的函数表达式为:
上述方程式中,求出W、b,就得到了超平面的函数方程式。机器学习训练过程就是要求出最合适的W、b,亦即找到了最合适的分类超平面。
4
致力间隔最大化
如何找到最合适的分类超平面?依据的原则就是间隔最大化。
所谓间隔最大化,说的是分类超平面跟两类数据的间隔要尽可能大(即远离两边数据),这就要提到我们前面说到的公平原则。“三八线”要划在课桌正中间,不偏向任何一方,才能保证双方利益最大化。对于分类超平面来说,也就是要位于两类数据的正中间,不偏向任何一类,才能保证离两边数据都尽可能远,从而实现间隔最大化。
如左下图所示,有两类样本数据(分别用橙色和蓝色的小圆圈表示),我们可通过红色或蓝色两条直线(L1或L2)将这两类样本数据分开。事实上,我们还可以画出很多条直线将两类样本分开,也就是说,存在有多个可行的线性分类器能将两类样本分类。SVM的最终目标是:以间隔最大化为原则找到最合适的那个分类器。
最大间隔示意图
从直观上看,图中蓝线L2偏向了橙色数据一方,有失公平原则,因而不是我们要找的理想的分类器。红线L1则较注重公平,不偏向任何一类数据,从而能较好地确保离两类数据都尽可能远,实现间隔最大化,这样的分类超平面具有更好的泛化性能,分类更加准确,正是我们要找的最合适的分类器。
我们注意到,图中两条虚线(S1和S2)上的圆点数据即为支持向量(Support vector),它们距离分类超平面最近。现在我们仅保留这些支持向量数据点进行分析(右上图),可以看出两条虚线之间的间隔距离为r。依据公平原则,支持向量到分类超平面的距离则为r/2,这个值即为分类间隔。间隔最大化,就是最大化这个值(r/2)。
由此可以看出,分类间隔值(r/2)只与支持向量数据点有关,与其他非支持向量数据点无关。这也正好诠释了我们在文中开头说到的:SVM的核心理念是支持向量样本会对识别的问题起关键性作用。也就是说,分类超平面的确定仅取决于支持向量。
对于给定的训练样本,首先要找到距离分类超平面最近的点(支持向量),再通过最大化这些点之间的间隔来求解。
5
函数间隔与几何间隔
要使分类间隔值(r/2)最大,该如何求解?我们首先来了解函数间隔与几何间隔。
假设最合适的分类超平面已找到,如前所述,分类超平面的方程即为:
也就是说超平面上的点都符合该方程式。
为便于计算,位于分类超平面两侧的数据计算的数值分别取1或-1,以将数据分两类,这两类数据通常也称为正、负样本数据(如下图所示)。
超平面与分类数据函数值示例
两类数据的函数方程式即为:
也就是说任何属于正样本类的数据(x)带入方程式得到的结果(y)计算取值都为1,即y=1;任何属于负样本类的数据(x)带入方程式得到的结果(y)计算取值都为-1,即y=-1。
函数间隔的定义为:
几何间隔则为:
因此,几何间隔是直观上的点到超平面的距离。
如果令函数间隔γ等于 1,则有:
因此,间隔最大化,就是最大化
这个值,取最大值的表达式即为
几何间隔如下图所示:
最大几何间隔值示例
因此可知:
则:
6
如何处理线性不可分?
在前面苹果和荔枝的例子当中,我们已经了解到 SVM 要求样本数据是线性可分的,这样才会存在分类超平面。而如果样本数据是非线性的情况,那将如何处理呢?SVM的解决办法就是先将数据变成线性可分的,再构造出最优分类超平面。
SVM 通过选择一个核函数 K ,将低维非线性数据映射到高维空间中。原始空间中的非线性数据经过核函数映射转换后,在高维空间中变成线性可分的数据,从而可以构造出最优分类超平面。
如下图所示:原始样本数据在二维空间里无法线性分割,经过核函数映射到三维空间中则可构造出分类超平面进行二类划分。
核函数映射示例
接下来,我们来关注什么是核函数(Kernel Function)。
简单地说,核函数是计算两个向量在隐式映射后空间中的内积的函数。核函数通过先对特征向量做内积,然后用函数 K 进行变换,这有利于避开直接在高维空间中计算,大大简化问题求解。并且这等价于先对向量做核映射然后再做内积。
在实际应用中,通常会根据问题和数据的不同,选择不同的核函数。例如,常用的有以下几种:
线性核函数,就是简单原始空间中的内积。
多项式核函数,可根据R和d的取值不同,而有不同的计算式。
高斯核函数,可根据实际需要灵活选取参数σ,甚至还可以将原始维度空间映射到无穷维度空间。不过,如果σ取值很大,会导致高次特征上的权重衰减快;如果σ取值很小,其好处是可以将任意的数据映射成为线性可分,但容易造成过拟合现象。
高斯核函数是非常经典,也是使用最广泛的核函数之一。下图是把低维线性不可分的数据通过高斯核函数映射到了高维空间的示例图:
高斯核函数映射示例图
至此,我们已经知道核函数不使用显式的计算核映射,并且能够很好地解决线性不可分问题。在实际应用中,如果训练样本数量大,经训练后得出的模型中支持向量的数量会有很多,利用该模型进行新样本预测时,需要先计算新样本与每个支持向量的内积,然后做函数 K转换,耗时长、速度慢。
7
SVM求解算法知多少
我们已经知道,能够实现二分类的超平面会有很多,SVM的最终目的是要找到最优的那个。尽管其原理已经明确:是通过间隔最大化来寻找。但要找到这个最优的分类超平面并不是一件容易的事,往往需要多次的训练与迭代。
如下图所示,直观来看,最优分类超平面是间隔最大化的蓝线,但机器训练过程中最开始得到的可能是红线H1这个分类超平面,经过n次的训练迭代,使红线不断靠近蓝线,最终获得最优的分类超平面(蓝线Hn)。
最优超平面训练过程示例
使红线不断逼近蓝线的过程是如何实现的呢?那就离不开各类算法了。
前面我们已经提到,求出W、b,就得到了超平面的函数方程式。而实际上分类超平面是有很多的,也就是可以求出很多组W、b,机器学习训练过程最终要求出最合适的W、b,亦即找到了最合适的分类超平面。
值得注意的是,最开始的一组W、b,是需要我们人为去给定的,也就是预先给定一个分类超平面去试错,看这样的超平面得出的分类结果与实际结果的差值有多少,然后再根据这个差值调整W、b,然后再试、再调整,最终才能得到最优的W、b。训练试错和调整的过程就是通过各类算法来实现的。
常用的算法如下表:
通过给定一组带标签的训练样本,经过算法运算后,将会输出一个最优超平面,利用这个最优超平面就可以对新的样本进行分类。
感知器算法是针对线性数据的一种训练算法,早在1956 年就已经提出,但影响至今。Mercer定理则是一种非线性学习器,我们前面所说的核函数须满足这一定理才是有效的核函数,通过在训练集上求出各个Kij,然后判断矩阵K是否是半正定即可。
最小二乘法以误差平方和最小来确定最优超平面,不仅计算方便,评判效果也非常良好。损失函数法实际是将风险损失降为最小,通过最小化损失函数得出最优模型分类器。常用的有平方损失函数、绝对损失函数等,表达式如下:
SMO是经典的求解凸二次规划的优化算法。我们来看看什么是凸二次规划问题。回想前面说到的,间隔最大化,即:
这其实等价于求:
需要注意到,这个目标函数还需满足一个约束条件:
可以看出,上述最小化目标函数是二次的(自变量的二次函数),且它的约束条件是线性的,这样的目标函数求解就是典型的凸二次规划问题。
对于凸二次规划问题的特殊结构,可以通过拉格朗日对偶性变换来简化问题求解,通过求解与原问题等价的对偶问题,进而得出原问题的最优解。
拉格朗日对偶性变换是怎样的呢?其实也不复杂,就是在约束条件加上一个拉格朗日乘子α,并构造拉格朗日函数L(w,b,α)如下:
并且约束条件为:
将原问题转化为等价对偶问题的求解,对偶等价关系如下:
求解对偶问题的步骤:
-1-
先将拉格朗日乘子α看作常数,分别对w和b求偏导数并令它们为 0,得到最小化的w和b,带入原方程得:
可以看出,上式中只剩下了αi一个变量,求出αi之后,带入偏导方程就可以求出w和b了。
-2-
经过第1步对w和b求偏导变换后,得出只包含有αi变量的方程,接着最大化α,即最优化对偶问题,表达如下:
可以得出:
根据该方程,即可求出αi。
-3-
最后利用SMO算法求解拉格朗日乘子α。
在第2步的方程式中,Xi和Yi都是已知数,只需在参数 [α1,α2 …,αn]T上求出最大w。
SMO 算法每次迭代时,先选出两个分量αi和αj进行调整,其它分量固定不变。调整之后利用αi和αj改进其它分量。SMO算法每次迭代的计算量较小,所以收敛较快,且没有矩阵运算。
8 如何解决多分类问题
虽然SVM解决的是二值分类问题,但也可以进一步推广到多分类问题。如何应用SVM解决多分类问题?常用方法有以下几种:
1 一对一方案
所谓一对一,顾名思义就是一类对一类地比较分类,这也是SVM的原始思想。因为有多个类别,所以需要重复多个一对一过程。
因此该方法就是通过在每两类样本之间设计一个SVM模型,来完成多类别的分类,因而需要构造多个一对一的SVM分类器。假设样本类别有m个,则总共需要设计m(m-1)/2个SVM分类器。
例如,如下图所示,总共有4类水果(苹果、香梨、西瓜、哈密瓜)需要分类,在每两类水果样本之间设计一个SVM模型,总共需要设计4×(4-1)/2=6个 SVM分类器。
可以看出,通过设计6个 SVM分类器最终将4种水果区分出来。但如果样本类别较多时,需要设计的SVM分类器会非常多。例如当水果类别达1000种时,则总共需要设计1000×(1000-1)/2=499500个SVM分类器,算法计算复杂度相当高。
2 一对多方案
该方法的思想是:选定其中一种类别样本单独作为一个类别,除该类别外的其余类别样本则归为另一个类别,这样就达到了SVM二分类的要求。换句话说,就是在某一种类别样本与其余剩余类别样本之间构造SVM分类器,并且每一种类别样本都要经历被选定为单独一个类别的过程,因此,有多少种类别的样本,就需构造多少个SVM分类器。
同样以四种水果(苹果、香梨、西瓜、哈密瓜)为例,一对多方案的分类过程见下图:
我们可以看出,上述分类过程是:首先选定苹果单独作为一个类别,其余香梨、西瓜、哈密瓜则统一归为另一个类别,在这两个类别之间构造SVM1分类器;再选定香梨单独作为一个类别,其余苹果、西瓜、哈密瓜统一归为另一个类别,在这两个类别之间构造SVM2分类器,以此类推。
以上总共有4种类别的水果,分别构造了4个SVM分类器,就把苹果、香梨、西瓜、哈密瓜这四种水果类别区分出来了。因此,采用一对多方案,需要构造的SVM分类器数量与样本类别数量相同。相比于一对一的方案,一对多方案需要构造的SVM分类器数量会少很多,但是,如果训练样本数目大,训练难度也加大。
3 应用二叉树方案
二叉树,就是从一个根支上长出两个树杈节点,在树杈节点上又进一步长出两个次级树杈节点,以此原理不断往下长出新的树杈节点,直到问题解决。
同样以上述四种水果(苹果、香梨、西瓜、哈密瓜)为例,应用二叉树方案的分类过程见下图:
从上图可以看出,该方案的第一步实际是一对多的方案,先将苹果单独作为一个类别,其余香梨、西瓜、哈密瓜则统一归为另一个类别,在这两个类别(两个树枝)之间构造SVM1分类器来区分。此后,以香梨、西瓜、哈密瓜这一类树枝节点为根节点,构造SVM2分类器,分出香梨——西瓜、哈密瓜这两类次级树枝。最后,再以西瓜、哈密瓜这一类次级树枝节点为根节点,构造SVM3分类器,分出西瓜——哈密瓜这两类再次级树枝节点,分类过程即完成。
可见,当二叉树树枝节点都只包含一个单独的类别时,分类即完成,该最终节点也就是二叉树树种的叶子。在上述4种水果类别中,总共需要构造3个SVM分类器来完成分类。因此,应用二叉树方案,总共需要构造m-1个SVM分类器(m为样本类别数量)。该方案有一个较大的缺点,那就是,如果某个节点出现分类错误,会发生错误连锁反应,其后续节点上的分类都将继承该错误直到末端叶子。
由以上几种方案可知,SVM解决多分类问题时,需要将原有的分类问题分解成一系列的二分类问题以达到多分类的目的。在应用中,随着样本类别的增多,训练的难度和复杂度也随之增加。如何减轻计算量和降低计算难度,是SVM在多分类应用中需要着重考虑的难点之一。
目前,SVM 在文本分类、人脸识别、手写字符识别、生物信息学等领域已应用非常成功,或许SVM还可以成功应用的领域远远超出我们的想象。相信,SVM的未来仍然值得期许。