SVM支持向量机

SVM支持向量机
SVM支持向量机

SVM 支持向量机

目录

一、简介 (1)

二、线性分类器 (3)

三、分类间隔指标 (4)

四、线性分类器的求解 (8)

五、核函数 (9)

六、松弛变量 (11)

七、惩罚因子C (15)

八、SVM用于多类分类 (17)

九、SVM的计算复杂度 (19)

一、简介

支持向量机在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础

上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力)。

以下逐一分解并解释一下:统计机器学习之所以区别于传统机器学习的本质,就在于统计机器学习能够精确的给出学习效果,能够解答需要的样本数等等一系列问题。与统计机器学习的精密思维相比,传统的机器学习基本上属于摸着石头过河,用传统的机器学习方法构造分类系统是一种技巧,一个人做的结果可能很好,另一个人差不多的方法做出来却很差,缺乏指导和原则。

VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。SVM关注的是VC维,和样本的维数是无关(甚至样本可以是上万维的,这使得SVM很适合用于解决文本分类的问题,也因此引入了核函数)。

结构风险最小:机器学习本质上就是对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型作为假设),而真实模型是未知的。假设与问题真实解之间的误差,叫做风险(更严格的说,误差的累积叫做风险)。我们选择了一个假设(即分类器)之后,我们可以用某些可以掌握的量来逼近误差,最直观的方法就是使用分类器在样本数据上的分类的结果与真实结果(样本是已标注过的数据,即准确的数据)之间的差值来表示。这个差值叫做经验风险Remp(w)。

以前的机器学习方法都把经验风险最小化作为努力的目标,但后来发现很多分类函数能够在样本集上很轻易的达到100%的正确率,在应用于真实分类时却一塌糊涂(即推广能力差,或称泛化能力差)。此时需要选择了一个足够复杂的分类函数(它的VC维很高),精确的记住每一个样本,但对样本之外的数据一律分类错误。基于经验风险最小化原则我们就会发现,该原则适用的大前提是经验风险要能够逼近真实风险才行,但实际上是不能逼近的,因为样本数相对于现实应用要分类的文本数来说太少,经验风险最小化原则只能在占很小比例的样本上做到没有误差,不能保证在更大比例的真实文本上也没有误差。

统计学习从而引入泛化误差界的概念,即真实风险应该由经验风险,代表了分类器在给定样本上的误差,以及置信风险,代表了我们能在多大程度上信任分类器在未知文本上分类的结果。置信风险是无法精确计算的,只能给出一个估计的区间,使得整个误差只能计算上界,而无法计算准确值。

置信风险与两个量有关,一是样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小;二是分类函数的VC维,显然VC 维越大,推广能力越差,置信风险会变大。

泛化误差界的公式为:R(w)≤Remp(w)+Ф(n/h)

公式中R(w)就是真实风险,Remp(w)就是经验风险,Ф(n/h)就是置信风险。统计学习的目标从经验风险最小化变为了结构风险最小,即经验风险与置信风险的和最小。

SVM正是这样一种基于结构风险最小化的算法。

SVM的其他特点:小样本,这里的小样本是相对的,对于算法来说,更多的样本几乎总是能带来更好的效果,与问题的复杂度相比,SVM算法要求的样本数是比较少的。

非线性,SVM擅长应对样本数据线性不可分的情况,通过松弛变量(惩罚变量)!和核函数!来实现。

高维模式识别是指样本维数很高,例如文本的向量表示,如果没有经过降维处理,出现几万维的情况很正常,其他算法基本无法处理。而SVM 产生的分类器很简洁,用到的样本信息很少(仅用到那些称之为“支持向量”的样本),在样本维数很高的情况下,也不会给存储和计算造成困扰,可以适用于样本维数很高的情况。(例如:KNN算法在分类时要用到所有样本,样本数巨大,若每个样本维数高的话,基本无法应对)。

二、线性分类器

线性分类器(感知机) 是简单且有效的分类器形式.在一个线性分类器中,可以了解SVM形成的思路和SVM的核心概念。

例1:如图,一个二维空间里仅有两类样本

C 1和C

2

是要区分的两个类别,中间的直线就是一个分类函数,它可以将两类样本

完全分开。一般,若一个线性函数能够将样本完全分开,称这些数据是线性可分的,否则称为非线性可分。

线性函数:在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,即n维空间中的(n-1)维组件,若不考虑空间维数,这种线性函数也称超平面(Hyper Plane)。

实际上,线性函数是实值函数(即函数的值是连续的实数),而分类问题(例如这里的二元分类问题—判断样本属于还是不属于一个类别的问题)需要离散的输

出值,例如用1表示某个样本属于类别C

1,而用-1表示属于C

2

,这时候只需要

简单的在实值函数的基础上附加一个阈值即可,通过分类函数执行时得到的值大于还是小于这个阈值来确定类别归属。例如:有一个线性函数g(x)=wx+b,可

以取阈值为0,当有一个样本x

i 需要判别时,若g(x

i

)>0,就判别为类别C

1

,若

g(x

i )<0,则判别为类别C

2

(等于时拒绝判断)。此时等价于给函数g(x)附加一

个符号函数sgn(),即f(x)=sgn [g(x)]是真正的判别函数。

关于g(x)=wx+b要注意三点:一,式中的x不是二维坐标系中的横轴,而是样本的向量表示,例如一个样本点的坐标是(3,8),则x T=(3,8) ,而不是x=3。二,形式并不局限于二维,在n维空间中仍可以使用这个表达式,只是式中的w为n 维向量(在二维的这个例子中,w是二维向量,为表示方便,以下不区别列向量和它的转置);三,g(x)不是中间那条直线的表达式,中间那条直线的表达式是g(x)=0,即wx+b=0,这个函数叫做分类面。

中间那条分界线并不是唯一的,若稍微旋转一下,只要不把两类数据分错,仍然可以达到上面的效果,稍微平移一下,也可以。此时需考虑,对同一个问题存在多个分类函数的时候,哪一个函数更好,此时需要“分类间隔”指标。

