SVM算法推导及其分类的算法实现

SVM算法推导及其分类的算法实现
SVM算法推导及其分类的算法实现

SVM算法推导及其分类的算法实现

摘要:本文从线性分类问题开始逐步的叙述支持向量机思想的形成,并提供相应的推导过程。简述核函数的概念,以及kernel在SVM算法中的核心地位。介绍松弛变量引入的SVM算法原因,提出软间隔线性分类法。概括SVM分别在一对一和一对多分类问题中应用。基于SVM在一对多问题中的不足,提出SVM 的改进版本DAG SVM。

Abstract:This article begins with a linear classification problem, Gradually discuss formation of SVM, and their derivation. Description the concept of kernel function, and the core position in SVM algorithm. Describes the reasons for the introduction of slack variables, and propose soft-margin linear classification. Summary the application of SVM in one-to-one and one-to-many linear classification. Based on SVM shortage in one-to-many problems, an improved version which called DAG SVM was put forward.

关键字:SVM、线性分类、核函数、松弛变量、DAG SVM

1. SVM的简介

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力。

对于SVM的基本特点,小样本,并不是样本的绝对数量少,而是与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。非线性,是指SVM擅长处理样本数据线性不可分的情况,主要通过松弛变量和核函数实现,是SVM 的精髓。高维模式识别是指样本维数很高,通过SVM建立的分类器却很简洁,只包含落在边界上的支持向量。

2. 线性分类器及其求解

线性分类器,是最简单也很有效的分类器形式。在一个线性分类器中,可以看到SVM 形成的思路,并接触很多SVM 的核心概念。

用一个二维空间里仅有两类样本的分类问题来举例。如图1所示

图1 两类样本分类

C1和C2是要区分的两个类别,在二维平面中它们的样本如图1所示。中间的直线就是一个分类函数,它可以将两类样本完全分开。一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。

很容易看出来,图1中间那条分界线并不是唯一的,旋转一下,只要不把两类数据分错,仍然可以达到分类的效果,稍微平移一下,也可以。对同一个问题存在多个分类函数的时候,哪一个函数更好呢?必须要先找一个指标来量化“好”的程度,通常使用分类间隔来衡量。设平面中的直线方程为:

(x)wx b g =+ (1) 设i x 是一个有某一对象抽取出的n 维向量,i y 为分类标记,则可以定义点到某一超平面的间隔:

(w b)i i y x δ=+

(2) 用||||w w 和||||

b w 替代(2)式中的w 和b 得: 1|(x )|||||i i g w δ= (3)

将(3)式得到的间隔称为几何间隔,几何间隔所表示的正是点到超平面的欧氏距离,以上是单个点到某个超平面的距离定义,同样可以定义一个点的集合(就是一组样本)到某个超平面的距离为此集合中离超平面最近的点的距离。图2更加直观的展示出了几何间隔的含义。

图2 分割超平面

图2中,H 是分类面,H1和H2是平行于H ,且过离H 最近的两类样本的直线,H1与H ,H2与H 之间的距离就是几何间隔。几何间隔与样本的误分次数间存在关系:

2

2()R δ≤误差分数

其中的δ是样本集合到分类面的间隔,max ||x ||,i 1,...,n i R ==,即R 是所有样本中向量长度最长的值。从上式可以看出,误分次数的上界由几何间隔决定。因此选择几何间隔来作为评价一个解优劣的指标,几何间隔越大的解,它的误差上界越小。因此最大化几何间隔成了我们训练阶段的目标。

从(3)式可知,几何间隔与||w||是成反比的,因此最大化几何间隔与最小化||w||等价。通常不是固定||w||的大小而寻求最大几何间隔,而是固定间隔(例如固定为1),寻找最小的||w||。

此时变成一个最优化问题,若想寻找一个小||w||,就可以用下面的式子表示:

min ||||w

但实际上对于这个目标,常常使用另一个完全等价的目标函数来代替,如下:

2

1min ||||2w

如果直接来解这个求最小值问题,很容易看出当||w||=0的时候就得到了目标函数的最小值。反映在图2中,就是1H 与2H 两条直线间的距离无限大,这个时候,所有的样本点都位于1H 和2H 中间,而我们原本的意图是,1H 右侧的被分为正类,2H 左侧的被分为负类,位于两类中间的样本则拒绝分类。这样,所有样本点都进入了无法分类的灰色地带。造成这种结果的原因是在描述问题的时候只考虑了目标,而没有加入约束条件,于是可以添加约束条件:

[()b]1(i 1,2,...,n)i i y w x ?+≥=(n 是总的样本数)

于是可以将两类分类转化成数学形式,如下:

21min ||||2[()b]-10(i 1,2,...,n)i i w y w x ?????+≥=? (4)

在这个问题中,自变量就是w ,而目标函数是w 的二次函数,所有的约束条件都是w 的线性函数,这种规划问题就是二次规划(Quadratic Programming ,QP ),由于它的可行域是一个凸集,因此它是一个凸二次规划。

样本确定了w ,用数学的语言描述,就是w 可以表示为样本的某种组合:

1122n n w x x x ααα=++?+ (5)

式子中的i α是拉格朗日乘子,而i x 是样本点,也是向量,n 就是总样本点的个数。为了方便描述,以下开始严格区别数字与向量的乘积和向量间的乘积,我会用i i x α表示数字和向量的乘积,而用,i j x x <>表示向量,i j x x 的内积。因此(1)式严格的形式应该是:

(x ),g w x =<>+ (6)

w 不仅跟样本点的位置有关,还跟样本的类别有关。因此用下面这个式子表示w :

121122n n n w x x y x y y ααα=++?+ (7)

其中的i y 就是第i 个样本的标签,它等于1或者-1。其实以上式子的拉格朗日乘子12,,,n ααα?中,只有很少的一部分不等于0,这部分不等于0的拉格朗日乘子后面所乘的样本点,其实都落在1H 和2H 上,也正是这部分样本唯一的确定了分类函数。这部分可以确定分类的样本点,就叫做支持向量。因此原来的g(x)表达式可以写为:

1(x),b

(),n i i i i g w x y x x b

α==<>+=<>+∑, (8)

其中,1()

n i i i i w y x α==∑上式可以变形为:

