支持向量机SVM分析

来源:互联网 发布:coc暗黑训练营升级数据 编辑:程序博客网 时间:2024/05/21 18:43

背景引言

1995年Vapnik等人[2]提出一种机器学习的新方法支持向量机(Support Vector Machine,SVM)之后,支持向量机成为继人工神经网络之后又一研究热点,国内外研究都很多。支持向量机方法是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性,即:对特定训练样本的学习精度和学习能力,即:无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(Generalizatin Ability)。

SVM一种新的非常有发展前景的分类识别技术。SVM是建立在统计学习理论中结构风险最小化原理基础上,根据有限的样本信息,在模型的复杂性(即对特定训练样本的学习精度)和学习能力(即无错误地识别样本的能力)之间寻求最佳折衷,以期获得最好的推广能力。SVM克服了神经网络和传统分类器的过学习、局部极值点和维数灾难等诸多缺点,具备较强的泛化能力,已成为备受关注的研究热点

基本介绍

首先,SVM特点如下所述:

  • 非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射;
  • 对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方法的核心;
  • 支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量。

SVM 是一种有坚实理论基础的新颖的小样本学习方法。它基本上不涉及概率测度及大数定律等,因此不同于现有的统计方法。从本质上看,它避开了从归纳到演绎的传统过程,实现了高效的从训练样本到预报样本的“转导推理”,大大简化了通常的分类和回归等问题。SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的Robustness。这种Robustness主要体现在:  第一、增、删非支持向量样本对模型没有影响;第二、支持向量样本集具有一定的鲁棒性; 第三、有些成功的应用中,SVM 方法对核的选取不敏感.

其次,SVM不足如下所述:

  • SVM算法对大规模训练样本难以实施由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。
  • 用SVM解决多分类问题存在困难.经典的支持向量机算法只给出了二类分类的算法,
针对以上问题的主要改进有有J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC以及O.L.Mangasarian等的SOR算法 。而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。如:与粗集理论结合,形成一种优势互补的多类问题的组合分类器。

算法描述

SVM 算法的核心在于最优分类超平面的确定,即通过训练样本确定分类器函数的参数。确定分类超平面,实质上是求解一个二次优化的问题,通过求解对偶问题确定分类器的参数。但是现有的算法在效率和空间上都难以达到令人满意的程度。传统的利用标准二次型优化技术解决对偶问题的方法是训练算法效率低的.主要原因:首先,SVM方法需要计算和存储核函数矩阵,当样本点数目较大时,需要很大的内存,因为每次迭代要在内存中保存整个核函数矩阵。其次,SVM  训练算法在二次型寻优过程中要进行大量的矩阵运算,因为计算过程是一个不断迭代的过程。在大多数情况下,寻优算法是占用算法时间的主要部分。SVM方法的训练运算速度是限制它的应用的主要方面,近年来人们针对方法本身的特点提出了许多算法来解决对偶寻优问题。大多数算法的共同思想都是循环迭代,将原问题分解成为若干子问题,按照某种迭代策略,通过反复求解子问题,最终使结果收敛到原问题的最优解。根据子问题的划分和迭代策略的不同,又可以大致分为两类。

分解算法 

分解算法基于的是这样一个事实,即去掉 Lagrange  乘子等于零的训练样本不会影响原问题的解。对于给定的训练样本集,如果其中的支持向量是已知的,寻优算法就可以排除非支持向量,只需对支持向量计算权值(Lagrange  乘子)即可,因为只有支持向量对最终的结果有影响。实际上支持向量是未知的,因此分解算法的目标就是通过某种迭代方式逐步排除非支持向量。

具体的作法是,选择一部分样本构成工作样本集进行训练,剔除其中的非支持向量,并用训练结果对剩余样本进行检验,将不符合训练结果(违反 KKT 条件)的样本(或其中的一部分)与本次结果的支持向量合并成为一个新的工作样本集,然后重新训练。如此重复下去直到获得最优结果。当支持向量的数目远远小于训练样本数目时,分解算法能够大大提高运算速度。然而,如果支持向量的数量本身就比较多,随着算法迭代次数的增多,工作样本集会越来越大,算法仍然会十分复杂,并且效率也得不到保证。因此有研究把问题分解成为固定样本数的子问题,工作样本集的大小固定在算法速度可以容忍的限度内,迭代过程只是把剩余样本中部分离分类面最远的样本与工作样本集中的样本进行等量交换,即使支持向量的个数超过工作样本集的大小,也不改变工作样本集的规模,而只是分别对支持向量中的一部分进行优化。