三、分类间隔指标

分类间隔模型可以判断通过训练建立的分类模型的好坏。

在进行文本分类时,可以让计算机将每一个样本看作一个向量(即文本特征组成

的向量)和一个标记(标示此样本属于哪个类别)的组合。如D

i =(x

i

,y

i

)中,x

i

是文本向量(维数很高),y

i

是分类标记。在二元线性分类中,这个表示分类的标记只有两个值,1和-1(表示属于或不属于这个类)。有了这种表示法,我们

就可以定义一个样本点到某个超平面的间隔:δ

i =y

i

(wx

i

+b)若某个样本属于该类

别,wx

i +b>0,而y

i

也大于0;若不属于该类别,wx

i

+b<0,y

i

也小于0,这意味着

y i (wx

i

+b)总是大于0的,而且它的值就等于|wx

i

+b(即|g(x

i

)|)。将w和b进行

归一化,即用w/||w||和b/||w||分别代替原来的w和b,那么间隔就可以写成

解析几何中点x

i

到直线g(x)=0的距离公式经推广,表示到超平面g(x)=0的距离, g(x)=0就是第二节中提到的分类超平面。

||w||叫做向量w的范数,范数是对向量长度的一种度量。常用的向量长度指的

是它的2-范数,范数最一般的表示形式为p-范数,即向量w=(w

1, w

2

, w

3

,…… w

n

)

的p-范数为:

当p=2的时,就是传统的向量长度。当不指明p时,使用||w||,即不关心p的值;或已指明p的值。

当用归一化的w和b代替原值后的间隔叫做几何间隔,表示的是点到超平面的欧氏距离,简称“距离”。以上是单个点到某个超平面的距离,同样可以定义一个点的集合(即一组样本)到某个超平面的距离为此集合中离超平面最近的点的距离。如图所示:

H是分类面,H

1和H

2

平行于H,且是过离H最近的两类样本的直线,H

1

与H,H

2

与H之间的距离就是几何间隔。

几何间隔与样本的误分次数间存在如下关系:

δ是样本集合到分类面的间隔,R=max ||xi|| i=1,...,n,即R是所有样本中(xi是以向量表示的第i个样本)向量长度最长的值(代表样本的分布广度)。这个误分次数一定程度上代表分类器的误差。由上式可知,样本已知时,误分次数的上界由几何间隔决定。

几何间隔越大,误差上界越小。最大化几何间隔是训练阶段的目标。

间隔:δ=y(wx+b)=|g(x)|

几何间隔:

即δ=||w||δ几何。几何间隔与||w||成反比,因此最大化几何间隔与最小化||w||是一回事。一般固定间隔(例如1),寻找最小的||w||。凡是求一个函数的最小值(或最大值)的问题都可以称为寻优问题(规划问题),找最大值的问题可以通过加一个负号变为找最小值的问题,因此我们下面讨论的时针对找最小值的

过程来进行。目标函数为:,为方便后期进行求导等处理,等价于

,易看出当||w||=0时目标函数的值最小。反映在图中,就是H1与H2两条直线间的距离无限大,这时,所有样本点(无论正样本还是负样本)都跑到了H1和H2中间,而操作时,H1右侧的点被分为正类,H2 左侧的点被分为负类,位于两类中间的样本则拒绝分类。这时,所有样本点都进入了无法分类的灰色地带。

造成这种结果的原因是在描述问题时只考虑了目标,而未加入约束条件,约束条件就是在求解过程中必须满足的条件,体现在问题中的某些样本点必须在H1或H2的某一侧(或至少在H1和H2上),而不能跑到两者中间。前文提到把间隔固定为1,这是指把所有样本点中间隔最小的那一点的间隔定为1(这也是集合的间隔的定义),也就意味着集合中的其他点的间隔都不会小于1,按照间隔的定义,满足这些条件就相当于下面的式子总是成立的:

yi[(w·xi)+b]≥1 (i=1,2,…,l) (l是总的样本数)

等价于yi[(w·xi)+b]-1≥0 (i=1,2,…,l) (l是总的样本数)

因此两类分类问题转化成了它的数学形式,即带约束的最小值问题:

求最小值的问题就是优化问题(寻优问题或规划—Programming),同样由目标函数和约束条件组成:

(式1)

约束条件用函数c(constrain)来表示。这里有有p+q个约束条件(其中p 个不等式约束,q个等式约束)。式中的x是自变量,但不限定它的维数必须为1。要求f(x)在哪一点上取得最小值,不是在整个空间里找,而是在约束条件所划定的一个有限的空间里找,这个有限的空间就是优化理论里所说的可行域。注意可行域中的每一个点都要求满足所有p+q个条件,同时可行域边界上可以使不等式约束取得等号。对SVM来说,边界上的点唯一的决定了分类超平面,这些点就被称为支持向量。(凸集是指有一个点的集合,其中任取两个点连一条直线,这条线上的点仍然在这个集合内部,因此说“凸”是很形象的)

自变量是w,而目标函数是w的二次函数,所有的约束条件都是w的线性函数,即二次规划(Quadratic Programming,QP)问题,由于它的可行域是一个凸集,因此它是一个凸二次规划。凸二次规划是有全局最优解的,依据算法的不同,找到这个解的速度即收敛速度会有所不同。该线性分类器问题只有不等式约束。

高数中有函数求极值,即求导再找零点;求条件极值,只带等式约束的优化问题,通过添加拉格朗日乘子,构造拉格朗日函数,把这个问题转化为无约束的优化问题。考虑将带不等式约束的问题向只带等式约束的问题转化。

四、线性分类器的求解

圆形的样本点定为正样本(可将正样本所属的类叫做正类),方形的点定为负类。

w=α

1x

1

2

x

2

+…+α

n

x

n

式子中的α

i

是一个一个的数(在严格的证明过程中,这些α被称为拉格朗日

乘子),而x