1(x ),n i i i i g y x x b

α==<>+∑ (9)

此时消去了上式中的w ,问题从求w 变成了求α。这样就简化了原问题的求解,以这样的形式描述问题以后,优化问题少了很大一部分不等式约束。接下来看看 SVM 在线性分类器上所做的重大改进——核函数。

3. SVM 中的核函数

根据模式识别理论,低维空间线性不可分的模式通过非线性映射到高维特征空间则可能实现线性可分,但是如果直接采用这种技术在高维空间进行分类或回归,则存在确定非线性映射函数的形式和参数、特征空间维数等问题,而最大的障碍则是在高维特征空间运算时存在的“维数灾难”。采用核函数技术可以有效地解决这样问题。

如图3所示,当分类问题在低纬空间无法用线性分类方法解决时,可以通过

φ将低纬空间的数据映射到高纬特征空间中,从而达到线性可分的目的。

图3 低纬度向高纬度空间映射

从低纬度向高纬度转化关键在于寻在一个φ函数,但对目前没有一个系统的方法。对映射过程推导如下:

12121231232222112211222222

11121222211222

(,),(,)(,,),(,,)(,),(,)2()

(,)(,)T T T T T T T

T

T T T

T

T T T T T x x x x z z z z z z x x x x x x x x x x x x x x x x x x x x K x x φφ<>=<>

=<>

=++=+=<>= (10)

从上式可以得出,我们只关心高维空间里内积的值,而核函数就是接受低空间的输入,并计算出在高纬空间的内积值。(,)T K x x ,就是我们要找的核函数。如图4

图4 在映射过程中的核函数

于是上式,可以表示为1(x)(,)n i i i i g y K x x b

α==+∑。尽管给的问题是线性不可

分的,但凡是要求内积的时候我们就选定的核函数来算。这样求出来的α再和你选定的核函数一组合,就可以得到线性分类器。但是任然存在以下两个问题:

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

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

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

对第二个问题的解决则引出了SVM 中的另一个概念:松弛变量。

4. SVM 中的松弛变量

假设有另一个训练集,只比原先这个训练集多了一个样本,映射到高维空间以后,也就多了一个样本点,但是这个样本的位置是这样的,如图5:

图5 新增加了一个样本后分类的结果

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

对于人类思维,在大量的样本基础上,可能会认为图5中的黄点是错误的,是噪声,会自动的剔除掉。人的思维对于噪声数据具有容错性,可程序没有。由于我们原本的优化问题的表达式中,确实要考虑所有的样本点,在此基础上寻找正负类之间的最大几何间隔,而几何间隔本身代表的是距离,是非负的,像上面这种有噪声的情况会使得整个问题无解。这种解法其实也叫做“硬间隔”分类法,因为他硬性的要求所有样本点都满足和分类平面间的距离必须大于某个值。说明硬间隔的分类法其结果容易受少数点的控制。

针对硬间隔的问题,解决方法也很明显,就是仿照人的思路,允许一些点到分类平面的距离不满足原先的要求。由于不同的训练集各点的间距尺度不太一样,因此用间隔(而不是几何间隔)来衡量有利于我们表达形式的简洁。原先对样本点的要求是:

[()]1(1,2,...,)()i i y wx b i n n +≥=是样本数 (11) 该式说明,离分类面最近的样本点函数间隔也要比1大。如果要引入容错性,就给1这个硬性的阈值加一个松弛变量,即允许:

[()]1(1,2,...,)()

0i i i i y wx b i n n ξξ+≥-=≥是样本数 (12)

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

21min ||||2..[()b]-10(i 1,2,...,n)i i w S T y w x ?????+≥=? (13)

2||||w 就是目标函数,希望它越小越好,因而损失就必然是一个能使之变大的量。那如何来衡量损失,有两种常用的方式,

或者

两种方法没有大的区别。如果选择了第一种,得到的方法的就叫做二阶软间隔分类器,第二种就叫做一阶软间隔分类器。把损失加入到目标函数里的时候,就需要一个惩罚因子,原来的优化问题就变成了下面这样:

21min ||||2..[()b]1(i 1,2,...,n)0i i i i w S T y w x ζζ????+≥-=??≥??

(14)

这个式子有这么几点要注意:

一是并非所有的样本点都有一个松弛变量与其对应。实际上只有“离群点”才有,没离群的点松弛变量都等于0。

二是松弛变量的值实际上标示出了对应的点到底离群有多远,值越大,点就越远。

三是惩罚因子C 决定了你有多重视离群点带来的损失,显然当所有离群点的松弛变量的和一定时,定的C 越大,对目标函数的损失也越大,此时就暗示着不愿意放弃这些离群点,最极端的情况是你把C 定为无限大,这样只要稍有一

个点离群,目标函数的值马上变成无限大,马上让问题变成无解,这就退化成了硬间隔问题。

四是惩罚因子C不是一个变量,整个优化问题在解的时候,C是一个你必须事先指定的值。

五是尽管加了松弛变量这么一说,但这个优化问题仍然是一个优化问题,解的过程比起原始的硬间隔问题来说,没有任何更加特殊的地方。

从大的方面说优化问题解的过程,就是先试着确定一下w,也就是确定了前面图中的三条直线,这时看看间隔有多大,又有多少点离群,把目标函数的值算一算,再换一组三条直线,再把目标函数的值算一算,如此往复(迭代),直到最终找到目标函数最小时的w。

松弛变量也就是个解决线性不可分问题的方法罢了,核函数的引入不也是为了解决线性不可分的问题么?为什么要为了一个问题使用两种方法呢?

其实两者还有微妙的不同。一般的情况下,在原始的低维空间中,样本相当的不可分,无论怎么找分类平面,总会有大量的离群点,此时用核函数向高维空间映射一下,虽然结果仍然是不可分的,但比原始空间里的要更加接近线性可分的状态,此时再用松弛变量处理那些少数“冥顽不化”的离群点,就简单有效得多了。至此一个比较完整的支持向量机框架就有了,简单说来,支持向量机就是使用了核函数的软间隔线性分类法。

5.惩罚因子和数据偏斜

偏斜问题,也叫数据集偏斜(unbalanced),它指的是参与分类的两个类别(也可以指多个类别)样本数量差异很大。比如说正类有10,000个样本,而负类只给了100个,这会引起的问题显而易见,如图7:

图6 数据集偏斜现象

方形的点是负类。H ,H1,H2是根据给的样本算出来的分类面,由于负类的样本很少很少,所以有一些本来是负类的样本点没有提供,比如图7中两个灰色的方形点,如果这两个点有提供的话,那算出来的分类面应该是H’,H2’和H1,他们显然和之前的结果有出入,实际上负类给的样本点越多,就越容易出现在灰色点附近的点,算出的结果也就越接近于真实的分类面。但现在由于偏斜的现象存在,使得数量多的正类可以把分类面向负类的方向“推”,因而影响了结果的准确性。解决数据集偏斜问题的方法之一就是在惩罚因子上作文章,那就是给样本数量少的负类更大的惩罚因子,表示我们重视这部分样本,因此我们的目标函数中因松弛变量而损失的部分就变成了:

110

P P i j i j p i C C ζζζ+-

==++≥∑∑ (15) 其中i=1…p 都是正样本,j=p+1…p+q 都是负样本。那C +和C -怎么确定呢?它

们的大小是试出来的(参数调优),但是他们的比例可以有些方法来确定。但是这样并不够好,如图6,发现正类之所以可以“欺负”负类,其实并不是因为负类样本少,真实的原因是负类的样本分布的不够广(没扩充到负类本应该有的区域)。比如,现在想给政治类和体育类的文章做分类,政治类文章很多,而体育类只提供了几篇关于篮球的文章,这时分类会明显偏向于政治类,如果要给体育类文章增加样本,但增加的样本仍然全都是关于篮球的。虽然体育类文章在数量

上可以达到与政治类一样多,但过于集中了,结果仍会偏向于政治类!所以给C

+确定比例更好的方法应该是衡量他们分布的程度。比如可以算算他们在空和C

-

间中占据了多大的体积,例如给负类找一个超球,它可以包含所有负类的样本,再给正类找一个超球,比比两个球的半径,就可以大致确定分布的情况。显然半径大的分布就比较广,就给小一点的惩罚因子。

6.SVM的改进DAG SVM

SVM是一种典型的两类分类器,而现实中要解决的问题,往往是多类的问题,比如文本分类,数字识别。如何由两类分类器得到多类分类器,就是一个值得研究的问题。以文本分类为例,现成的方法有很多,其中一种一劳永逸的方法,就是真的一次性考虑所有样本,并求解一个多目标函数的优化问题,一次性得到多个分类面,就像下图这样:

图7 对任意两个类构建一个分类器

多个超平面把空间划分为多个区域,每个区域对应一个类别,给一篇文章,看它落在哪个区域就知道了它的分类。这样一次性求解的方法计算量实在太大,大到无法实用的地步。

“一类对其余”的方法,就是每次仍然解一个两类分类的问题。比如有5个类别,第一次就把类别1的样本定为正样本,其余2,3,4,5的样本合起来定为负样本,这样得到一个两类分类器,它能够指出一篇文章是还是不是第1类的;第二次我们把类别2 的样本定为正样本,把1,3,4,5的样本合起来定

为负样本,得到一个分类器,如此下去,可以得到5个这样的两类分类器。这种方法的好处是每个优化问题的规模比较小,而且分类的时候速度很快。但有时也会出现两种很尴尬的情况,例如拿一篇文章每一个分类器都说它是属于它那一类的,或者每一个分类器都说它不是它那一类的,前者叫分类重叠现象,后者叫不可分类现象。对于分类重叠倒,随机选一个结果都不至于太离谱,或者看看这篇文章到各个超平面的距离,哪个远就判给哪个。不可分类现象就着实难办了,只能把它分给第6个类别了,本来各个类别的样本数目是差不多的,但“其余”的那一类样本数总是要数倍于正类,这就人为的造成了“数据集偏斜”问题。

再退一步,还是解两类分类问题,还是每次选一个类的样本作正类样本,而负类样本则变成只选一个类,这就避免了偏斜。因此过程就是算出这样一些分类器,第一个只回答“是第1类还是第2类”,第二个只回答“是第1类还是第3类”,第三个只回答“是第1类还是第4类”,如此下去,可以马上得出,这样的分类器应该有5 X 4/2=10个。虽然分类器的数目多了,但是在训练阶段所用的总时间却比“一类对其余”方法少很多,在真正用来分类的时候,把一篇文章扔给所有分类器,第一个分类器会投票说它是“1”或者“2”,第二个会说它是“1”或者“3”,让每一个都投上自己的一票,最后统计票数,如果类别“1”得票最多,就判这篇文章属于第1类。这种方法显然也会有分类重叠的现象,但不会有不可分类现象,因为总不可能所有类别的票数都是0。这还是类别数为5的时候,类别数如果是1000,要调用的分类器数目会上升至约500,000个。

再退一步,还是像一对一方法那样来训练,只是在对一篇文章进行分类之前,先按照图8的样子来组织分类器

图8 DAG SVM训练方法

这样在分类时,就可以先问分类器“1对5”,如果它回答5,就往左走,再问“2对5”这个分类器,如果它还说是“5”,就继续往左走,这样一直问下去,就可以得到分类结果。优点是,只调用了4个分类器,分类速度快,且没有分类重叠和不可分类现象!缺点是,假如最一开始的分类器回答错误,那么后面的分类器是无论如何也无法纠正它的错误的,其实对下面每一层的分类器都存在这种错误向下累积的现象。DAG方法好于它们的地方就在于,累积的上限,不管是大是小,总是有定论的,有理论证明。而一对其余和一对一方法中,尽管每一个两类分类器的泛化误差限是知道的,但是合起来做多类分类的时候,误差上界是多少,无法知道,这意味着准确率低到0也是有可能的。而且现在DAG方法根节点的选取,也有一些方法可以改善整体效果,我们总希望根节点少犯错误为好,因此参与第一次分类的两个类别,最好是差别特别特别大,大到以至于不太可能把他们分错;或者就总取在两类分类中正确率最高的那个分类器作根节点,或者我们让两类分类器在分类的时候,不光输出类别的标签,还输出一个类似“置信度”等。

参考文献