这种分解的算关键在于选择一种合适的样本换入换出策略。选用一种合适的启发式迭代策略可以大大提高算法的收敛速度。SMO 算法就是把工作样本集的规模减到最小,也即两个。之所以需要两个样本是因为等式线性约束的存在使得同时至少有两个拉格朗日乘子发生变化。由于只有两个变量,而且应用等式约束可以将其中一个用另一个表示出来,所以迭代过程每一步的子问题的最优解可以直接用解析的方法求出来,使得这一步的时间复杂度为 O(1),而不必每次都进入求解最优子问题的过程,从而避开了时间复杂度大的数值求解优化问题的过程。分解算法实质上是一种对局部问题求最优、然后再整体求最优的算法。它通过增加迭代次数来减少每次运算的运算量和运算所用资源。如果能够利用一些应用背景的先验信息,在进行迭代之前先用先验知识排除大量无关紧要的训练点,则可以大大提高算法的效率。

序列优化的训练算法

序列优化的训练算法基本思想是研究当出现新的单个样本时,它与原有样本集或其子集,或是原有样本集训练结果的关系,例如,新加入的样本对原有样本集的支持向量集有什么影响,如何迅速地确定它对新的分类器函数的贡献。在的基于连续过松弛变量的方法就是序列优化思想的体现,它应用于回归分析中有较好的效果。我们把入侵检测的先验知识引入 SVM 模型中,并提出一个基于 SMO 的训练算法。

SMO(Sequential Minimal Optimization)算法是首先由 Platt 中提出来的,后来由 Keerthi 中进行了改进。它实质上是一个工作集只有两个样本的分解算法。在 SMO 中,样本的优化问题可以通过解析方法进行,所以它的实现比较容易。SMO 中有两个基本的模块,解析法求解两个样本的最优化以及在工作集中的样本选择。SMO算法是一个分解算法,而且它把每次工作的样本都减少最少的到 2 个。

算法分为内外两个循环,内层循环针对违反KKT条件的样本选择另一个样本与它配对优化(指优化它们的Lagrange乘子),选择的依据是尽量使用这样一对样本能取得最大优化步长,对其中一个Lagrange乘子α2来说优化步长为|(E1-E2)/η|,但由于核函数估算耗时较大,算法中只用|E1-E2|来大致估计有可能取得的步长大小。也就是说,选出使得|E1-E2|最大的样本。由于步长估计比较粗略,选择出来的一对样本有时不能一步到位,更有可能不能做出进一步调整。这时算法遍历所有非边界样本(也就是Lagrange乘子不在边 0 或C上的样本),继续寻找能与α2配对优化的α1,如果这样的样本在非边界样本中找不到,再遍历所有样本。这两次遍历都是从随机位置开始的,以避免算法总是在一开始遍历就向固定的方向产生偏差。在极端退化的情形,找不到与α2配对能做出进一步调整的α1,这时放弃第一个样本。外层循环遍历非边界样本或所有样本,优先选择遍历非边界样本,因为非边界样本更有可能需要调整,而边界样本常常不能得到进一步调整而留在边界上。循环遍历非边界样本并选出它们当中违反 KKT 条件的样本进行调整,直到非边界样本全部满足 KKT 条件为止。当某一次遍历发现没有非边界样本得到调整时,就遍历所有样本,以检验是否整个集合也都满足 KKT 条件。如果在整个集合的检验中又有样本被进一步优化,就有必要再遍历非边界样本。这样,外层循环不停地在“遍历所有样本”和“遍历非边界样本”之间切换,直到整个训练集都满足 KKT 条件为止。

SMO 算法和一般的块算法和固定工作样本集算法一样,都是把一个大的优化问题分解为很多小问题来处理。块算法在每一步中将新加入样本中违反 KKT条件的样本与原有的支持向量一起组成小问题的样本集进行优化,优化完毕后只保留其中的支持向量,再加进来新的样本进入下一步。固定工作样本集法是每一步只收集新加入样本中的最坏的样本,并将原来保留的支持向量集中较好的替换出去,以保持样本集大小不变。SMO 算法把每一步的优化问题缩减到最小,可以看作是固定工作样本集算法的一种极端的情况,即任何时候工作样本集中都只有两个样本,并且在每一步迭代的时候都用两个新的拉格朗日乘子替换原有的全部乘子。

支持向量机基本上是最好的有监督学习算法了。看很多正统的讲法都是从VC 维理论和结构风险最小原理出发,然后引出SVM什么的,还有些资料上来就讲分类超平面什么的。我们logistic回归出发,引出了SVM,既揭示了模型间的联系,也让人觉得过渡更自然。