i

是样本点,因而是向量,n就是总样本点的个数。为描述方便,以

下开始严格区别数字与向量的乘积和向量间的乘积,用α

1x

1

表示数字和向量的

乘积,而用

1,x

2

>表示向量x

1

,x

2

的内积。因此g(x)的表达式的严格形式是:

g(x)=+b

w不仅跟样本点的位置有关,还跟样本的类别有关(也就是和样本的“标签”有关)。因此用下面这个式子表示才算完整:

w=α

1y

1

x

1

2

y

2

x

2

+…+α

n

y

n

x

n

其中的y

i

就是第i个样本的标签,它等于1或者-1。其实以上式子的那一堆拉格朗日乘子中,只有很少的一部分不等于0(不等于0才对w起决定作用),这部分不等于0的拉格朗日乘子后面所乘的样本点,其实都落在H1和H2上,也正是这部分样本(而不需要全部样本)唯一的确定了分类函数,当然,更严格的说,这些样本的一部分就可以确定,因为例如确定一条直线,只需要两个点就可以,即便有三五个都落在上面,不是全都需要。这部分我们真正需要的样本点,就叫做支持向量!

式子也可以用求和符号简写一下:

因此原来的g(x)表达式可以写为:

注意式子中x是变量,也就是要分类哪篇文档,把该文档的向量表示代入到

x的位置,而所有的x

i 统统都是已知的样本。还注意到式子中只有x

i

和x是向量,

因此一部分可以从内积符号中拿出来,得到g(x)的式子为:

由求w变成了求α,以这样的形式描述问题以后,优化问题少了很大一部分不等式约束。先跳过线性分类器求解部分,看看 SVM在线性分类器上所做的重大改进——核函数。

五、核函数

若提供的样本线性不可分,结果很简单,线性分类器的求解程序会无限循环,永远也解不出来,这必然使得它的适用范围缩小,使线性不可分的数据变得线性可分的方法即为核函数

我们把横轴上端点a和b之间红色部分里的所有点定为正类,两边的黑色部分里的点定为负类。因为二维空间里的线性函数就是指直线,因而找不到符合条件的直线。

但我们可以找到一条曲线,例如:

显然通过点在这条曲线的上方或下方就可以判断点所属的类别,它的函数表达式可以写为:问题只是它不是一个线性函数,但是,下面要注意看了,新建一个向量y和a:

g(x)就可以转化为f(y)=,实际上f(y)的形式就是:g(x)=f(y)=ay

在任意维度的空间中,这种形式的函数都是一个线性函数(只不过其中的a和y 都是多维向量),因为自变量y的次数不大于1。原来在二维空间中一个线性不可分的问题,映射到四维空间后,变成了线性可分的,因此这也形成了最初解决线性不可分问题的基本思路—向高维空间转化,使其变得线性可分。

而转化最关键的部分就在于找到x到y的映射方法。遗憾的是,如何找到这个映射,没有系统性的方法。具体到文本分类问题,文本被表示为上千维的向量,即使维数已经如此之高,也常常是线性不可分的,还要向更高的空间转化。其中的难度可想而知。