[1]. Bahlmann C, Haasdonk B, Burkhardt H. Online handwriting recognition with support vector machines-a kernel approach[C]//Frontiers in Handwriting Recognition, 2002. Proceedings. Eighth International Workshop on. IEEE, 2002: 49-54.

[2]. Mandel M I, Ellis D P W. Song-level features and support vector machines for music classification[C]//ISMIR 2005: 6th International Conference on Music Information Retrieval: Proceedings: Variation 2: Queen Mary, University of London & Goldsmiths College, University of London, 11-15 September, 2005. Queen Mary, University of London, 2005: 594-599.

[3]. Chen P, Liu S. An improved dag-svm for multi-class classification[C]//Natural Computation, 2009. ICNC'09. Fifth International Conference on. IEEE, 2009, 1: 460-462.

[4]. Xuegong Z. Introduction to statistical learning theory and support vector machines[J]. Acta Automatica Sinica, 2000, 26(1): 32-42.

[5]. Joachims T. Making large scale SVM learning practical[J]. 1999.

[6]. Cristianini N, Shawe-Taylor J. An introduction to support vector machines and other kernel-based learning methods[M]. Cambridge university press, 2000.

[7]. Niebles J C, Wang H, Fei-Fei L. Unsupervised learning of human action categories using spatial-temporal words[J]. International Journal of Computer Vision, 2008, 79(3): 299-318.

[8]. Deselaers T, Pimenidis L, Ney H. Bag-of-visual-words models for adult image classification and filtering[C]//Pattern Recognition, 2008. ICPR 2008. 19th International Conference on. IEEE, 2008: 1-4.

[9]. Bergman S. The kernel function and conformal mapping[M]. AMS Bookstore, 1970.

[10]. Sahami M, Heilman T D. A web-based kernel function for measuring the similarity of short text snippets[C]//Proceedings of the 15th international conference on World Wide Web. ACM, 2006: 377-386.

sklearn SVM算法库小结

scikit-learn 支持向量机算法库使用小结 之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践 的角度对scikit-learn SVM算法库的使用做一个小结。scikit-learn SVM算法库封装了libsvm 和liblinear 的实现,仅仅重写了算法了接口部分。 1. scikit-learn SVM算法库使用概述 scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 3个类。另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 3个类。相关的类都包 裹在sklearn.svm模块之中。 对于SVC, NuSVC,和LinearSVC 3个分类的类,SVC和 NuSVC差不多,区别仅仅在于对 损失的度量方式不同,而LinearSVC从名字就可以看出,他是线性分类,也就是不支持各种低维 到高维的核函数,仅仅支持线性核函数,对线性不可分的数据不能使用。 同样的,对于SVR, NuSVR,和LinearSVR 3个回归的类, SVR和NuSVR差不多,区别也仅仅在于对损失的度量方式不同。LinearSVR是线性回归,只能使用线性核函数。 我们使用这些类的时候,如果有经验知道数据是线性可以拟合的,那么使用LinearSVC 去分类或者LinearSVR去回归,它们不需要我们去慢慢的调参去选择各种核函数以及对应参数, 速度也快。如果我们对数据分布没有什么经验,一般使用SVC去分类或者SVR去回归,这就需要 我们选择核函数以及对核函数调参了。 什么特殊场景需要使用NuSVC分类和 NuSVR 回归呢?如果我们对训练集训练的错误率或者说支持向量的百分比有要求的时候,可以选择NuSVC分类和 NuSVR 。它们有一个参数来控制这个百分比。 这些类的详细使用方法我们在下面再详细讲述。 2. 回顾SVM分类算法和回归算法 我们先简要回顾下SVM分类算法和回归算法,因为这里面有些参数对应于算法库的参数,如果不先复习下,下面对参数的讲述可能会有些难以理解。 对于SVM分类算法,其原始形式是: min12||w||22+C∑i=1mξi min12||w||22+C∑i=1mξi

支持向量机(SVM)算法推导及其分类的算法实现

支持向量机算法推导及其分类的算法实现 摘要:本文从线性分类问题开始逐步的叙述支持向量机思想的形成,并提供相应的推导过程。简述核函数的概念,以及kernel在SVM算法中的核心地位。介绍松弛变量引入的SVM算法原因,提出软间隔线性分类法。概括SVM分别在一对一和一对多分类问题中应用。基于SVM在一对多问题中的不足,提出SVM 的改进版本DAG SVM。 Abstract:This article begins with a linear classification problem, Gradually discuss formation of SVM, and their derivation. Description the concept of kernel function, and the core position in SVM algorithm. Describes the reasons for the introduction of slack variables, and propose soft-margin linear classification. Summary the application of SVM in one-to-one and one-to-many linear classification. Based on SVM shortage in one-to-many problems, an improved version which called DAG SVM was put forward. 关键字:SVM、线性分类、核函数、松弛变量、DAG SVM 1. SVM的简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力。 对于SVM的基本特点,小样本,并不是样本的绝对数量少,而是与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。非线性,是指SVM擅长处理样本数据线性不可分的情况,主要通过松弛变量和核函数实现,是SVM 的精髓。高维模式识别是指样本维数很高,通过SVM建立的分类器却很简洁,只包含落在边界上的支持向量。

SVM分类器原理(分享借鉴)

SVM分类器原理 SVM定义 ?SVM是一种基于统计学习理论的机器学习方法,它是由Boser,Guyon, Vapnik在 COLT-92上首次提出,从此迅速发展起来。 ?Vapnik V N. 1995. The Nature of Statistical Learning Theory. Springer-Verlag, New York. ?Vapnik V N. 1998. Statistical Learning Theory. Wiley-Interscience Publication, John Wiley&Sons, Inc. ?SVM在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势,并能够 推广应用到函数拟合等其他机器学习问题中.目前已经在许多智能信息获取与处理领域都取得了成功的应用。 SVM方法的特点 ?SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的 数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。 ?少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余 样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。这种“鲁棒”性主要体现在: ?①增、删非支持向量样本对模型没有影响; ?②支持向量样本集具有一定的鲁棒性; ?③有些成功的应用中,SVM 方法对核的选取不敏感。 SVM 应用 ?近年来SVM 方法已经在图像识别、信号处理和基因图谱识别等方面得到了成功的 应用,显示了它的优势。 ?SVM 通过核函数实现到高维空间的非线性映射,所以适合于解决本质上非线性的分 类、回归和密度函数估计等问题。 ?支持向量方法也为样本分析、因子筛选、信息压缩、知识挖掘和数据修复等提供了 新工具。 SVM训练算法 ?传统的利用标准二次型优化技术解决对偶问题的方法,是SVM训练算法慢及 受到训练样本集规模制约的主要原因。 ?目前已提出了许多解决方法和改进算法,主要是从如何处理大规模样本集的