logistic回归

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

其中x是n维特征向量,函数g就是logistic函数

图像如下所示:

可以看到,将无穷映射到了(0,1)。而假设函数就是特征属于y=1的概率


当我们要判别一个新来的特征属于哪个类时,只需求,若大于0.5就是y=1的类,反之属于y=0类。

再审视一下,发现只和有关,>0,那么,g(z)只不过是用来映射,真实的类别决定权还在。还有当>>0时,clip_image006[3]=1,反之=0。如果我们只从出发,希望模型达到的目标无非就是让训练数据中y=1的特征>>0,而是y=0的特征<<0。Logistic回归就是要学习得到,使得正例的特征远大于0,负例的特征远小于0,强调在全部训练实例上达到这个目标。

图形化表示如下:

中间那条线是=0,logistic回顾强调所有点尽可能地远离中间那条线。学习出的结果也就中间那条线。考虑上面3个点A、B和C。从图中我们可以确定A是×类别的,然而C我们是不太确定的,B还算能够确定。这样我们可以得出结论,我们更应该关心靠近中间分割线的点,让他们尽可能地远离中间线,而不是在所有点上达到最优。因为那样的话,要使得一部分点靠近中间线来换取另外一部分点更加远离中间线。我想这就是支持向量机的思路和logistic回归的不同点,一个考虑局部(不关心已经确定远离的点),一个考虑全局(已经远离的点可能通过调整中间线使其能够更加远离)。这是我的个人直观理解。

形式化表示

我们这次使用的结果标签是y=-1,y=1,替换在logistic回归中使用的y=0和y=1。同时将替换成w和b。以前的,其中认为。现在我们替换为b,后面替换(即clip_image031)。这样,我们让,进一步。也就是说除了y由y=0变为y=-1,只是标记不同外,与logistic回归的形式化表示没区别。再明确下假设函数


上一节提到过我们只需考虑的正负问题,而不用关心g(z),因此我们这里将g(z)做一个简化,将其简单映射到y=-1和y=1上。映射关系如下:


函数间隔(functional margin)和几何间隔(geometric margin)

给定一个训练样本,x是特征,y是结果标签。i表示第i个样本。我们定义函数间隔如下:


可想而知,当时,在我们的g(z)定义中,的值实际上就是。反之亦然。为了使函数间隔最大(更大的信心确定该例是正例还是反例),当时,应该是个大正数,反之是个大负数。因此函数间隔代表了我们认为特征是正例还是反例的确信度。继续考虑w和b,如果同时加大w和b,比如在前面乘个系数比如2,那么所有点的函数间隔都会增大二倍,这个对求解问题来说不应该有影响,因为我们要求解的是,同时扩大w和b对结果是无影响的。这样,我们为了限制w和b,可能需要加入归一化条件,毕竟求解的目标是确定唯一一个w和b,而不是多组线性相关的向量。这个归一化一会再考虑。

刚刚我们定义的函数间隔是针对某一个样本的,现在我们定义全局样本上的函数间隔 


说白了就是在训练样本上分类正例和负例确信度最小那个函数间隔。接下来定义几何间隔,先看图


假设我们有了B点所在的分割面。任何其他一点,比如A到该面的距离以表示,假设B就是A在分割面上的投影。我们知道向量BA的方向是w(分割面的梯度),单位向量是。A点是,所以B点是x=(利用初中的几何知识),带入得,


进一步得到


clip_image061[1]实际上就是点到平面距离。

再换种更加优雅的写法:


时,不就是函数间隔吗?是的,前面提到的函数间隔归一化结果就是几何间隔。他们为什么会一样呢?因为函数间隔是我们定义的,在定义的时候就有几何间隔的色彩。同样,同时扩大w和b,w扩大几倍,就扩大几倍,结果无影响。同样定义全局的几何间隔

最优间隔分类器(optimal margin classifier)

回想前面我们提到我们的目标是寻找一个超平面,使得离超平面比较近的点能有更大的间距。也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。形象的说,我们将上面的图看作是一张纸,我们要找一条折线,按照这条折线折叠后,离折线最近的点的间距比其他折线都要大。形式化表示为:


这里用规约w,使得是几何间隔。

到此,我们已经将模型定义出来了。如果求得了w和b,那么来一个特征x,我们就能够分类了,称为最优间隔分类器。接下的问题就是如何求解w和b的问题了。

由于不是凸函数,我们想先处理转化一下,考虑几何间隔和函数间隔的关系,,我们改写一下上面的式子:


这时候其实我们求的最大值仍然是几何间隔,只不过此时的w不受的约束了。然而这个时候目标函数仍然不是凸函数,没法直接代入优化软件里计算。我们还要改写。前面说到同时扩大w和b对结果没有影响,但我们最后要求的仍然是w和b的确定值,不是他们的一组倍数值,因此,我们需要对clip_image086做一些限制,以保证我们解是唯一的。这里为了简便我们取。这样的意义是将全局的函数间隔定义为1,也即是将离超平面最近的点的距离定义为。由于求的最大值相当于求的最小值,因此改写后结果为:


只有线性约束了,而且是个典型的二次规划问题(目标函数是自变量的二次函数)。代入优化软件可解。到这里发现,画好分类超平面,在图上标示出间隔那么直观,但每一步推导有理有据,依靠思路的流畅性来推导出目标函数和约束。

规则化和不可分情况处理(Regularization and the Nonseparable Case)

我们之前讨论的情况都是建立在样例线性可分的假设上,当样例线性不可分时,我们如何处理呢?接下来,我们将谈谈规则化和不可分情况处理、坐标上升法。当样例线性不可分时,我们可以尝试使用核函数来将特征映射到高维,这样很可能就可分了。然而,映射后我们也不能100%保证可分。那怎么办呢,我们需要将模型进行调整,以保证在不可分的情况下,也能够尽可能地找出分隔超平面。如下面图所示:


可以看到一个离群点(可能是noise)可以造成超平面的移动,间隔缩小,可见以前的模型对噪声非常敏感。再有甚者,如果离群点在另外一个类中,那么这时候就是线性不可分了。这时候我们应该允许一些点游离并在在模型中违背限制条件(函数间隔大于1)。我们设计得到新的模型如下(也称软间隔):


引入非负参数后(称为松弛变量),就允许某些样本点的函数间隔小于1,即在最大间隔区间里面或者函数间隔是负数,即样本点在对方的区域中。而放松限制条件后,我们需要重新调整目标函数,以对离群点进行处罚,目标函数后面加上的就表示离群点越多,目标函数值越大,而我们要求的是尽可能小的目标函数值。这里的C是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。我们看到目标函数控制了离群点的数目和程度,使大部分样本点仍然遵守限制条件。模型修改后,拉格朗日公式也要修改如下:


这里的clip_image010都是拉格朗日乘子,回想我们在拉格朗日对偶中提到的求法,先写出拉格朗日公式(如上),然后将其看作是变量w和b的函数,分别对其求偏导,得到w和b的表达式。然后代入公式中,求带入后公式的极大值。整个推导过程类似以前的模型,这里只写出最后结果如下:


此时,我们发现没有了参数,与之前模型唯一不同在于又多了clip_image015的限制条件。需要提醒的是,b的求值公式也发生了改变,改变结果在SMO算法里面介绍。先看看KKT条件的变化:


第一个式子表明在两条间隔线外的样本点前面的系数为0,离群样本点前面的系数为C,而支持向量(也就是在超平面两边的最大间隔线上)的样本点前面系数在(0,C)上。通过KKT条件可知,某些在最大间隔线上的样本点也不是支持向量,相反也可能是离群点。

坐标上升法(Coordinate ascent)

在最后讨论clip_image018的求解之前,我们先看看坐标上升法的基本原理。假设要求解下面的优化问题:.这里W是clip_image021向量的函数。之前我们在回归中提到过一种求最优解的方法即:梯度下降法,另外一种是牛顿法。现在我们再讲一种方法称为坐标上升法(求解最小值问题时,称作坐标下降法,原理一样)。方法过程如下所示:

Loop until Convergence:{      For i =1,....,m{        ai :=arg max ai W{a1,a2,....,am-1,am}      }  } 

最里面语句的意思是固定除之外的所有,这时W可看作只是关于的函数,那么直接对求导优化即可。这里我们进行最大化求导的顺序i是从1到m,可以通过更改优化顺序来使W能够更快地增加并收敛。如果W在内循环中能够很快地达到最优,那么坐标上升法会是一个很高效的求极值方法。下面通过如下图来展示:


在图中:椭圆代表了二次函数的各个等高线,变量数为2,起始坐标是(2,-2)。直线式迭代优化的路径,可以看到每一步都会向最优值前进一步,而且前进路线是平行于坐标轴的,因为每一步只优化一个变量。

参考资料

[1] Support Vector Machine From Wikipedia, the free encyclopedia.

[2] Cortes, Corinna; and Vapnik, Vladimir N.; "Support-Vector Networks", Machine Learning, 20, 1995.


关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博和新浪微博songzi_tea.