f(y)=ay是四维空间里的函数(二维空间里的函数定义g(x)=ax+b,变量x是一维的,但完整形式为y=g(x)=ax+b即y=ax+b而f(y)=ay里面的y是三维的变量。

若文本分类问题的原始空间是1000维的(即每个要被分类的文档被表示为一个1000维的向量),在这个维度上问题是线性不可分的。现在我们有一个2000维空间里的线性函数f(x’)=+b注意向量的右上角有个’,它能够将原问题变得可分。式中的 w’和x’都是2000维的向量,只不过w’是定值,而x’是变量。输入是一个1000维的向量x,分类的过程是先把x变换为2000维的向量x’,

然后求这个变换后的向量x’与向量w’的内积,再把这个内积的值和b相加,就得到了结果,看结果大于阈值还是小于阈值就得到了分类结果。

高维空间里内积的值是判断分类结果的关键。从理论上说, x’是经由x变换来的,因此广义上可以把它叫做x的函数(有一个x,就确定了一个x’),而w’

是常量,它是一个低维空间里的常量w经过变换得到的,所以给了一个w 和x

的值,就有一个确定的f(x’)值与其对应。是否能有这样一种函数K(w,x),他接受低维空间的输入值,却能算出高维空间的内积值

g(x)=K(w,x)+b

f(x’)=+b

这两个函数的计算结果完全一样,不用找映射关系,直接拿低维的输入往g(x)

里面代就可以了(再次提醒,这回的g(x)不是线性函数,因为不能保证K(w,x)这个表达式里的x次数不高于1)。

这样的K(w,x)是确实存在的,称作核函数(核,kernel),而且还不止一个,

事实上,只要是满足了Mercer条件的函数,都可以作为核函数。核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。回想我们上节说的求一个线性分类器,它的形式应该是:

现在这个就是高维空间里的线性函数(为了区别低维和高维空间里的函数和向量,

给w和x都加上了’),可以用一个低维空间里的函数来代替,

f(x’) 和g(x)里的α,y,b全都是一样的,即问题是线性不可分的,但是当

它是线性问题来求解,要求内积的时候用核函数来算。这样求出来的α和选定的核函数一组合,就得到了分类器。

自然会有如下两个问题:

1.既然有很多的核函数,针对具体问题该如何选择

2.如果使用核函数向高维空间映射后,问题仍然是线性不可分的,怎么办?

第一个问题:对核函数的选择,现在还缺乏指导原则,各种实验的观察结果(不光是文本分类)的确表明,某些问题用某些核函数效果很好,用另一些就很差,但是一般来讲,径向基核函数是不会出太大偏差的一种,首选。(libSVM的作

者林智仁认为文本分类用线性核函数效果更佳)

对第二个问题的解决则引出了下一节的主题:松弛变量。

六、松弛变量

一个本来线性不可分的文本分类问题,已通过映射到高维空间变成了线性可分的问题。如下图所示:

圆形和方形的点各有成千上万个(毕竟,这就是我们训练集中文档的数量嘛,当然很大了)。现在想象我们有另一个训练集,只比原先这个训练集多了一篇文章,映射到高维空间以后(当然,也使用了相同的核函数),也就多了一个样本点,但是这个样本的位置是这样的:

就是图中黄色那个点,它是方形的,因而它是负类的一个样本,这单独的一个样本,使得原本线性可分的问题变成了线性不可分的。类似的问题叫做“近似线性可分”问题。

这个样本点可能是噪声,人工判别时会简单的忽略这个样本点,仍然使用原来的分类器,效果丝毫不受影响。但这种对噪声的容错性是人的思维带来的,程序可没有。原本的优化问题的表达式中,考虑所有的样本点(不能忽略某一个,程序不知道该忽略哪一个),在此基础上寻找正负类之间的最大几何间隔,而几何间隔本身代表的是距离,是非负的,像上面这种有噪声的情况会使得整个问题无解。这种解法其实也叫做“硬间隔”分类法,硬性的要求所有样本点都满足和分类平面间的距离必须大于某个值,其结果易受少数点的控制。解决方法就是仿照人的思路,允许一些点到分类平面的距离不满足原先的要求。由于不同的训练集各点的间距尺度不一样,因此用间隔(而不是几何间隔)来衡量有利于表达形式的简洁。原先对样本点的要求是:

意思是说离分类面最近的样本点函数间隔也要比1大。如果要引入容错性,就给1这个硬性的阈值加一个松弛变量,即允许

因为松弛变量是非负的,因此最终的结果是要求间隔可以比1小。但是当某些点出现这种间隔比1小的情况时(这些点也叫离群点),意味着我们放弃了对这些点的精确分类,而这对我们的分类器来说是种损失。但也带来了好处,即使分类面不必向这些点的方向移动,因而可以得到更大的几何间隔(在低维空间看来,分类边界也更平滑)。需要权衡这种损失和好处,回顾原始的硬间隔分类对应的优化问题:

||w||2就是我们的目标函数(系数可有可无),越小越好,因而损失就必然是一个能使之变大的量。衡量损失:

而有人喜欢用

其中l都是样本的数目。第一种方法叫做二阶软间隔分类器,第二种叫做一阶软间隔分类器。把损失加入到目标函数时,需要一个惩罚因子(cost,也就是libSVM 的诸多参数中的C),原来的优化问题就变成:

注意:一是并非所有的样本点都有一个松弛变量与其对应。实际上只有“离群点”才有,或者说没离群的点松弛变量都等于0(对负类来说,离群点就是在前面图中,跑到H2右侧的那些负样本点,对正类来说,就是跑到H1左侧的那些正样本点);二是松弛变量的值实际上标示出了对应的点到底离群有多远,值越大,点就越远;三是惩罚因子C决定了重视离群点带来损失的程度,当所有离群点的松弛变量的和一定时,C越大,对目标函数的损失也越大,最极端的情况是把C定为无限大,这样只要稍有一个点离群,目标函数的值马上变成无限大,问题变成无解,退化成了硬间隔问题;四是惩罚因子C不是一个变量,求解整个优化问题时,C是必须事先指定的值,指定这个值以后,解一下,得到一个分类器,然后用测试数据观测结果,若不好,换一个C的值,再解一次优化问题,得到另一个分类器,再观测结果,即参数寻优。

确定w,就确定了前面图中的三条直线,这时观测间隔有多大,有多少点离群,计算目标函数的值,再换一组三条直线(分类的直线位置移动,有些原来离群的点会变得不再离群,而有的本来不离群的点会变成离群点),再计算目标函数的值,如此往复(迭代),直到最终找到目标函数最小时的w。

松弛变量就是个解决线性不可分问题的方法,核函数的引入也是为了解决线性不可分的问题。以文本分类为例。在原始的低维空间中,样本不可分,无论如何,总会有大量的离群点,此时用核函数向高维空间映射一下,虽然结果仍然不可分,但比原始空间要更加接近线性可分的状态(即达到线性可分的状态),此时再用松弛变量处理少数离群点,简单有效。支持向量机就是使用核函数的软间隔线性分类法。

七、惩罚因子C

引入了松弛变量后的优化问题:

C的作用(C越大越重视离群点),可以给各离群点使用不同的C,即对每个样本的重视程度不一样,对重要样本点,给一个较大的C。一种常用的变形可以用来解决分类问题中样本的“偏斜”问题,数据集偏斜(unbalanced),指参与分类的两个类别(或多个类别)样本数量差异很大。比如正类有10,000个样本,而负类只给了100个,这会引起的问题显而易见,如下图所示:

方形的点是负类。H,H

1,H

2

是根据给的样本算出来的分类面,由于负类的样本

很少,所以一些本来是负类的样本点未提供,比如图中两个灰色的方形点,如果

这两个点有提供的话,那算出来的分类面应该是H’,H

2’和H

1

,显然与之前的

结果有出入,实际上负类给的样本点越多,就越容易出现在灰色点附近的点,算出的结果也就越接近于真实的分类面。但由于偏斜的现象存在,使数量多的正类可以把分类面向负类的方向“推”,影响了结果的准确性。

解决数据集偏斜问题的方法之一就是惩罚因子,即给样本数量少的负类更大的惩罚因子,表示重视这部分样本,因此我们的目标函数中因松弛变量而损失的部分就变成了:

其中i=1…p都是正样本,j=p+1…p+q都是负样本。libSVM这个算法包在解决偏

斜问题的时候用的就是这种方法。C

+和C

-

的大小是试出来的(参数调优),但是

比例可以先确定。若假定C

+是5,那C

-

可用两类样本数的比来算,C

-

就可以定为

500(10,000:100=100:1)。

但真实的原因是负类的样本分布的不够广(没扩充到负类本应该有的区域)。给

C +和C

-

确定比例更好的方法应该是衡量分布的程度。比如计算空间中占据的体积,

例如给负类找一个超球—即高维空间里的,可以包含所有负类的样本,再给正类找一个,比比两个球的半径,就可以大致确定分布的情况。显然半径大的分布就比较广,给小一点的惩罚因子。

但是有的类别样本很集中,这不是提供的样本数量多少的问题,而是类别本身的特征。所以完全的方法是没有的,根据需要,选择实现简单又合用的就好(如libSVM就直接使用样本数量的比)。

八、SVM用于多类分类

SVM是一种典型的两类分类器,只回答属于正类还是负类的问题。而现实中要解决的问题,往往是多类的问题(少部分例外,例如垃圾邮件过滤,就只需要确定“是”还是“不是”垃圾邮件),比如文本分类、数字识别。如何由两类分类器得到多类分类器是一个值得研究的问题。

以文本分类为例,现成的方法有很多,其中一种一劳永逸的方法,就是考虑所有样本,并求解一个多目标函数的优化问题,一次性得到多个分类面,就像下图这样:

多个超平面把空间划分为多个区域,每个区域对应一个类别,给一篇文章,看它落在哪个区域就知道了它的分类。只可惜这种算法还基本停留在纸面上,因为一次性求解的方法计算量实在太大,大到无法实用的地步。退一步考虑,我们就会想到所谓“一类对其余”的方法,就是每次仍然解一个两类分类的问题。比如我们有5个类别,第一次把类别1的样本定为正样本,其余样本合起来定为负样本,

这样得到一个两类分类器,它能够指出一篇文章是还是不是第1类的;第二次我们把类别2 的样本定为正样本,把1,3,4,5的样本合起来定为负样本,得到一个分类器,如此下去,我们可以得到5个这样的两类分类器(总是和类别的数目一致)。到了有文章需要分类的时候,我们就拿着这篇文章挨个分类器识别。好处是每个优化问题的规模比较小,而且分类的时候速度很快(只需要调用5

个分类器就知道了结果)。但有时也会出现很尴尬的情况,如拿一篇文章识别,属于每一类,叫分类重叠现象,或者均不属于,叫不可分类现象。

再退一步考虑,考虑两类分类问题,避免偏斜。因此过程就是算出这样一些分类器,第一个只回答“是第1类还是第2类”,第二个只回答“是第1类还是第3类”,第三个只回答“是第1类还是第4类”,如此下去,你也可以马上得出,这样的分类器应该有5 X 4/2=10个(通式是,如果有k个类别,则总的两类分类器数目为k(k-1)/2)。虽然数目多,但在训练阶段所用的总时间却比“一类对其余”方法少很多,在真正用来分类时,把一篇文章交给所有分类器,每个分类器的投票结果用于判断,也会有分类重叠的现象,但不会有不可分类现象。但类别数如果是1000,要调用的分类器数目会上升至约500,000个(类别数的平方量级)。也不实用。

再退一步,在分类时像一对一方法那样来训练,只是在对一篇文章进行分类之前,先按照下图组织分类器(有向无环图,此方法也叫做DAG SVM)

这样,可以先问分类器“1对5,若回答5,往左走,再问“2对5”这个分类器,若还是“5”,继续往左走,直到得出结果。调用了4个分类器(若类别数是k,则只调用k-1个),分类速度快,且没有分类重叠和不可分类现象,但缺点是错误会向下累积。但累积的上限是有定论的。而一对其余和一对一方法中,尽管每一个两类分类器的泛化误差限是知道的,但是合起来做多类分类时,误差上界是未知的。现在DAG方法根节点的选取(如何选第一个参与分类的分类器),也有方法改善整体效果,需要第一次分类的两个类别,差别大到不太可能分错;或者取在两类分类中正确率最高的那个分类器作根节点,或让两类分类器在分类时,不光输出类别标签,也输出类似的“置信度”,结果不太可信的时,将旁边的那条路也走一遍等。

九、SVM的计算复杂度

使用SVM进行分类时,实际上是训练和分类,两个完全不同的过程,这里所说的主要是训练阶段的复杂度,即解那个二次规划问题的复杂度。对这个问题的解,基本上要划分为两大块,解析解和数值解。

解析解就是理论上的解,它的形式是表达式,因此它是精确的,一个问题只要有解,那它的解析解是一定存在的。对SVM来说,求得解析解的时间复杂度最坏可

以达到O(N

sv 3),其中N

sv

是支持向量的个数,而虽然没有固定的比例,但支持向

量的个数多少也和训练集的大小有关。

数值解就是可以使用的解,是一个一个的数,往往都是近似解。求数值解的过程像穷举法,从一个数开始,试一试它当解效果怎样,不满足一定条件(叫做停机条件,就是满足这个以后就认为解足够精确了,不需要继续算下去)就试下一个,当然下一个数不是乱选的,也有一定章法可循。有的算法,每次只尝试一个数,有的就尝试多个,而且找下一个数字(或下一组数)的方法也各不相同,停机条

件也各不相同,最终得到的解精度也各不相同,可见对求数值解的复杂度的讨论不能脱开具体的算法。

一个具体的算法:Bunch-Kaufman训练算法,典型的时间复杂度在

O(N

sv 3+LN

sv

2+dLN

sv

)和O(dL2)之间,其中N

sv

是支持向量的个数,L是训练集样本的

个数,d是每个样本的维数(原始的维数,没有经过向高维空间映射之前的维数)。复杂度会有变化,是因为它不光跟输入问题的规模有关(不光和样本的数量,维数有关),也和问题最终的解有关(即支持向量有关),如果支持向量比较少,过程会快很多,如果支持向量很多,接近于样本的数量,就会产生O(dL2)这个糟糕的结果(给10,000个样本,每个样本1000维,基本就不用算了,但这种输入规模对文本分类来说太正常)。

(完整版)支持向量机(SVM)原理及应用概述

支持向量机(SVM )原理及应用 一、SVM 的产生与发展 自1995年Vapnik (瓦普尼克)在统计学习理论的基础上提出SVM 作为模式识别的新方法之后,SVM 一直倍受关注。同年,Vapnik 和Cortes 提出软间隔(soft margin)SVM ,通过引进松弛变量i ξ度量数据i x 的误分类(分类出现错误时i ξ大于0),同时在目标函数中增加一个分量用来惩罚非零松弛变量(即代价函数),SVM 的寻优过程即是大的分隔间距和小的误差补偿之间的平衡过程;1996年,Vapnik 等人又提出支持向量回归 (Support Vector Regression ,SVR)的方法用于解决拟合问题。SVR 同SVM 的出发点都是寻找最优超平面(注:一维空间为点;二维空间为线;三维空间为面;高维空间为超平面。),但SVR 的目的不是找到两种数据的分割平面,而是找到能准确预测数据分布的平面,两者最终都转换为最优化问题的求解;1998年,Weston 等人根据SVM 原理提出了用于解决多类分类的SVM 方法(Multi-Class Support Vector Machines ,Multi-SVM),通过将多类分类转化成二类分类,将SVM 应用于多分类问题的判断:此外,在SVM 算法的基本框架下,研究者针对不同的方面提出了很多相关的改进算法。例如,Suykens 提出的最小二乘支持向量机 (Least Square Support Vector Machine ,LS —SVM)算法,Joachims 等人提出的SVM-1ight ,张学工提出的中心支持向量机 (Central Support Vector Machine ,CSVM),Scholkoph 和Smola 基于二次规划提出的v-SVM 等。此后,台湾大学林智仁(Lin Chih-Jen)教授等对SVM 的典型应用进行总结,并设计开发出较为完善的SVM 工具包,也就是LIBSVM(A Library for Support Vector Machines)。LIBSVM 是一个通用的SVM 软件包,可以解决分类、回归以及分布估计等问题。 二、支持向量机原理 SVM 方法是20世纪90年代初Vapnik 等人根据统计学习理论提出的一种新的机器学习方法,它以结构风险最小化原则为理论基础,通过适当地选择函数子集及该子集中的判别函数,使学习机器的实际风险达到最小,保证了通过有限训练样本得到的小误差分类器,对独立测试集的测试误差仍然较小。 支持向量机的基本思想:首先,在线性可分情况下,在原空间寻找两类样本的最优分类超平面。在线性不可分的情况下,加入了松弛变量进行分析,通过使用非线性映射将低维输

支持向量机(SVM)简明学习教程

支持向量机(SVM )简明学习教程 一、最优分类超平面 给定训练数据),(,),,(11l l y x y x ,其中n i R x ∈,}1,1{-∈i y 。 若1=i y ,称i x 为第一类的,I ∈i x ;若1-=i y ,称i x 为第二类的,II ∈i x 。 若存在向量?和常数b ,使得?????II ∈<-I ∈>-i i T i i T x if b x x if b x ,0,0?? (1),则该训练集可被超平面 0=-b x T ?分开。 (一)、平分最近点法 求两个凸包集中的最近点d c ,',做d c ,'的垂直平分面x ,即为所求。 02 )(2 22 2 =-- -?-=-d c x d c x d x c T ,则d c -=?,2 ) ()(d c d c b T +-= 。 求d c ,,?? ?? ?≥==≥==∑∑∑∑-=-===. 0,1, . 0,1,1 111 i y i y i i i y i y i i i i i i x d x c αα ααα α

所以2 1 1 2 ∑∑-==-= -i i y i i y i i x x d c αα,只需求出最小的T l ),,(1ααα =。 算法:1)求解. 0,1,1..2121min 1 1 2 12 11≥===-∑∑∑∑∑-===-==i y i y i l i i i i y i i y i i i i i i t s x y x x αααααα;2)求最优超平面0=-b x T ?。 (二)、最大间隔法 附加条件1=?,加上(1)式。记C x C i T x i >=I ∈??min )(1,C x C i T x i <=II ∈??max )(2。 使?????II ∈<-I ∈>-=-= i i T i i T x if b x x if b x t s C C ,0,0,1..2 ) ()()(max 21??????ρ (2) 可以说明在(2)下可以得到一个最优超平面,且该超平面是唯一的。 如何快速生成一个最优超平面??? 考虑等价问题:求权向量w 和b ,使?????II ∈-<-I ∈>-i i T i i T x if b x w x if b x w ,1,1,且?最小。 这种写法已经包含最大间隔。 事实上b C C C x if C b x w x if C b x w i i T i i T =+=??????II ∈=+-))()((21),(1),(121021????中心,而w w =?, 故w b C = ,w C C 1 2)()()(21=-=???ρ。 所以(2)式可以转化为求解: 1 )(..min ≥-b x w y t s w i T i (3) 总结,求最优超平面,只需求解: 1 )(..2 1)(min ≥-= Φb x w y t s w w w i T i T (QP1) 对(QP1)构造lagrange 函数: 令∑=---=l i i T i i b x w y w b w L 1 2]1)([21),,(αα,其中0),,(1≥=T l ααα 为lagrange 乘子。 下求L 的鞍点:

支持向量机(SVM)的实现

模式识别课程大作业报告——支持向量机(SVM)的实现 : 学号: 专业: 任课教师: 研究生导师:

容摘要 支持向量机是一种十分经典的分类方法,它不仅是模式识别学科中的重要容,而且在图像处理领域中得到了广泛应用。现在,很多图像检索、图像分类算法的实现都以支持向量机为基础。本次大作业的容以开源计算机视觉库OpenCV 为基础,编程实现支持向量机分类器,并对标准数据集进行测试,分别计算出训练样本的识别率和测试样本的识别率。 本报告的组织结构主要分为3大部分。第一部分简述了支持向量机的原理;第二部分介绍了如何利用OpenCV来实现支持向量机分类器;第三部分给出在标准数据集上的测试结果。

一、支持向量机原理概述 在高维空间中的分类问题实际上是寻找一个超平面,将两类样本分开,这个超平面就叫做分类面。两类样本中离分类面最近的样本到分类面的距离称为分类间隔。最优超平面指的是分类间隔最大的超平面。支持向量机实质上提供了一种利用最优超平面进行分类的方法。由最优分类面可以确定两个与其平行的边界超平面。通过拉格朗日法求解最优分类面,最终可以得出结论:实际决定最优分类面位置的只是那些离分类面最近的样本。这些样本就被称为支持向量,它们可能只是训练样本中很少的一部分。支持向量如图1所示。 图1

图1中,H是最优分类面,H1和H2别是两个边界超平面。实心样本就是支持向量。由于最优超平面完全是由这些支持向量决定的,所以这种方法被称作支持向量机(SVM)。 以上是线性可分的情况,对于线性不可分问题,可以在错分样本上增加一个惩罚因子来干预最优分类面的确定。这样一来,最优分类面不仅由离分类面最近的样本决定,还要由错分的样本决定。这种情况下的支持向量就由两部分组成:一部分是边界支持向量;另一部分是错分支持向量。 对于非线性的分类问题,可以通过特征变换将非线性问题转化为新空间中的线性问题。但是这样做的代价是会造成样本维数增加,进而导致计算量急剧增加,这就是所谓的“维度灾难”。为了避免高维空间中的计算,可以引入核函数的概念。这样一来,无论变换后空间的维数有多高,这个新空间中的线性支持向量机求解都可以在原空间通过核函数来进行。常用的核函数有多项式核、高斯核(径向基核)、Sigmoid函数。 二、支持向量机的实现 OpenCV是开源计算机视觉库,它在图像处理领域得到了广泛应用。OpenCV中包含许多计算机视觉领域的经典算法,其中的机器学习代码部分就包含支持向量机的相关容。OpenCV中比较经典的机器学习示例是“手写字母分类”。OpenCV中给出了用支持向量机实现该示例的代码。本次大作业的任务是研究OpenCV中的支持向量机代码,然后将其改写为适用于所有数据库的通用程序,并用标准数据集对算法进行测试。本实验中使用的OpenCV版本是2.4.4,实验平台为Visual Studio 2010软件平台。 OpenCV读取的输入数据格式为“.data”文件。该文件记录了所有数据样

SVM支持向量机

SVM 支持向量机 目录 一、简介 (1) 二、线性分类器 (3) 三、分类间隔指标 (4) 四、线性分类器的求解 (8) 五、核函数 (9) 六、松弛变量 (11) 七、惩罚因子C (15) 八、SVM用于多类分类 (17) 九、SVM的计算复杂度 (19) 一、简介 支持向量机在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。 支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础 上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力)。 以下逐一分解并解释一下:统计机器学习之所以区别于传统机器学习的本质,就在于统计机器学习能够精确的给出学习效果,能够解答需要的样本数等等一系列问题。与统计机器学习的精密思维相比,传统的机器学习基本上属于摸着石头过河,用传统的机器学习方法构造分类系统是一种技巧,一个人做的结果可能很好,另一个人差不多的方法做出来却很差,缺乏指导和原则。 VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。SVM关注的是VC维,和样本的维数是无关(甚至样本可以是上万维的,这使得SVM很适合用于解决文本分类的问题,也因此引入了核函数)。 结构风险最小:机器学习本质上就是对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型作为假设),而真实模型是未知的。假设与问题真实解之间的误差,叫做风险(更严格的说,误差的累积叫做风险)。我们选择了一个假设(即分类器)之后,我们可以用某些可以掌握的量来逼近误差,最直观的方法就是使用分类器在样本数据上的分类的结果与真实结果(样本是已标注过的数据,即准确的数据)之间的差值来表示。这个差值叫做经验风险Remp(w)。