SVM分类器设计

SVM分类器设计 1.引言 支撑矢量机(SVM)是90年代中期发展起来的基于统计学习理论的一种机器学习方法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。SVM分类器在推广性和经验误差两方面能达到平衡,是目前比较盛行的分类器。 1.1 什么是SVM分类器 所谓支持向量机,顾名思义,分为两个部分了解,一什么是支持向量,简单来说,就是支持或者是支撑平面上把两类类别划分开来的超平面的向量点;二这里的“机”是什么意思。“机(machine,机器)”便是一个算法。在机器学习领域,常把一些算法看做是一个机器,如分类机(当然,也叫做分类器),而支持向量机本身便是一种监督式学习的方法它广泛的应用于统计分类以及回归分析中。 SVM的主要思想可以概括为两点:⑴它是针对线性可分情况进行分析;(2)对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能。 1.2 SVM分类器的优点和缺点 优点: (1)由于核函数隐含一个复杂映射,经验误差小,因此针对小样本数据利用支持向量能够完成线性或非线性规划问题;推广性和经验误差平衡。 (2)SVM 的最终决策函数只由靠近边界的少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。 (3)少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。这种“鲁棒”性主要体现在:①增、删非支持向量样本对模型没有影响;②支持向量样本集具有一定的鲁棒性; ③有些成功的应用中,SVM 方法对核的选取不敏感 缺点: (1)在训练分类器时 ,SVM的着眼点在于两类的交界部分 ,那些混杂在另一类中的点往往无助于提高分类器的性能 ,反而会大大增加训练器的计算负担 ,同时它们的存在还可能造成过学习 ,使泛化能力减弱 .为了改善支持向量机的泛化能力。 (2)SVM算法对大规模训练样本难以实施。由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。 (3)用SVM解决多分类问题存在困难。经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。如:与粗集理论结合,形成一种优势互补的多类问题的组合分类器1.3 SVM分类器当前研究热点 (1)针对大样本数据训练难度问题,对SVM算法的改进。例如J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、张学工的CSVM以及O.L.Mangasarian等的SOR算法。 (2)如何降低边界混杂点(即所谓统计误差导致的“不干净”点)导致的不必要的训练计算负担,增强泛化能力。这种思路聚焦于样本数据预处理的探索,例如NN-SVM。 (3)分类器设计思想之间的融合以及取长补短。例如[2]采样支撑矢量机和最近邻分类相

支持向量机SVM分类算法

支持向量机SVM分类算法 SVM的简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]。 支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力[14](或称泛化能力)。 以上是经常被有关SVM 的学术文献引用的介绍,我来逐一分解并解释一下。 Vapnik是统计机器学习的大牛,这想必都不用说,他出版的《Statistical Learning Theory》是一本完整阐述统计机器学习思想的名著。在该书中详细的论证了统计机器学习之所以区别于传统机器学习的本质,就在于统计机器学习能够精确的给出学习效果,能够解答需要的样本数等等一系列问题。与统计机器学习的精密思维相比,传统的机器学习基本上属于摸着石头过河,用传统的机器学习方法构造分类系统完全成了一种技巧,一个人做的结果可能很好,另一个人差不多的方法做出来却很差,缺乏指导和原则。所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。正是因为SVM关注的是VC维,后面我们可以看到,SVM解决问题的时候,和样本的维数是无关的(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然,有这样的能力也因为引入了核函数)。 结构风险最小听上去文绉绉,其实说的也无非是下面这回事。 机器学习本质上就是一种对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型,这个近似模型就叫做一个假设),但毫无疑问,真实模型一定是不知道的(如果知道了,我们干吗还要机器学习?直接用真实模型解决问题不就可以了?对吧,哈哈)既然真实模型不知道,那么我们选择的假设与问题真实解之间究竟有多大差距,我们就没法得知。比如说我们认为宇宙诞生于150亿年前的一场大爆炸,这个假设能够描述很多我们观察到的现象,但它与真实的宇宙模型之间还相差多少?谁也说不清,因为我们压根就不知道真实的宇宙模型到底是什么。 这个与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。我们选择了一个假设之后(更直观点说,我们得到了一个分类器以后),真实误差无从得知,但我们可以用某些可以掌握的量来逼近它。最直观的想法就是使用分类器在样本数据上的分类的结果与真实结果(因为样本是已经标注过的数据,是准确的数据)之间的差值来表示。这个差值叫做经验风险Remp(w)。以前的机器学习方法都把经验风险最小化作为努力的目标,但后来发现很多分类函数能够在样本集上轻易达到100%的正确率,在真实分类时却一塌糊涂(即所谓的推广能力差,或泛化能力差)。此时的情况便是选择了一个足够复杂的分类函数(它的VC维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。回头看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛

20.ENVI4.3 支持向量机分类原理、操作及实例分析

ENVI4.3 支持向量机分类原理、操作及实例分析 一、支持向量机算法介绍 1.支持向量机算法的理论背景 支持向量机分类(Support Vector Machine或SVM)是一种建立在统计学习理论(Statistical Learning Theory或SLT)基础上的机器学习方法。 与传统统计学相比,统计学习理论(SLT)是一种专门研究小样本情况下及其学习规律的理论。该理论是建立在一套较坚实的理论基础之上的,为解决有限样本学习问题提供了一个统一的框架。它能将许多现有方法纳入其中,有望帮助解决许多原来难以解决的问题,如神经网络结构选择问题、局部极小点问题等;同时,在这一理论基础上发展了一种新的通用学习方法——支持向量机(SVM),已初步表现出很多优于已有方法的性能。一些学者认为,SLT和SVM正在成为继神经网络研究之后新的研究热点,并将推动机器学习理论和技术的重大发展。 支持向量机方法是建立在统计学习理论的VC维(VC Dimension)理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力。 支持向量机的几个主要优点有: (1)它是专门针对有限样本情况的,其目标是得到现有信息下的最优解而不仅仅是样本数趋于无穷大时的最优值; (2)算法最终将转化成为一个二次型寻优问题,从理论上说,得到的将是全局最优点,解决了在神经网络方法中无法避免的局部极值问题; (3)算法将实际问题通过非线性变换转换到高维的特征空间(Feature Space),在高维空间中构造线性判别函数来实现原空间中的非线性判别函数,特殊性质能保证机器有较 好的推广能力,同时它巧妙地解决了维数问题,其算法复杂度与样本维数无关; 2.支持向量机算法简介 通过学习算法,SVM可以自动寻找那些对分类有较大区分能力的支持向量,由此构造出分类器,可以将类与类之间的间隔最大化,因而有较好的推广性和较高的分类准确率。 最优分类面(超平面)和支持向量

SVM算法推导及其分类的算法实现

SVM算法推导及其分类的算法实现 摘要:本文从线性分类问题开始逐步的叙述支持向量机思想的形成,并提供相应的推导过程。简述核函数的概念,以及kernel在SVM算法中的核心地位。介绍松弛变量引入的SVM算法原因,提出软间隔线性分类法。概括SVM分别在一对一和一对多分类问题中应用。基于SVM在一对多问题中的不足,提出SVM 的改进版本DAG SVM。 Abstract:This article begins with a linear classification problem, Gradually discuss formation of SVM, and their derivation. Description the concept of kernel function, and the core position in SVM algorithm. Describes the reasons for the introduction of slack variables, and propose soft-margin linear classification. Summary the application of SVM in one-to-one and one-to-many linear classification. Based on SVM shortage in one-to-many problems, an improved version which called DAG SVM was put forward. 关键字:SVM、线性分类、核函数、松弛变量、DAG SVM 1. SVM的简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力。 对于SVM的基本特点,小样本,并不是样本的绝对数量少,而是与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。非线性,是指SVM擅长处理样本数据线性不可分的情况,主要通过松弛变量和核函数实现,是SVM 的精髓。高维模式识别是指样本维数很高,通过SVM建立的分类器却很简洁,只包含落在边界上的支持向量。

电子科技大学DSP作业SVM分类器设计

SVM分类器设计 (控制工程XXXXXXXX) 一、问题表述 对“data3.m”数据,用其中一半的数据采用非线性SVM算法设计分类器并画出决策面,另一半数据用于测试分类器性能。比较不同核函数的结果。(注意讨论算法中参数设置的影响。) 二、方法描述 SVM方法是通过一个非线性映射p,把样本空间映射到一个高维乃至无穷维的特征空间中(Hilbert空间),使得在原来的样本空间中非线性可分的问题转化为在特征空间中的线性可分的问题.简单地说,就是升维和线性化.升维,就是把样本向高维空间做映射,一般情况下这会增加计算的复杂性,甚至会引起“维数灾难”,因而人们很少问津.但是作为分类、回归等问题来说,很可能在低维样本空间无法线性处理的样本集,在高维特征空间中却可以通过一个线性超平面实现线性划分(或回归).一般的升维都会带来计算的复杂化,SVM方法巧妙地解决了这个难题:应用核函数的展开定理,就不需要知道非线性映射的显式表达式;由于是在高维特征空间中建立线性学习机,所以与线性模型相比,不但几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾难这一切要归功于核函数的展开和计算理论. 选择不同的核函数,可以生成不同的SVM,常用的核函数有以下4种: ⑴线性核函数K(x,y)=x·y; ⑵多项式核函数K(x,y)=[(x·y)+1]^d; ⑶径向基函数K(x,y)=exp(-|x-y|^2/d^2) ⑷二层神经网络核函数K(x,y)=tanh(a(x·y)+b). SVM的主要思想可以概括为两点:⑴它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能;Vapnik等人在多年研究统计学习理论基础上对线性分类器提出了另一种设计最佳准则。其原理也从线性可分说起,然后扩展到线性不可分的情况。甚至扩展到使用非线性函数中去,这种分类器被称为支持向量机(Support Vector Machine,简称SVM)。支持向量机的提出有很深的理论背景。 三、算法实现 X =load('data.txt'); n = length(X);%总样本数量 y = X(:,4);%类别标志 X = X(:,1:3); TOL = 0.0001;%精度要求 C = 1;%参数,对损失函数的权重 b = 0;%初始设置截距b Wold = 0;%未更新a时的W(a) Wnew = 0;%更新a后的W(a) for i = 1 : 50%设置类别标志为1或者-1 y(i) = -1;

SVM算法实验实验报告

svm分类算法 一、数据源说明 1、数据源说远和理解: ticeval2000.txt: 这个数据集是需要预测( 4000个客户记录)的数据集。它和 ticdata2000.txt它具有相同的格式,只是没有最后一列的目标记录。我们只希望返回预测 目标的列表集,所有数据集都用制表符进行分隔。共有4003(自己加了三条数据),根据要 求,用来做预测。 tictgts2000.txt:最终的目标评估数据。这是一个实际情况下的目标数据,将与我们预 测的结果进行校验。我们的预测结果将放在result.txt文件中。 数据集理解:本实验任务可以理解为分类问题,即分为2类,也就是数据源的第86列, 可以分为0、1两类。我们首先需要对ticdata2000.txt进行训练,生成model,再根据model 进行预测。 2、数据清理 代码中需要对数据集进行缩放的目的在于: a、避免一些特征值范围过大而另一些特征值范围过小; b、避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常将 数据缩放到 [ -1,1] 或者是 [0,1] 之间。 二、数据挖掘的算法说明 1、 svm算法说明 2、实现过程 在源程序里面,主要由以下2个函数来实现: (1) struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param); 该函数用来做训练,参数prob,是svm_problem类型数据,具体结构定义如下: struct svm_problem //存储本次参加运算的所有样本(数据集),及其所属类别。 { int n; //记录样本总数 double *y; //指向样本所属类别的数组 struct svm_node **x; //指向一个存储内容为指针的数组 }; 其中svm_node的结构体定义如下: struct svm_node //用来存储输入空间中的单个特征 { int index; //输入空间序号,假设输入空间数为m double value; //该输入空间的值 }; 所以,prob也可以说是问题的指针,它指向样本数据的类别和输入向量,在内存中的具 体结构图如下: 图1.1libsvm训练时,样本数据在内存中的存放结构 只需在内存中申请n*(m+1)*sizeof(struct svm_node)大小的空间,并在里面填入每个 样本的每个输入空间的值,即可在程序中完成prob参数的设置。参数param,是 svm_parameter数据结构,具体结构定义如下: struct svm_parameter // 训练参数 { int svm_type; //svm类型,