机器学习SVM(支持向量机)实验报告

. . 实验报告 实验名称:机器学习:线性支持向量机算法实现 学员:张麻子学号: *********** 培养类型:硕士年级: 专业:所属学院:计算机学院 指导教员: ****** 职称:副教授 实验室:实验日期:

. . 一、实验目的和要求 实验目的:验证SVM(支持向量机)机器学习算法学习情况 要求:自主完成。 二、实验内容和原理 支持向量机(Support V ector Machine, SVM)的基本模型是在特征空间上找到最 佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法。通过引入了核方法之后SVM也可以用来解决非线性问题。 但本次实验只针对线性二分类问题。 SVM算法分割原则:最小间距最大化,即找距离分割超平面最近的有效点距离超平面距离和最大。 对于线性问题: w T x+b=0 假设存在超平面可最优分割样本集为两类,则样本集到超平面距离为: ρ = min{|w T x+b| ||w|| }= a ||w|| 需压求取: max a ||w|| s.t. y i(w T x+b)≥a 由于该问题为对偶问题,可变换为: min 1 2 ||w||2 s.t. y i(w T x+b)≥1 可用拉格朗日乘数法求解。 但由于本实验中的数据集不可以完美的分为两类,即存在躁点。可引入正则化参数C,用来调节模型的复杂度和训练误差。