SVM分类器的原理及应用

SVM分类器的原理及应用 姓名:苏刚学号:1515063004学院:数学与计算机学院 一、SVM分类器的原理 SVM法即支持向量机(Support Vector Machine)法,由Vapnik等人于1995年提出,具 有相对优良的性能指标。该方法是建立在统计学习理论基础上的机器学习方法。通过学习算法,SVM可以自动寻找出那些对分类有较好区分能力的支持向量,由此构造出的分类器可以 最大化类与类的间隔,因而有较好的适应能力和较高的分准率。该方法只需要由各类域的边 界样本的类别来决定最后的分类结果。支持向量机算法的目的在于寻找一个超平面H(d),该 超平面可以将训练集中的数据分开,且与类域边界的沿垂直于该超平面方向的距离最大,故SVM法亦被称为最大边缘(maximum margin)算法。待分样本集中的大部分样本不是支持向量,移去或者减少这些样本对分类结果没有影响,SVM法对小样本情况下的自动分类有着较好的 分类结果. SVM方法是通过一个非线性映射p,把样本空间映射到一个高维乃至无穷维的特征空间中(Hilbert空间),使得在原来的样本空间中非线性可分的问题转化为在特征空间中的线性 可分的问题。简单地说,就是升维和线性化。升维,就是把样本向高维空间做映射,一般情 况下这会增加计算的复杂性,甚至会引起“维数灾难”,因而人们很少问津。但是作为分类、回归等问题来说,很可能在低维样本空间无法线性处理的样本集,在高维特征空间中却可以 通过一个线性超平面实现线性划分(或回归)。一般的升维都会带来计算的复杂化,SVM方 法巧妙地解决了这个难题:应用核函数的展开定理,就不需要知道非线性映射的显式表达式;由于是在高维特征空间中建立线性学习机,所以与线性模型相比,不但几乎不增加计算的复 杂性,而且在某种程度上避免了“维数灾难”。这一切要归功于核函数的展开和计算理论。 选择不同的核函数,可以生成不同的SVM,常用的核函数有以下4种: ⑴线性核函数K(x,y)=x·y; ⑵多项式核函数K(x,y)=[(x·y)+1]^d; ⑶径向基函数K(x,y)=exp(-|x-y|^2/d^2); ⑷二层神经网络核函数K(x,y)=tanh(a(x·y)+b);

SVM的常用多分类算法概述

SVM的常用多分类算法概述 摘要:SVM方法是建立在统计学习理论基础上的机器学习方法,具有相对优良的分类性能,是一种非线性分类器。最初SVM是用以解决两类分类问题,不能直接用于多类分类,当前已经有许多算法将SVM推广到多类分类问题,其中最常用两类:OAA和OAO算法,本文主要介绍这两类常用的多分类算法。 关键词:SVM;多分类;最优化 自从90年代初V. Vapnik提出经典的支持向量机理论(SVM),由于其完整的理论框架和在实际应用中取得的很多好的效果,在模式识别、函数逼近和概率密度估计领域受到了广泛的重视。SVM方法是建立在统计学习理论基础上的机器学习方法,具有相对优良的分类性能。SVM是一种非线性分类器。它的基本思想是将输入空间中的样本通过某种非线性函数关系映射到一个特征空间中,使两类样本在此特征空间中线性可分,并寻找样本在此特征空间中的最优线性区分平面。它的几个主要优点是可以解决小样本情况下的机器学习问题,提高泛化性能,解决高维问题、非线性问题,可以避免神经网络结构选择和局部极小点问题。 1. SVM方法 若样本集Q={(x i,y i)|i=1,……,L}∈R d*{-1,+1}是线性可分的。则存在分类超平面w T x+b=0,x∈R d对样本集Q中任一(x i,y i)都满足: 在空间R d中样本x=(x1,…, x d)r到分类超平面的距离d=|w T*x+b|/||w||,其中 ||w||= . 当存在x 使得w T x i+b=±1, 则图1中超平面的分类间隔 margin = 2/ ‖w ‖。 使分类间隔margin 最大的超平面即为最优分类超平面。寻找最优分类超平面的问题将转化为求如下一个二次规划问题: minΦ( w) =1/2‖w ‖ 满足约束条件: y i ( w T x i + b) ≥1 , i = 1 ,2 , ?, L 采用Lagrange 乘子转换为一个对偶问题,形式如下: 满足约束条件:

排序学习中的Ranking SVM算法研究

排序学习中的Ranking SVM算法研究 【摘要】本文详细分析了基于支持向量机的排序学习算法Ranking SVM,通过选取不同的惩罚参数在OHSUMED数据集进行实验,衡量了算法在评价准则MAP和NDCG@n下的性能。 【关键词】排序学习;排序支持向量机;算法 Researh of Ranking SVM Algorithm in Learning to Rank DING Wei-min (Weifang University,Weifang Shandong 261061,China) 【Abstract】The paper gives a detailed analysis about the algorithm of Ranking SVM.By experimenting with different penalty parameters on the data set of OHSUMED,the paper also gives the performance in the evaluation criteria of MAP and NDCG@n. 【Key words】Learning to rank;Ranking SVM;Algorithm 0 引言 目前,对于互联网上海量的资源,人们主要通过向搜索引擎提交查询请求获取所需要的信息。搜索引擎根据用户交互组件收到的请求对网页索引数据库检索并将结果交付排序组件进行排序处理,最终以网页排序列表的形式呈现给用户[1]。虽然网页排序列表集合仍十分巨大,实际上用户访问的网页数量却很少,如文献[2]通过分析用户点击数据的日志信息,得到用户点击网页排名的平均值基本在第六条记录左右。因此,如何将相关性强的网页排在列表的前面,而将相关性弱的网页排在后边是搜索引擎排序组件中排序算法需要解决的主要问题,本文在分析排序学习算法Ranking SVM基础上,通过在数据集OHSUMED进行实验,给出算法在评价准则MAP和NDCG@n下的性能。 1 排序学习与Ranking SVM算法[3,4] 排序学习的目的通过使用训练数据和机器学习技术自动创建排序模型。在排序学习中典型的设置是将特征向量和有序分类作为训练数据。通过在训练数据上进行学习得到排序模型,然应用到测试数据上。[5] Ranking SVM算法是通过在训练集构造样本有序数据对的方式将排序问题转化为应用支持向量机方法解决的二分类问题。具体描述为:针对训练集合构造有序数据对集合S={(x■■,x■■),z■},x■■,x■■表示针对同一查询的返回文档,如果x■■,x■■组成顺序对,则z■值为+1表示。如果为逆序对,则z■值为

SVM分类原理

SVM 的分类原理 SVM 的主要思想可以概括为两点: (1) 它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能; (2) 它基于结构风险最小化理论之上在特征空间中建构最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。支持向量机的目标就是要根据结构风险最小化原理,构造一个目标函数将两类模式尽可能地区分开来,通常分为两类情况来讨论, (1) 线性可分,(2) 线性不可分。 1. 1 线性可分情况 在线性可分的情况下,就会存在一个超平面使得训练样本完全分开,该超平面可描述为: w ·x + b = 0 (1) 其中,“·”是点积, w 是n 维向量, b 为偏移量。 最优超平面是使得每一类数据与超平面距离最近的向量与超平面之间的距离最大的这样的平面. 最优超平面可以通过解下面的二次优化问题来获得: 满足约束条件: , i = 1 ,2 ,3 ,......, n. (3) 在特征数目特别大的情况,可以将此二次规划问题转化为其对偶问题: (4) (5) (6)

满足约束条件: (7) 这里是Lagrange 乘子, 是最优超平面的法向量, 是最优超 平面的偏移量,在这类优化问题的求解与分析中, KKT条件将起到很重要的作用,在(7) 式中,其解必须满足: (8) 从式(5) 可知,那些 = 0 的样本对分类没有任何作用,只有那些 > 0 的样本才对分类起作用,这些样本称为支持向量,故最终的分类函数为: (9) 根据f ( x) 的符号来确定X 的归属。 1. 2 线性不可分的情况 对于线性不可分的情况,可以把样本X 映射到一个高维特征空间H,并在此空间中运用原空间的函数来实现内积运算,这样将非线性问题转换成另一空间的线性问题来获得一个样本的归属. 根据泛函的有关理论,只要一种核函数满足Mercer 条件,它就对应某一空间中的内积,因此只要在最优分类面上采用适当的内积函数就可以实现这种线性不可分的分类问题. 此时的目标函数为: (10) 其相应的分类函数为: (11) 1. 3 内积核函数 目前有三类用的较多的内积核函数:第一类是 (12)

SVM(支持向量机)算法在项目实践中的应用

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年 首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的 优势,并能够推广应用到函数拟合等其他机器学习问题中。 正是由于SVM具有很多独特的优势,基于SVM分类器在很多时候都具有 较好的拟合作用。本文对SVM算法在行人检测项目实践中的应用进行详细讲解,同时给出调用OpenCV分类器及可视化的代码实现,便于大家学习实践。 目前的行人检测基本上都是基于法国研究人员Dalal在2005的CVPR发 表的HOG+SVM的行人检测算法(Histograms of Oriented Gradients for Human Detection, Navneet Dalel,Bill Triggs, CVPR2005)。HOG+SVM作 为经典算法也集成到OpenCV里面去了,可以直接调用实现行人检测。 一、HOG特征描述符 HOG(Histogram of Oriented Gradients)HOG特征在对象检测与模式 匹配中是一种常见的特征提取技术(深度学习之前),是基于本地像素块进 行特征直方图提取的一种算法,对像局部的变形与光照影响有很好的稳定性,最初是用HOG特征来识别人像,通过HOG特征提取+SVM训练,可以得到很好 的效果,OpenCV已经有相应的接口。 HOG特征是在2005年CVPR的会议发表,在图像手工特征提取方面具有里 程碑式的意义,当时在行人检测领域获得了极大成功。 1.1 主要思想 局部目标的外表和形状可以被局部梯度的分布很好的描述,即使我们不知 道对应的梯度和边缘的位置。(本质:梯度的统计信息,梯度主要存在于边缘edge或角落corner的地方) 1.2 宏观 特征描述符就是通过提取图像的有用信息,并且丢弃无关信息来简化图像 的表示。HOG特征描述符可以将3通道的彩色图像转换成一定长度的特征向量。那么我们就需要定义什么是“有用的”,什么是“无关的”。这里的“有用”,是指对于什么目的有用,显然特征向量对于观察图像是没有用的,但是它对于 像图像识别和目标检测这样的任务非常有用。当将这些特征向量输入到类似支 持向量机(SVM)这样的图像分类算法中时,会得到较好的结果。那什么样的 “特征”对分类任务是有用,比如我们想检测出马路上的车道线,那么我们可 以通过边缘检测来找到这些车道线,在这种情况下,边缘信息就是“有用的”,而颜色信息是无关的。 方向梯度直方图(HOG)特征描述符常和线性支持向量机(SVM)配合使用, 用于训练高精度的目标分类器。 1.3 微观(硬核) 在HOG特征描述符中,梯度方向的分布,也就是梯度方向的直方图被视作 特征。图像的梯度(x和y导数)非常有用,因为边缘和拐角(强度突变的区域) 周围的梯度幅度很大,并且边缘和拐角比平坦区域包含更多关于物体形状的信息。HOG特征是一种图像局部特征,基本思路是将图像划分为很多小的连通区域,即细胞单元Cell,然后对Cell的梯度幅值和方向进行投票统计,形成基 于梯度特性的直方图。把直方图在图像更大的范围内(又名区间或者Block)进 行归一化。归一化的块描述符叫做HOG描述子feature descriptor。将检测窗

相关文档
最新文档