. . min 1 2||w||2+C ∑εi s.t. y i (w T x +b)≥1?εi , εi >0 作出对应的拉格朗日乘式: 对应的KKT条件为: 故得出需求解的对偶问题: {min 1∑∑αi αj y i y j (x i T x j )?∑αi s.t. ∑αi y j = 0 , C≥αi ≥0, 本次实验使用python 编译器,编写程序,数据集共有270个案例,挑选其中70%作为训练数据,剩下30%作为测试数据。进行了两个实验,一个是取C值为1,直接进行SVM训练;另外一个是利用交叉验证方法,求取在前面情况下的最优C值。 三、实验器材 实验环境:windows7操作系统+python 编译器。

支持向量机SVM原理及应用概述

东北大学 研究生考试试卷 考试科目:信号处理的统计分析方法 课程编号:09601513 阅卷人: 刘晓志 考试日期:2012年11月07日 姓名:赵亚楠 学号:1001236 注意事项 1.考前研究生将上述项目填写清楚. 2.字迹要清楚,保持卷面清洁. 3.交卷时请将本试卷和题签一起上交. 4.课程考试后二周内授课教师完成评卷工作,公共课成绩单与试卷交研究生院培养办公室, 专业课成绩单与试卷交各学院,各学院把成绩单交研究生院培养办公室. 东北大学研究生院培养办公室

目录 一、SVM的产生与发展3 二、支持向量机相关理论4 (一)统计学习理论基础4 (二)SVM原理4 1.最优分类面和广义最优分类面5 2.SVM的非线性映射7 3.核函数8 三、支持向量机的应用研究现状9(一)人脸检测、验证和识别9(二)说话人/语音识别10 (三)文字/手写体识别10 (四)图像处理11 (五)其他应用研究11 四、结论和讨论12

一、SVM 的产生与发展 自1995年Vapnik 在统计学习理论的基础上提出SVM 作为模式识别的新方法之后,SVM 一直倍受关注。同年,Vapnik 和Cortes 提出软间隔(soft margin)SVM ,通过引进松弛变量i ξ度量数据i x 的误分类(分类出现错误时i ξ大于0),同时在目标函数中增加一个分量用来惩罚非零松弛变量(即代价函数),SVM 的寻优过程即是大的分隔间距和小的误差补偿之间的平衡过程;1996年,Vapnik 等人又提出支持向量回归 (Support Vector Regression ,SVR)的方法用于解决拟合问题。SVR 同SVM 的出发点都是寻找最优超平面,但SVR 的目的不是找到两种数据的分割平面,而是找到能准确预测数据分布的平面,两者最终都转换为最优化问题的求解;1998年,Weston 等人根据SVM 原理提出了用于解决多类分类的SVM 方法(Multi-Class Support VectorMachines ,Multi-SVM),通过将多类分类转化成二类分类,将SVM 应用于多分类问题的判断:此外,在SVM 算法的基本框架下,研究者针对不同的方面提出了很多相关的改进算法。例如,Suykens 提出的最小二乘支持向量机 (Least Square Support VectorMachine ,LS —SVM)算法,Joachims 等人提出的SVM-1ight ,张学工提出的中心支持向量机 (Central Support Vector Machine ,CSVM),Scholkoph 和Smola 基于二次规划提出的v-SVM 等。此后,台湾大学林智仁(Lin Chih-Jen)教授等对SVM 的典型应用进行总结,并设计开发出较为完善的SVM 工具包,也就是LIBSVM(A Library for Support Vector Machines)。上述改进模型中,v-SVM 是一种软间隔分类器模型,其原理是通过引进参数v ,来调整支持向量数占输入数据比例的下限,以及参数ρ来度量超平面偏差,代替通常依靠经验选取的软间隔分类惩罚参数,改善分类效果;LS-SVM 则是用等式约束代替传统SVM 中的不等式约束,将求解QP 问题变成解一组等式方程来提高算法效率;LIBSVM 是一个通用的SVM 软件包,可以解决分类、回归以及分布估计等问题,它提供常用的几种核函数可由用户选择,并且具有不平衡样本加权和多类分类等功能,此外,交叉验证(cross validation)方法也是LIBSVM 对核函数参数选取问题所做的一个突出贡献;SVM-1ight 的特点则是通过引进缩水(shrinking)逐步简化QP 问题,以及缓存(caching)技术降低迭代运算的计算代价来解决大规模样本条件下SVM 学习的复杂性问题。

SVM支持向量机题目

机器学习课程作业(1) 提交截止日期:2017年10月10日周二 1. 一个优化问题的原问题(Prime Problem )与对偶问题(Dual Problem )定义如下: 原问题 Minimize: ()f ω Subject to: ()0,1,2,...,i g i K ω≤= ()0,1,2,...,i h i M ω== 对偶问题 定义 ()()()()()()()11,,K M T T i i i i i i L f g h f g h ωαβωαωβωωαωβω===++=++∑∑ 对偶问题为: Maximize: ()(),inf ,,L ωθαβωαβ= Subject to: 0,1,2,...,i i K α≥= (a) 证明:如果*ω是原问题的解,*α,*β是对偶问题的解,则有:()()***,f ωθαβ≥ (b) 证明 (强对偶定理):如果()g A b ωω=+,()h C d ωω=+,且()f ω为凸函数,即对任意1ω和2ω,有()()()()()121211f f f λωλωλωλω+-≤+-, 则有:()()*** ,f ωθαβ= 2. 求下列原问题的对偶问题 (a) (1l and 2l -norm SVM Classification) : Minimize: 221211 12N N i i i i C C ωδδ==++∑∑ Subject to: 0,1,2,...,i i N δ≥= ()1T i i i y x b ω?δ??+≥-??

(b) (SVM regression): Minimize: ()()2221211 12N N i i i i i i C C ωδζδζ==++++∑∑ Subject to: (),1,2,...,T i i i x b y i N ω?εδ+-≤+= (),1,2,...,T i i i y x b i N ω?εζ--≤+= 0i δ≥, 0i ζ≥ (c) (Kernel Ridge Regression): Minimize: 221 12N i i C ωδ=+∑ Subject to: (),1,2,...,T i i i y x i N ω?δ-== (d) (Entropy Maximization Problem): Minimize: ()1log N i i i x x =∑ Subject to: T x b ω≤ 11N i i x ==∑ 3. 如图所示,平面上有N 个点12{,,...,}N x x x ,求一个半径最小的圆,使之能包含这些点。 图1. 平面上N 个点,求最小的圆包含这些点。 (a) 写出这个优化问题的数学表达式。 (b) 写出(a)的对偶问题。 (c) 编写程序求解这个问题(选做)

相关主题
相关文档
最新文档