模式识别-支持向量机

模式识别-支持向量机
模式识别-支持向量机

计算机模式识别报告

支持向量机

一、SVM的介绍

支持向量机(Support Vector Machine,SVM)是Corinna Cortes和Vap nik[8]等于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

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

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

我们通常希望分类的过程是一个机器学习的过程。这些数据点是n维实空间中的点。我们希望能够把这些点通过一个n-1维的超平面分开。通常这个被称为线性分类器。有很多分类器都符合这个要求。但是我们还希望找到分类最佳的平面,即使得属于两个不同类的数据点间隔最大的那个面,该面亦称为最大间隔超平面。如果我们能够找到这个面,那么这个分类器就称为最大间隔分类器。

支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。建立方向合适的分隔超平面使两个与之平行的超平面间的距离最大化。其假定为,平行超平面间的距离或差距越大,分类器的总误差越小。一个极好的指南是C.J.C Burges的《模式识别支持向量机指南》。

所谓支持向量是指那些在间隔区边缘的训练样本点。这里的“机(ma chine,机器)”实际上是一个算法。在机器学习领域,常把一些算法看做是一个机器。

支持向量机(Support vector machines,SVM)与神经网络类似,都是学习型的机制,但与神经网络不同的是SVM使用的是数学方法和优化技术。

支持向量机是由Vapnik领导的AT&TBell实验室研究小组在1963年提出的一种新的非常有潜力的分类技术,SVM是一种基于统计学习理论的模式识别方法,主要应用于模式识别领域。由于当时这些研究尚不十分完善,在解决模式识别问题中往往趋于保守,且数学上比较艰涩,这些研究一直没有得到充分的重视。直到90年代,统计学习理论 (Statistical Learni

ng Theory,SLT)的实现和由于神经网络等较新兴的机器学习方法的研究遇到一些重要的困难,比如如何确定网络结构的问题、过学习与欠学习问题、局部极小点问题等,使得SVM迅速发展和完善,在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。从此迅速的发展起来,现在已经在许多领域(生物学,文本和手写识别等)都取得了成功的应用。

SVM的关键在于核函数。低维空间向量集通常难于划分,解决的方法是将它们映射到高维空间。但这个办法带来的困难就是计算复杂度的增加,而核函数正好巧妙地解决了这个问题。也就是说,只要选用适当的核函数,就可以得到高维空间的分类函数。在SVM理论中,采用不同的核函数将导致不同的SVM算法。

二、基于统计学习理论的支持向量机算法研究的理论背景

基于数据的机器学习是现代智能技术中的重要方面,研究从观测数据(样本)出发寻找规律,利用这些规律对未来数据或无法观测的数据进行预测。迄今为止,关于机器学习还没有一种被共同接受的理论框架,关于其实现方法大致可以分为三种:

第一种是经典的(参数)统计估计方法。包括模式识别、神经网络等在内,现有机器学习方法共同的重要理论基础之一是统计学。参数方法正是基于传统统计学的,在这种方法中,参数的相关形式是已知的,训练样本用来估计参数的值。这种方法有很大的局限性,首先,它需要已知样本分布形式,这需要花费很大代价,还有,传统统计学研究的是样本数目趋于无穷大时的渐近理论,现有学习方法也多是基于此假设。但在实际问题中,样本数往往是有限的,因此一些理论上很优秀的学习方法实际中表现却可能不尽人意。

第二种方法是经验非线性方法,如人工神经网络(ANN)。这种方法利用已知样本建立非线性模型,克服了传统参数估计方法的困难。但是,这种方法缺乏一种统一的数学理论。

与传统统计学相比,统计学习理论(Statistical Learning Theory或SLT)是一种专门研究小样本情况下机器学习规律的理论。该理论针对小样本统计问题建立了一套新的理论体系,在这种体系下的统计推理规则不仅考虑了对渐近性能的要求,而且追求在现有有限信息的条件下得到最优结果。V. Vapnik等人从六、七十年代开始致力于此方面研究[1],到九十年代中期,随着其理论的不断发展和成熟,也由于神经网络等学习方法在理论上缺乏实质性进展,统计学习理论开始受到越来越广泛的重视。

统计学习理论的一个核心概念就是VC维(VC Dimension)概念,它是描述函数集或学习机器的复杂性或者说是学习能力(Capacity of the machine)的一个重要指标,在此概念基础上发展出了一系列关于统计学习的一致性(Consistency)、收敛速度、推广性能(Generalization Performance)等的重要结论。

统计学习理论是建立在一套较坚实的理论基础之上的,为解决有限样本学习问题提供了一个统一的框架。它能将很多现有方法纳入其中,有望帮助解决许多原来难以解决的问题(比如神经网络结构选择问题、局部极小点问题等);同时,这一理论基础上发展了一种新的通用学习方法──支持向量机(Support Vector Machine或SVM),已初步表现出很多优于已有方法的性能。一些学者认为,SLT 和SVM正在成为继神经网络研究之后新的研究热点,并将推动机器学习理论和技术有重大的发展。

支持向量机方法是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(Generalizatin Ability)。支持向量机方法的几个主要优点有:

1.它是专门针对有限样本情况的,其目标是得到现有信息下的最优解而不仅

仅是样本数趋于无穷大时的最优值;

2.算法最终将转化成为一个二次型寻优问题,从理论上说,得到的将是全局

最优点,解决了在神经网络方法中无法避免的局部极值问题;

3.算法将实际问题通过非线性变换转换到高维的特征空间(Feature Space),

在高维空间中构造线性判别函数来实现原空间中的非线性判别函数,特殊性质能保证机器有较好的推广能力,同时它巧妙地解决了维数问题,其算法复杂度与样本维数无关;

4.SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于

支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾

难”。

5.少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔

除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁

棒”性。这种“鲁棒”性主要体现在:

①增、删非支持向量样本对模型没有影响;

②支持向量样本集具有一定的鲁棒性;

③有些成功的应用中,SVM 方法对核的选取不敏感。

6.SVM 是一种有坚实理论基础的新颖的小样本学习方法。它基本上不涉及

概率测度及大数定律等,因此不同于现有的统计方法。从本质上看,它避开了从归纳到演绎的传统过程,实现了高效的从训练样本到预报样本的“转导推理”(transductive inference) ,大大简化了通常的分类和回归等问题。

在SVM方法中,只要定义不同的内积函数,就可以实现多项式逼近、贝叶斯分类器、径向基函数(Radial Basic Function或RBF)方法、多层感知器网络等许多现有学习算法。

统计学习理论从七十年代末诞生,到九十年代之前都处在初级研究和理论准备阶段,近几年才逐渐得到重视,其本身也趋向完善,并产生了支持向量机这一

将这种理论付诸实现的有效的机器学习方法。目前,SVM 算法在模式识别、回归估计、概率密度函数估计等方面都有应用。例如,在模式识别方面,对于手写数字识别、语音识别、人脸图像识别、文章分类等问题,SVM 算法在精度上已经超过传统的学习算法或与之不相上下。

目前,国际上对这一理论的讨论和进一步研究逐渐广泛,而我国国内尚未在此领域开展研究,因此我们需要及时学习掌握有关理论,开展有效的研究工作,使我们在这一有着重要意义的领域中能够尽快赶上国际先进水平。由于SLT 理论和SVM 方法尚处在发展阶段,很多方面尚不完善,比如:许多理论目前还只有理论上的意义,尚不能在实际算法中实现;而有关SVM 算法某些理论解释也并非完美(J.C.Burges 在[2]中就曾提到结构风险最小原理并不能严格证明SVM 为什么有好的推广能力);此外,对于一个实际的学习机器的VC 维的分析尚没有通用的方法;SVM 方法中如何根据具体问题选择适当的内积函数也没有理论依据。因此,在这方面我们可做的事情是很多的。

三、方法介绍

SVM 是从线性可分情况下的最优分类面发展而来的,基本思想可用图1的两维情况说明。图中,实心点和空心点代表两类样本,H 为分类线,H 1、H 2分别为过各类中离分类线最近的样本且平行于分类线的直线,它们之间的距离叫做分类间隔(margin )。所谓最优分类线就是要求分类线不但能将两类正确分开(训练错误率为0),而且使分类间隔最大。分类线方程为0=+?b w x ,我们可以对

它进行归一化,使得对线性可分的样本集),(i i y x ,n i ,...,1=,

d R ∈x ,}1,1{-+∈y ,满足

n i b y i i ,,1,01])[( =≥-+?x w

(1)

此时分类间隔等于2/||w ||,使间隔最大等价于使||w ||2

最小。满足条件(1)且使

2

2

1w 最小的分类面就叫做最优分类面,

H 1、H 2上的训练样本点就称作支持向量。 利用Lagrange 优化方法可以把上述最优分类面问题转化为其对偶问题[2],

即:在约束条件

y i i

i n

α

=∑=1

0, (2a)

和 αi ≥ 0 i =1,?n

(2b)

下对αi 求解下列函数的最大值:

∑∑==?-=n

j i j i j i j i n

i i y y Q 1,1

)(21)(x x αααα

(3)

αi 为原问题中与每个约束条件(1)对应的Lagrange 乘子。这是一个不等式约束下二次函数寻优的问题,存在唯一解。容易证明,解中将只有一部分(通常是少部分)αi 不为零,对应的样本就是支持向量。解上述问题后得到的最优分类函数是

?

??

???+?=+?=∑=n i i i i b y b f 1**)(sgn })sgn{()(x x x w x α, (4)

式中的求和实际上只对支持向量进行。b *是分类阈值,可以用任一个支持向量(满

足(1)中的等号)求得,或通过两类中任意一对支持向量取中值求得。

对非线性问题,可以通过非线性变换转化为某个高维空间中的线性问题,在变换空间求最优分类面。这种变换可能比较复杂,因此这种思路在一般情况下不易实现。但是注意到,在上面的对偶问题中,不论是寻优目标函数(3)还是分类函数(4)都只涉及训练样本之间的内积运算)(j i x x ?。设有非线性映射Φ : R d → H 将输入空间的样本映射到高维

(可能是无穷维)的特征空间H 中。当在特征空间H 中构造最优超平面时,训练算法仅使用空间中的点积,即Φ(x i ).Φ(x j ),而没有单独的Φ(x i )出现。因此,如果能够找到一个函数K 使得K ( x i , x j )=Φ(x i ).Φ(x j ),这样,在高维空间实际上只需进行内积运算,而这种内积运算是可以用原空间中的函数实现的,我们甚至没有必要知道变换Φ的形式。根据泛函的有关理论,只要一种核函数K ( x i ,x j )满足Mercer 条件,它就对应某一变换空间中的内积。

因此,在最优分类面中采用适当的内积函数K ( x i ,x j )就可以实现某一非线性变换后的线性分类,而计算复杂度却没有增加,此时目标函数(3)变为:

∑∑==-=n

j i j i j i j i n

i i K y y Q 1,1

),(21)(x x αααα , (5)

而相应的分类函数也变为

)),(sgn()(*1*b K y f n

i i i i +=∑=x x x α, (6)

这就是支持向量机。

这一特点提供了解决算法可能导致的“维数灾难”问题的方法:在构造判别函数时,不是对输入空间的样本作非线性变换,然后在特征空间中求解;而是先在输入空间比较向量(例如求点积或是某种距离),对结果再作非线性变换[9]。这样,大的工作量将在输入空间而不是在高维特征空间中完成。SVM 分类函数形式上类似于一个神经网络,输出是s 中间节点的线性组合,每个中间节点对应一

图1 最优分类面

个支持向量,如图2所示。

函数K 称为点积的卷积核函数,根据公式,它可以看作在样本之间定义的一种距离。

显然,上面的方法在保证训练样本全部被正确分类,即经验风险R emp 为0的前提下,通过最大化分类间隔来获得最好的推广性能。如果希望在经验风险和推广性能之间求得某种均衡,可以通过引入正的松弛因子ξi 来允许错分样本的存在。这时,约束(1)变为

n i b y i i i ,,1,01])[( =≥+-+?ξx w

(7)

而在目标——最小化2

21w ——中加入惩罚项∑=n

i i C 1ξ,这样,Wolf 对偶问题可以写成:

Maximize: ∑∑==-=n

j i j i j i j i n

i i K y y Q 1,1

),(21)(x x αααα

(8)

s.t.

y i i

i n

α

=∑=1

0 (9a)

0 ≤ αi ≤ C i =1,?n (9b)

这就是SVM 方法的最一般的表述。为了方便后面的陈述,这里我们对对偶问题的最优解做一些推导。 定义

∑Φ=i

i i i y )()(x ααω

(10)

i j

j i j j i i i y K y y F -=-Φ?=∑),()()(x x x ααω

(11)

对偶问题的Lagrange 函数可以写成:

图2 支持向量机示意图

)x

(K x 1 x 2 输入向量),...,,(2

1

d

x x x =x

基于s 个支持向量s x x x ,...,,21的非线性变换(内积

权值i i y α

输出(决策规则):

)),(sgn(1

b K y y s

i i i i +=∑=x x α

∑∑∑∑--+--?=i

i i i i i i i i i y C L αβαμαδααωαω)()()(21

(12)

KKT 条件为

0)(=+--=??i i i i i

y F L

μδβα (13a) 00

≥=i i i δαδ且

(13b) μi (αi - C ) = 0 ? i

(13c)

由此,我们可以推导出如下关系式:

● 若αi = 0 则 δi ≥ 0 μi = 0 ? (F i - βi )y i ≥ 0

(14a)

● 若0 < αi < C 则 δi = 0 μi = 0 ? (F i - βi )y i = 0

(14b)

● 若 αi = C 则 δi = 0 μi ≥ 0 ? (F i - βi )y i ≤ 0

(14c)

由于KKT 条件是最优解应满足的充要条件(6),所以目前提出的一些算法几乎都是以是否违反KKT 条件作为迭代策略的准则。

3.SVM 算法中目前的研究状况

由于SVM 方法较好的理论基础和它在一些领域的应用中表现出来的优秀的推广性能,近年来,许多关于SVM 方法的研究,包括算法本身的改进和算法的实际应用,都陆续提了出来。尽管SVM 算法的性能在许多实际问题的应用中得到了验证,但是该算法在计算上存在着一些问题,包括训练算法速度慢、算法复杂而难以实现以及检测阶段运算量大等等。

传统的利用标准二次型优化技术解决对偶问题的方法可能是训练算法慢的主要原因:首先,SVM 方法需要计算和存储核函数矩阵,当样本点数目较大时,需要很大的内存,例如,当样本点数目超过4000时,存储核函数矩阵需要多达128兆内存;其次,SVM 在二次型寻优过程中要进行大量的矩阵运算,多数情况下,寻优算法是占用算法时间的主要部分。

SVM 方法的训练运算速度是限制它的应用的主要方面,近年来人们针对方法本身的特点提出了许多算法来解决对偶寻优问题。大多数算法的一个共同的思想就是循环迭代:将原问题分解成为若干子问题,按照某种迭代策略,通过反复求解子问题,最终使结果收敛到原问题的最优解。根据子问题的划分和迭代策略的不同,又可以大致分为两类。

第一类是所谓的“块算法”(chunking algorithm )。“块算法”基于的是这样一个事实,即去掉Lagrange 乘子等于零的训练样本不会影响原问题的解。对于给定的训练样本集,如果其中的支持向量是已知的,寻优算法就可以排除非支持向量,只需对支持向量计算权值(即Lagrange 乘子)即可。实际上支持向量是未

知的,因此“块算法”的目标就是通过某种迭代方式逐步排除非支持向量。具体的作法是,选择一部分样本构成工作样本集进行训练,剔除其中的非支持向量,并用训练结果对剩余样本进行检验,将不符合训练结果(一般是指违反KKT条件)的样本(或其中的一部分)与本次结果的支持向量合并成为一个新的工作样本集,然后重新训练。如此重复下去直到获得最优结果。

当支持向量的数目远远小于训练样本数目时,“块算法”显然能够大大提高运算速度。然而,如果支持向量的数目本身就比较多,随着算法迭代次数的增多,工作样本集也会越来越大,算法依旧会变得十分复杂。因此第二类方法把问题分解成为固定样本数的子问题:工作样本集的大小固定在算法速度可以容忍的限度内,迭代过程中只是将剩余样本中部分“情况最糟的样本”与工作样本集中的样本进行等量交换,即使支持向量的个数超过工作样本集的大小,也不改变工作样本集的规模,而只对支持向量中的一部分进行优化。

固定工作样本集的方法和块算法的主要区别在于:块算法的目标函数中仅包含当前工作样本集中的样本,而固定工作样本集方法虽然优化变量仅包含工作样本,其目标函数却包含整个训练样本集,即工作样本集之外的样本的Lagrange 乘子固定为前一次迭代的结果,而不是像块算法中那样设为0。而且固定工作样本集方法还涉及到一个确定换出样本的问题(因为换出的样本可能是支持向量)。这样,这一类算法的关键就在于找到一种合适的迭代策略使得算法最终能收敛并且较快地收敛到最优结果。

固定工作样本集的方法最早大概是由Osuna et al.提出的。在书中,Edgar Osunal等人介绍了一种具体的算法并对人脸识别问题进行了实验。将样本集分为两个集合B和N,集合B作为子问题工作样本集进行SVM训练,集合N中所有样本的Lagrange乘子均置为零。显然,如果把集合B中对应Lagrange乘子为零的样本i(即αi = 0,i∈B)与集合N中的样本j(即αi = 0,j∈N)交换,不会改变子问题与原问题的可行性(即仍旧满足约束条件);而且,当且仅当样本满足条件(F i-βi ) y i≥0(14a)时,替换后的子问题的最优解不变。于是可以按照以下步骤迭代求解:1.选择集合B,构造子问题;2.求子问题最优解αi,i∈B及b,并置αj = 0,j∈N;3.计算F j,j∈N找出其中不满足条件(F i-βi ) y i≥0(14a)的样本j,与B中满足αi = 0的样本i交换,构成新的子问题。证明了这种迭代算法的收敛性,并给出了两阶多项式分类器在人脸识别问题中的应用结果。

需要说明的是,文中没有说明集合B的大小是否改变。作者期望的是支持向量的数目非常少,当然可以固定B的大小,作者的意图正是如此。不过为此需要选择一个较大的B集合,这样看来,其效率可能还不如块算法。而且如果如果集合B不足以包括所有的支持向量,该算法没有提出改变B的大小的策略,有可能得不到结果。

前面提到,固定工作样本集方法的关键在于选择一种合适的换入换出策略。Joachims指出如果采用某种启发式的迭代策略将会提高算法的收敛速度。最近

John C. Platt在书中提出SMO(Sequential Minimal Optimization或SMO)算法。将工作样本集的规模减到最小——两个样本。之所以需要两个样本是因为等式线性约束的存在使得同时至少有两个Lagrange乘子发生变化。由于只有两个变量,而且应用等式约束可以将其中一个用另一个表示出来,所以迭代过程中每一步的子问题的最优解可以直接用解析的方法求出来。这样,算法避开了复杂的数值求解优化问题的过程;此外,Platt还设计了一个两层嵌套循环分别选择进入工作样本集的样本,这种启发式策略大大加快了算法的收敛速度。标准样本集的实验结果证明,SMO表现出在速度方面的良好性能。

子问题的规模和迭代的次数是一对矛盾,SMO将工作样本集的规模减少到2,一个直接的后果就是迭代次数的增加。所以SMO实际上是将求解子问题的耗费转嫁到迭代上,然后在迭代上寻求快速算法。但是,SMO迭代策略的思想是可以用到其他迭代算法中的,可见,SMO还有改进的余地。

SMO在实际应用中取得了较好的效果,但它也存在着一些问题。SMO算法每次迭代都要更新β值,但是该值有可能是无法确定的(例如不存在0 < αi < C的样本,尽管这种情况很少出现),这时SMO采用的方法是确定出β的上下界然后取平均值;另外,每一次迭代过程中的β值仅取决于上次迭代结果的两个变量的最优值,用这个β值判断样本是否满足迭代结果,这就可能存在某些达到最优值的样本却不满足KKT条件的情况,从而影响了该算法的效率[6]。

解决算法速度问题的另一个途径是采用序列优化的思想。这种方法主要目的是研究当出现新的单个样本时,它与原有样本集或其子集,或是原有样本集训练结果的关系,例如,它的加入对原有样本集的支持向量集有什么样的影响,怎样迅速地确定它对新的分类器函数的贡献等等。书中提出了一种用卡尔曼滤波器求解的方法。

四、研究方向

应该说,块算法和固定工作样本集算法是各有优缺点的。毫无疑问,固定工作样本集的算法解决了占用内存的问题,而且限制了子问题规模的无限增大;但是,从这个意义上来说,固定工作样本集的算法把解标准二次型的寻优问题的时间转嫁到循环迭代上了,它的迭代次数一般会比“块算法”多。尤其是SMO,如果没有一个好的启发式迭代策略,该算法就是一种盲目爬山法。

基于此,我们提出一种算法思想,希望能够综合两类算法的特点。我们仍旧从最终目标中抽取子问题,借用某种迭代策略使算法收敛,关键的,我们希望一方面子问题规模不会太小,以免迭代次数太多,另一方面能借鉴SMO的思想,利用二次问题的特点,找到子问题的解析解法,或者是近似解,从而不必对每一个子问题都调用寻优算法。

此外,由于SVM方法的性能与实现上的巨大差异,我们在求解子问题时不一定要得到精确解(解的精确度可以由迭代来保证),甚至还可以考虑对最终目标

求取近似解。这样,尽管结果的性能会受到影响,但是如果能够大幅度提高运算速度,它仍不失为一种好方法。

一种在二维数据实验中取得一定效果的方法是近邻SVM。由于SVM的目标是在高维特征空间中最大化分类间隔,亦即最小化||w||,而目标函数的度量就是欧氏距离,所以两类样本点之间的欧氏距离应该与目标函数有着密切的关系,可以认为,两类样本中距离最近的点最有可能成为支持向量,相反地,与异类样本距离较远则意味着它与分类面关系不大。事实上,传统的近邻法就是以距离作为判定样本点类别的依据,只不过在这里由于SVM的特点,距离可以直接用欧氏距离定义。

在高维特征空间中,两个样本x i , x j之间的欧氏距离的平方为:

||Φ( x i ) -Φ( x j )||2 = (Φ( x i ) -Φ( x j )) . (Φ( x i ) -Φ( x j ))

= Φ( x i ) . Φ( x i ) + Φ( x j ) . Φ( x j ) - 2Φ( x i ) . Φ( x j )

= K( x i , x i ) + K( x j , x j ) - 2K( x i , x j )

我们仍旧可以利用核函数,而不需要知道具体的变换形式。有了距离的定义后,我们可以对每一样本找出与它距离最近的几个异类样本。遍历所有样本后,我们可以得到这些最近邻的并集,通常,如果近邻个数选择适当,这个并集能够包含且只包含大多数处于最优分类面附近的样本,用这个并集作为训练样本集,可以大大提高算法的速度,得到的结果也比较令人满意。当然,近邻SVM还存在着许多问题,例如对某些特殊分布的样本集可能效果很差,再比如计算近邻样本也是一个很耗时的工作,这些都需要进一步的研究改进。

采用序列优化的思想也可以解决算法速度问题。如果能够简单有效地确定单个样本加入工作样本集后对训练结果的影响,一方面,出现新的样本时,可以利用原来的训练结果而不必重新开始;另一方面,让训练样本逐个进入工作样本集也可以简化寻优过程,提高算法速度。这实际上是将工作样本集中的样本数减少到一个,书中提出的SOR方法就是这样一种思路。

核函数是SVM方法中少数几个能够调整的参数之一,目前的方法一般都是使用多项式、径向基函数等等。尽管一些实验结果表明核函数的具体形式对分类效果的影响不大,但是核函数的形式以及其参数的确定决定了分类器类型和复杂程度,它显然应该作为控制分类器的性能的手段。有关核函数选择的理论依据仍旧很少,书中提到一种在SVM算法过程中自适应地选择模型参数的方法。我们的想法是,找出样本集分布特点与最优分类器之间的可能的对应关系,然后根据待训练样本的一些先验知识选择分类器的类型和参数,或者直接构造新的类型,可以预先确定,也可以在训练过程中逐步优化。

另外,SVM方法在分类方面的应用比较多,其实它在其它方面也有其优势,例如数据挖掘、特征选择和提取等,它的核函数的思想也已经应用到。尤其是特征选择,SVM方法用少数支持向量代表整个样本集的思想与特征选择极为类似。SVM方法的最优分类面是以分类间隔来衡量的,如果用不同的样本作支持向量,

应该得到不同的分类间隔。因此,如果把样本看作特征,建立某种准则函数,它以特征为变量,同时与分类间隔相对应,那么训练过程就完成了特征选择。在一些书中对此提出了一些方法,我们可以做进一步的研究。

五、程序代码

?svm-train.c

#include

#include

#include

#include

#include "svm.h"

#define Malloc(type,n) (type *)malloc((n)*sizeof(type))

void exit_with_help()

{

printf(

"Usage: svm-train [options] training_set_file [model_file]\n"

"options:\n"

"-s svm_type : set type of SVM (default 0)\n"

" 0 -- C-SVC\n"

" 1 -- nu-SVC\n"

" 2 -- one-class SVM\n"

" 3 -- epsilon-SVR\n"

" 4 -- nu-SVR\n"

"-t kernel_type : set type of kernel function (default 2)\n"

" 0 -- linear: u'*v\n"

" 1 -- polynomial: (gamma*u'*v + coef0)^degree\n"

" 2 -- radial basis function: exp(-gamma*|u-v|^2)\n"

" 3 -- sigmoid: tanh(gamma*u'*v + coef0)\n"

" 4 -- precomputed kernel (kernel values in training_set_file)\n"

"-d degree : set degree in kernel function (default 3)\n"

"-g gamma : set gamma in kernel function (default 1/k)\n"

"-r coef0 : set coef0 in kernel function (default 0)\n"

"-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)\n"

"-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)\n"

"-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)\n"

"-m cachesize : set cache memory size in MB (default 100)\n"

"-e epsilon : set tolerance of termination criterion (default 0.001)\n"

"-h shrinking: whether to use the shrinking heuristics, 0 or 1 (default 1)\n"

"-b probability_estimates: whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)\n"

"-wi weight: set the parameter C of class i to weight*C, for C-SVC (default 1)\n"

"-v n: n-fold cross validation mode\n"

);

exit(1);

}

void parse_command_line(int argc, char **argv, char *input_file_name, char *model_file_name);

void read_problem(const char *filename);

void do_cross_validation();

struct svm_parameter param; // set by parse_command_line

struct svm_problem prob; // set by read_problem

struct svm_model *model;

struct svm_node *x_space;

int cross_validation;

int nr_fold;

int main(int argc, char **argv)

{

char input_file_name[1024];

char model_file_name[1024];

const char *error_msg;

parse_command_line(argc, argv, input_file_name, model_file_name);

read_problem(input_file_name);

error_msg = svm_check_parameter(&prob,¶m);

if(error_msg)

{

fprintf(stderr,"Error: %s\n",error_msg);

exit(1);

}

if(cross_validation)

{

do_cross_validation();

}

else

{

model = svm_train(&prob,¶m);

svm_save_model(model_file_name,model);

svm_destroy_model(model);

}

svm_destroy_param(¶m);

free(prob.y);

free(prob.x);

free(x_space);

return 0;

}

void do_cross_validation()

{

int i;

int total_correct = 0;

double total_error = 0;

double sumv = 0, sumy = 0, sumvv = 0, sumyy = 0, sumvy = 0;

double *target = Malloc(double,prob.l);

svm_cross_validation(&prob,¶m,nr_fold,target);

if(param.svm_type == EPSILON_SVR ||

param.svm_type == NU_SVR)

{

for(i=0;i

{

double y = prob.y[i];

double v = target[i];

total_error += (v-y)*(v-y);

sumv += v;

sumy += y;

sumvv += v*v;

sumyy += y*y;

sumvy += v*y;

}

printf("Cross Validation Mean squared error = %g\n",total_error/prob.l);

printf("Cross Validation Squared correlation coefficient = %g\n",

((prob.l*sumvy-sumv*sumy)*(prob.l*sumvy-sumv*sumy))/

((prob.l*sumvv-sumv*sumv)*(prob.l*sumyy-sumy*sumy))

);

}

else

{

for(i=0;i

if(target[i] == prob.y[i])

++total_correct;

printf("Cross Validation Accuracy = %g%%\n",100.0*total_correct/prob.l);

}

free(target);

}

void parse_command_line(int argc, char **argv, char *input_file_name, char *model_file_name)

{

int i;

// default values

param.svm_type = C_SVC;

param.kernel_type = RBF;

param.degree = 3;

param.gamma = 0; // 1/k

param.coef0 = 0;

param.nu = 0.5;

param.cache_size = 100;

param.C = 1;

param.eps = 1e-3;

param.p = 0.1;

param.shrinking = 1;

param.probability = 0;

param.nr_weight = 0;

param.weight_label = NULL;

param.weight = NULL;

cross_validation = 0;

// parse options

for(i=1;i

{

if(argv[i][0] != '-') break;

if(++i>=argc)

exit_with_help();

switch(argv[i-1][1])

{

case 's':

param.svm_type = atoi(argv[i]);

break;

case 't':

param.kernel_type = atoi(argv[i]);

break;

case 'd':

param.degree = atoi(argv[i]);

break;

case 'g':

param.gamma = atof(argv[i]);

break;

case 'r':

param.coef0 = atof(argv[i]);

break;

case 'n':

param.nu = atof(argv[i]);

break;

case 'm':

param.cache_size = atof(argv[i]);

break;

case 'c':

param.C = atof(argv[i]);

break;

case 'e':

param.eps = atof(argv[i]);

break;

case 'p':

param.p = atof(argv[i]);

break;

case 'h':

param.shrinking = atoi(argv[i]);

break;

case 'b':

param.probability = atoi(argv[i]);

break;

case 'v':

cross_validation = 1;

nr_fold = atoi(argv[i]);

if(nr_fold < 2)

{

fprintf(stderr,"n-fold cross validation: n must >= 2\n");

exit_with_help();

}

break;

case 'w':

++param.nr_weight;

param.weight_label = (int *)realloc(param.weight_label,sizeof(int)*param.nr_weight);

param.weight = (double *)realloc(param.weight,sizeof(double)*param.nr_weight);

param.weight_label[param.nr_weight-1] = atoi(&argv[i-1][2]);

param.weight[param.nr_weight-1] = atof(argv[i]);

break;

default:

fprintf(stderr,"unknown option\n");

exit_with_help();

}

}

// determine filenames

if(i>=argc)

exit_with_help();

strcpy(input_file_name, argv[i]);

if(i

strcpy(model_file_name,argv[i+1]);

else

{

char *p = strrchr(argv[i],'/');

if(p==NULL)

p = argv[i];

else

++p;

sprintf(model_file_name,"%s.model",p);

}

}

// read in a problem (in svmlight format)

void read_problem(const char *filename)

{

int elements, max_index, i, j;

FILE *fp = fopen(filename,"r");

if(fp == NULL)

{

fprintf(stderr,"can't open input file %s\n",filename);

exit(1);

}

prob.l = 0;

elements = 0;

while(1)

{

int c = fgetc(fp);

switch(c)

{

case '\n':

++prob.l;

// fall through,

// count the '-1' element

case ':':

++elements;

break;

case EOF:

goto out;

default:

;

}

}

out:

rewind(fp);

prob.y = Malloc(double,prob.l);

prob.x = Malloc(struct svm_node *,prob.l);

x_space = Malloc(struct svm_node,elements);

max_index = 0;

j=0;

for(i=0;i

{

double label;

prob.x[i] = &x_space[j];

fscanf(fp,"%lf",&label);

prob.y[i] = label;

while(1)

{

int c;

do {

c = getc(fp);

if(c=='\n') goto out2;

} while(isspace(c));

ungetc(c,fp);

if (fscanf(fp,"%d:%lf",&(x_space[j].index),&(x_space[j].value)) < 2)

{

fprintf(stderr,"Wrong input format at line %d\n", i+1);

exit(1);

}

++j;

}

out2:

if(j>=1 && x_space[j-1].index > max_index)

max_index = x_space[j-1].index;

x_space[j++].index = -1;

}

if(param.gamma == 0)

param.gamma = 1.0/max_index;

if(param.kernel_type == PRECOMPUTED)

for(i=0;i

{

if (prob.x[i][0].index != 0)

{

fprintf(stderr,"Wrong input format: first column must be 0:sample_serial_number\n");

exit(1);

}

if ((int)prob.x[i][0].value <= 0 || (int)prob.x[i][0].value > max_index)

{

fprintf(stderr,"Wrong input format: sample_serial_number out of range\n");

exit(1);

}

}

fclose(fp);

}

?SVM.h

#ifndef _LIBSVM_H

#define _LIBSVM_H

#ifdef __cplusplus

extern "C" {

#endif

struct svm_node

{

int index;

double value;

};

struct svm_problem

{

int l;

double *y;

struct svm_node **x;

};

enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */ enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */

struct svm_parameter

{

int svm_type;

int kernel_type;

int degree; /* for poly */

double gamma; /* for poly/rbf/sigmoid */

double coef0; /* for poly/sigmoid */

/* these are for training only */

double cache_size; /* in MB */

double eps; /* stopping criteria */

double C; /* for C_SVC, EPSILON_SVR and NU_SVR */

int nr_weight; /* for C_SVC */

int *weight_label; /* for C_SVC */

double* weight; /* for C_SVC */

double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */

double p; /* for EPSILON_SVR */

int shrinking; /* use the shrinking heuristics */

int probability; /* do probability estimates */

};

struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param);

void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target);

int svm_save_model(const char *model_file_name, const struct svm_model *model);

struct svm_model *svm_load_model(const char *model_file_name);

int svm_get_svm_type(const struct svm_model *model);

int svm_get_nr_class(const struct svm_model *model);

void svm_get_labels(const struct svm_model *model, int *label);

double svm_get_svr_probability(const struct svm_model *model);

void svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values);

double svm_predict(const struct svm_model *model, const struct svm_node *x);

double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates);

支持向量机分类器

支持向量机分类器 1 支持向量机的提出与发展 支持向量机( SVM, support vector machine )是数据挖掘中的一项新技术,是借助于最优化方法来解决机器学习问题的新工具,最初由V.Vapnik 等人在1995年首先提出,近几年来在其理论研究和算法实现等方面都取得了很大的进展,开始成为克服“维数灾难”和过学习等困难的强有力的手段,它的理论基础和实现途径的基本框架都已形成。 根据Vapnik & Chervonenkis的统计学习理论 ,如果数据服从某个(固定但未知的)分布,要使机器的实际输出与理想输出之间的偏差尽可能小,则机器应当遵循结构风险最小化 ( SRM,structural risk minimization)原则,而不是经验风险最小化原则,通俗地说就是应当使错误概率的上界最小化。SVM正是这一理论的具体实现。与传统的人工神经网络相比, 它不仅结构简单,而且泛化( generalization)能力明显提高。 2 问题描述 2.1问题引入 假设有分布在Rd空间中的数据,我们希望能够在该空间上找出一个超平面(Hyper-pan),将这一数据分成两类。属于这一类的数据均在超平面的同侧,而属于另一类的数据均在超平面的另一侧。如下图。 比较上图,我们可以发现左图所找出的超平面(虚线),其两平行且与两类数据相切的超平面(实线)之间的距离较近,而右图则具有较大的间隔。而由于我们希望可以找出将两类数据分得较开的超平面,因此右图所找出的是比较好的超平面。 可以将问题简述如下: 设训练的样本输入为xi,i=1,…,l,对应的期望输出为yi∈{+1,-1},其中+1和-1分别代表两类的类别标识,假定分类面方程为ω﹒x+b=0。为使分类面对所有样本正确分类并且具备分类间隔,就要求它满足以下约束条件: 它追求的不仅仅是得到一个能将两类样本分开的分类面,而是要得到一个最优的分类面。 2.2 问题的数学抽象 将上述问题抽象为: 根据给定的训练集

支持向量机及支持向量回归简介

3.支持向量机(回归) 3.1.1 支持向量机 支持向量机(SVM )是美国Vapnik 教授于1990年代提出的,2000年代后成为了很受欢迎的机器学习方法。它将输入样本集合变换到高维空间使得其分离性状况得到改善。它的结构酷似三层感知器,是构造分类规则的通用方法。SVM 方法的贡献在于,它使得人们可以在非常高维的空间中构造出好的分类规则,为分类算法提供了统一的理论框架。作为副产品,SVM 从理论上解释了多层感知器的隐蔽层数目和隐节点数目的作用,因此,将神经网络的学习算法纳入了核技巧范畴。 所谓核技巧,就是找一个核函数(,)K x y 使其满足(,)((),())K x y x y φφ=,代 替在特征空间中内积(),())x y φφ(的计算。因为对于非线性分类,一般是先找一个非线性映射φ将输入数据映射到高维特征空间,使之分离性状况得到很大改观,此时在该特征空间中进行分类,然后再返会原空间,就得到了原输入空间的非线性分类。由于内积运算量相当大,核技巧就是为了降低计算量而生的。 特别, 对特征空间H 为Hilbert 空间的情形,设(,)K x y 是定义在输入空间 n R 上的二元函数,设H 中的规范正交基为12(),(),...,(), ...n x x x φφφ。如果 2 2 1 (,)((),()), {}k k k k k K x y a x y a l φφ∞ == ∈∑ , 那么取1 ()() k k k x a x φφ∞ ==∑ 即为所求的非线性嵌入映射。由于核函数(,)K x y 的定义 域是原来的输入空间,而不是高维的特征空间。因此,巧妙地避开了计算高维内 积 (),())x y φφ(所需付出的计算代价。实际计算中,我们只要选定一个(,)K x y ,

支持向量机算法介绍

支持向量机算法介绍 众所周知,统计模式识别、线性或非线性回归以及人工神经网络等方法是数据挖掘的有效工具,已随着计算机硬件和软件技术的发展得到了广泛的应用。 但多年来我们也受制于一个难题:传统的模式识别或人工神经网络方法都要求有较多的训练样本,而许多实际课题中已知样本较少。对于小样本集,训练结果最好的模型不一定是预报能力最好的模型。因此,如何从小样本集出发,得到预报(推广)能力较好的模型,遂成为模式识别研究领域内的一个难点,即所谓“小样本难题”。支持向量机(support vector machine ,简称SVM )算法已得到国际数据挖掘学术界的重视,并在语音识别、文字识别、药物设计、组合化学、时间序列预测等研究领域得到成功应用。 1、线性可分情形 SVM 算法是从线性可分情况下的最优分类面(Optimal Hyperplane )提出的。所谓最优分类面就是要求分类面不但能将两类样本点无错误地分开,而且要使两类的分类空隙最大。 设线性可分样本集为),(i i y x ,d R x n i ∈=,,,1 ,}1,1{-+∈y ,d 维空间中线性判别函数的一般形式为 ()b x w x g T +=, 分类面方程是 0=+b x w T , 我们将判别函数进行归一化,使两类所有样本都满足()1≥x g ,此时离分类面最近的 样本的 ()1=x g ,而要求分类面对所有样本都能正确分类,就是要求它满足 n i b x w y i T i ,,2,1,01)( =≥-+。 (4)

式(4)中使等号成立的那些样本叫做支持向量(Support Vectors )。两类样本的分类空隙(Margin )的间隔大小: Margin =w /2(5) 因此,最优分类面问题可以表示成如下的约束优化问题,即在条件(4)的约束下,求函数 ())(2 1221w w w w T == φ(6) 的最小值。为此,可以定义如下的Lagrange 函数: ]1)([21),,(1 -+-=∑=b x w y a w w a b w L i T i n i i T (7) 其中,0≥i a 为Lagrange 系数,我们的问题是对w 和b 求Lagrange 函数的最小值。把式(7)分别对w 、b 、i a 求偏微分并令它们等于0,得: i i n i i x y a w w L ∑==?=??10 001 =?=??∑=i n i i y a b L 0]1)([0=-+?=??b x w y a a L i T i i i 以上三式加上原约束条件可以把原问题转化为如下凸二次规划的对偶问题: () ???? ? ???? ==≥∑∑∑∑====-0,,1,0.m a x 1111 21i n i i i j T i j i j n i n j i n i i y a n i a t s x x y y a a a (8) 这是一个不等式约束下二次函数机制问题,存在唯一最优解。若*i a 为最优解,则 ∑== n i i i i x y a w 1* * (9) *i a 不为零的样本即为支持向量,因此,最优分类面的权系数向量是支持向量的线性组合。

支持向量机数据分类预测

支持向量机数据分类预测 一、题目——意大利葡萄酒种类识别 Wine数据来源为UCI数据库,记录同一区域三种品种葡萄酒的化学成分,数据有178个样本,每个样本含有13个特征分量。50%做为训练集,50%做为测试集。 二、模型建立 模型的建立首先需要从原始数据里把训练集和测试集提取出来,然后进行一定的预处理,必要时进行特征提取,之后用训练集对SVM进行训练,再用得到的模型来预测试集的分类。 三、Matlab实现 3.1 选定训练集和测试集 在178个样本集中,将每个类分成两组,重新组合数据,一部分作为训练集,一部分作为测试集。 % 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量 load chapter12_wine.mat; % 选定训练集和测试集 % 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集 train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)]; % 相应的训练集的标签也要分离出来 train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)]; % 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集 test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)]; % 相应的测试集的标签也要分离出来 test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)]; 3.2数据预处理 对数据进行归一化: %% 数据预处理 % 数据预处理,将训练集和测试集归一化到[0,1]区间 [mtrain,ntrain] = size(train_wine); [mtest,ntest] = size(test_wine); dataset = [train_wine;test_wine]; % mapminmax为MATLAB自带的归一化函数 [dataset_scale,ps] = mapminmax(dataset',0,1); dataset_scale = dataset_scale';

用于分类的支持向量机

文章编号:100228743(2004)0320075204 用于分类的支持向量机 黄发良,钟 智Ξ (1.广西师范大学计算机系,广西桂林541000;  2.广西师范学院数学与计算机科学系,广西南宁530001) 摘 要:支持向量机是20世纪90年代中期发展起来的机器学习技术,建立在结构风险最小化原理之上的支持向量机以其独有的优点吸引着广大研究者,该文着重于用于分类的支持向量机,对其基本原理与主要的训练算法进行介绍,并对其用途作了一定的探索. 关键词:支持向量机;机器学习;分类 中图分类号:TP181 文献标识码:A 支持向量机S VM (Support Vector Machine )是AT&T Bell 实验室的V.Vapnik 提出的针对分类和回归问题的统计学习理论.由于S VM 方法具有许多引人注目的优点和有前途的实验性能,越来越受重视,该技术已成为机器学习研究领域中的热点,并取得很理想的效果,如人脸识别、手写体数字识别和网页分类等. S VM 的主要思想可以概括为两点:(1)它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能;(2)它基于结构风险最小化理论之上在特征空间中建构最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界. 1 基本原理 支持向量机理论最初来源于数据分类问题的处理,S VM 就是要寻找一个满足要求的分割平面,使训练集中的点距离该平面尽可能地远,即寻求一个分割平面使其两侧的margin 尽可能最大. 设输入模式集合{x i }∈R n 由两类点组成,如果x i 属于第1类,则y i =1,如果x i 属于第2类,则y i =-1,那么有训练样本集合{x i ,y i },i =1,2,3,…,n ,支持向量机的目标就是要根据结构风险最小化原理,构造一个目标函数将两类模式尽可能地区分开来,通常分为两类情况来讨论,(1)线性可分,(2)线性不可分. 1.1 线性可分情况 在线性可分的情况下,就会存在一个超平面使得训练样本完全分开,该超平面可描述为: w ?x +b =0(1) 其中,“?”是点积,w 是n 维向量,b 为偏移量. 最优超平面是使得每一类数据与超平面距离最近的向量与超平面之间的距离最大的这样的平面.最优超平面可以通过解下面的二次优化问题来获得: min <(w )= 12‖w ‖2(2) Ξ收稿日期:2004202206作者简介:黄发良(1975-),男,湖南永州人,硕士研究生;研究方向:数据挖掘、web 信息检索. 2004年9月 广西师范学院学报(自然科学版)Sep.2004 第21卷第3期 Journal of G u angxi T eachers Education U niversity(N atural Science Edition) V ol.21N o.3

基于支持向量机的分类方法

基于支持向量机的分类方法 摘要:本文首先概述了支持向量机的相关理论,引出了支持向量机的基本模型。当训练集的两类样本点集重合区域很大时,线性支持向量分类机就不适用了,由此介绍了核函数相关概念。然后进行了核函数的实验仿真,并将支持向量机应用于实例肿瘤诊断,建立了相应的支持向量机模型,从而对测试集进行分类。最后提出了一种支持向量机的改进算法,即根据类向心度对复杂的训练样本进行预删减。 1、支持向量机 给定训练样本集1122{[,],[,], ,[,]}()l l l T a y a y a y Y =∈Ω?L ,其中n i a R ∈Ω=,Ω是输入空间,每一个点i a 由n 个属性特征组成,{1,1},1,,i y Y i l ∈=-=L 。分类 就是在基于训练集在样本空间中找到一个划分超平面,将不同的类别分开,划分超平面可通过线性方程来描述: 0T a b ω+= 其中12(;;;)d ωωωω=K 是法向量,决定了超平面的方向,b 是位移项,决定 了超平面与原点之间的距离。样本空间中任意点到超平面的距离为|| |||| T a b r ωω+=。 支持向量、间隔: 假设超平面能将训练样本正确分类,即对于[,]i i a y T ∈,若1i y =+,则有 0T i a b ω+>,若1i y =-,则有0T i a b ω+<。则有距离超平面最近的几个训练样本点使得 11 11 T i i T i i a b y a b y ωω?+≥+=+?+≤-=-? 中的等号成立,这几个训练样本点被称为支持向量;两个异类支持向量到超平面 的距离之和2 |||| r ω=被称为间隔。 支持向量机基本模型: 找到具有最大间隔的划分超平面,即 ,2max ||||..()1,1,2,...,b T i i s t y a b i m ωωω+≥= 这等价于 2 ,||||min 2..()1,1,2,...,b T i i s t y a b i m ωωω+≥= 这就是支持向量机(SVM )的基本模型。 支持向量机问题的特点是目标函数2 ||||2 ω是ω的凸函数,并且约束条件都是 线性的。

随机森林与支持向量机分类性能比较

随机森林与支持向量机分类性能比较 黄衍,查伟雄 (华东交通大学交通运输与经济研究所,南昌 330013) 摘要:随机森林是一种性能优越的分类器。为了使国内学者更深入地了解其性能,通过将其与已在国内得到广泛应用的支持向量机进行数据实验比较,客观地展示其分类性能。实验选取了20个UCI数据集,从泛化能力、噪声鲁棒性和不平衡分类三个主要方面进行,得到的结论可为研究者选择和使用分类器提供有价值的参考。 关键词:随机森林;支持向量机;分类 中图分类号:O235 文献标识码: A Comparison on Classification Performance between Random Forests and Support Vector Machine HUANG Yan, ZHA Weixiong (Institute of Transportation and Economics, East China Jiaotong University, Nanchang 330013, China)【Abstract】Random Forests is an excellent classifier. In order to make Chinese scholars fully understand its performance, this paper compared it with Support Vector Machine widely used in China by means of data experiments to objectively show its classification performance. The experiments, using 20 UCI data sets, were carried out from three main aspects: generalization, noise robustness and imbalanced data classification. Experimental results can provide references for classifiers’ choice and use. 【Key words】Random Forests; Support Vector Machine; classification 0 引言 分类是数据挖掘领域研究的主要问题之一,分类器作为解决问题的工具一直是研究的热点。常用的分类器有决策树、逻辑回归、贝叶斯、神经网络等,这些分类器都有各自的性能特点。本文研究的随机森林[1](Random Forests,RF)是由Breiman提出的一种基于CART 决策树的组合分类器。其优越的性能使其在国外的生物、医学、经济、管理等众多领域到了广泛的应用,而国内对其的研究和应用还比较少[2]。为了使国内学者对该方法有一个更深入的了解,本文将其与分类性能优越的支持向量机[3](Support Vector Machine,SVM)进行数据实验比较,客观地展示其分类性能。本文选取了UCI机器学习数据库[4]的20个数据集作为实验数据,通过大量的数据实验,从泛化能力、噪声鲁棒性和不平衡分类三个主要方面进行比较,为研究者选择和使用分类器提供有价值的参考。 1 分类器介绍 1.1 随机森林 随机森林作为一种组合分类器,其算法由以下三步实现: 1. 采用bootstrap抽样技术从原始数据集中抽取n tree个训练集,每个训练集的大小约为原始数据集的三分之二。 2. 为每一个bootstrap训练集分别建立分类回归树(Classification and Regression Tree,CART),共产生n tree棵决策树构成一片“森林”,这些决策树均不进行剪枝(unpruned)。在作者简介:黄衍(1986-),男,硕士研究生,主要研究方向:数据挖掘与统计分析。 通信联系人:查伟雄,男,博士,教授,主要研究方向:交通运输与经济统计分析。 E-mail: huangyan189@https://www.360docs.net/doc/dd7250360.html,.

3.支持向量机(回归)

3.支持向量机(回归) 3.1.1 支持向量机 支持向量机(SVM是美国Vapnik教授于1990年代提出的,2000年代后成为了很受欢迎的机器学习方法。它将输入样本集合变换到高维空间使得其分离性状况得到改善。它的结构酷似三层感知器,是构造分类规则的通用方法。SVh方法的贡献在于,它使得人们可以在非常高维的空间中构造出好的分类规则,为分类算法提供了统一的理论框架。作为副产品,SVM从理论上解释了多层感知器的 隐蔽层数目和隐节点数目的作用,因此,将神经网络的学习算法纳入了核技巧范畴。 所谓核技巧,就是找一个核函数K(x, y)使其满足K(x,y) ( (x), (y)),代 替在特征空间中内积((x), (y))的计算。因为对于非线性分类,一般是先找一个非线性映射将输入数据映射到高维特征空间,使之分离性状况得到很大改观,此时在该特征空间中进行分类,然后再返会原空间,就得到了原输入空间的非线性分类。由于内积运算量相当大,核技巧就是为了降低计算量而生的。 特别,对特征空间H为Hilbert空间的情形,设K(x, y)是定义在输入空间 R n上的二元函数,设H中的规范正交基为1(x), 2(x),..., n(x), ...。如果 2 K(x, y) a k ( k(x), k(y)), k 1 那么取(x) 3k k(x)即为所求的非线性嵌入映射。由于核函数K(x,y)的定义k 1 域是原来的输入空间,而不是高维的特征空间。因此,巧妙地避开了计算高维内积((x), (y))所需付出的计算代价。实际计算中,我们只要选定一个K(x,y), 并不去重构嵌入映射(x) a k k(x)。所以寻找核函数K(x,y)(对称且非负) k 1

支持向量机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维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。回头看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛

支持向量机非线性回归通用MATLAB源码

支持向量机非线性回归通用MA TLAB源码 支持向量机和BP神经网络都可以用来做非线性回归拟合,但它们的原理是不相同的,支持向量机基于结构风险最小化理论,普遍认为其泛化能力要比神经网络的强。大量仿真证实,支持向量机的泛化能力强于BP网络,而且能避免神经网络的固有缺陷——训练结果不稳定。本源码可以用于线性回归、非线性回归、非线性函数拟合、数据建模、预测、分类等多种应用场合,GreenSim团队推荐您使用。 function [Alpha1,Alpha2,Alpha,Flag,B]=SVMNR(X,Y,Epsilon,C,TKF,Para1,Para2) %% % SVMNR.m % Support Vector Machine for Nonlinear Regression % All rights reserved %% % 支持向量机非线性回归通用程序 % GreenSim团队原创作品,转载请注明 % GreenSim团队长期从事算法设计、代写程序等业务 % 欢迎访问GreenSim——算法仿真团队→ % 程序功能: % 使用支持向量机进行非线性回归,得到非线性函数y=f(x1,x2,…,xn)的支持向量解析式,% 求解二次规划时调用了优化工具箱的quadprog函数。本函数在程序入口处对数据进行了% [-1,1]的归一化处理,所以计算得到的回归解析式的系数是针对归一化数据的,仿真测 % 试需使用与本函数配套的Regression函数。 % 主要参考文献: % 朱国强,刘士荣等.支持向量机及其在函数逼近中的应用.华东理工大学学报 % 输入参数列表 % X 输入样本原始数据,n×l的矩阵,n为变量个数,l为样本个数 % Y 输出样本原始数据,1×l的矩阵,l为样本个数 % Epsilon ε不敏感损失函数的参数,Epsilon越大,支持向量越少 % C 惩罚系数,C过大或过小,泛化能力变差 % TKF Type of Kernel Function 核函数类型 % TKF=1 线性核函数,注意:使用线性核函数,将进行支持向量机的线性回归 % TKF=2 多项式核函数 % TKF=3 径向基核函数 % TKF=4 指数核函数 % TKF=5 Sigmoid核函数 % TKF=任意其它值,自定义核函数 % Para1 核函数中的第一个参数 % Para2 核函数中的第二个参数 % 注:关于核函数参数的定义请见Regression.m和SVMNR.m内部的定义 % 输出参数列表 % Alpha1 α系数 % Alpha2 α*系数 % Alpha 支持向量的加权系数(α-α*)向量

遥感作业-关于计算机解译中的专家系统分类法与支持向量机分类法的阐述

关于计算机解译中的专家系统分类法与支持向量机分类法 的阐述 摘要:本文从什么叫计算机目视解译,专家系统分类法、支持向量机分类法的概念三个方面进行了阐述。进一步详细地了解了什么是遥感图像的计算机目视解译,以及专家系统分类法与支持向量机的前沿应用 关键字:计算机目视解译专家系统分类法支持向量机分来法 遥感图像的目视解译又称目视判断,或目视判译,它指专家人员通过直接观察或借助辅助判读仪器在遥感图像上获取特定目标地物信息的过程。 目视解译的目的是从遥感图像中获取需要的地学专题地图,它需要解决的问题是判读出遥感图像中有哪些地物,他们分布在哪里,并对其数量特征给予粗略的估计。 地面各种目标地物在遥感图像中存在着不同的色、形、位的差异。构成了可供识别的目标地物特征。目视解译人员依据目标地物的特征,作为分析、解译、理解和识别遥感图像的基础。目视解译的主要步骤是:从已知到未知,先易后难,先地表后深部,先整体后局部,先宏观后微观,先图形后线形。 专家系统是一个智能计算机程序系统,其内部含有大量的某个领域专家水平的知识与经验,能够利用人类专家的知识和解决问题的方法来处理该领域问题。也就是说,专家系统是一个具有大量的专门知识与经验的程序系统,它应用人工智能技术和计算机技术,根据某领域一个或多个专家提供的知识和经验,进行推理和判断,模拟人类专家的决策过程,以便解决那些需要人类专家处理的复杂问题,简而言之,专家系统是一种模拟人类专家解决领域问题的计算机程序系统。 专家系统通常由人机交互界面、知识库、推理机、解释器、综合数据库、知识获取等6个部分构成。其中尤以知识库与推理机相互分离而别具特色。专家系统的体系结构随专家系统的类型、功能和规模的不同,而有所差异。 为了使计算机能运用专家的领域知识,必须要采用一定的方式表示知识。目前常用的知识表示方式有产生式规则、语义网络、框架、状态空间、逻辑模式、脚本、过程、面向对象等。基于规则的产生式系统是目前实现知识运用最基本的方法。产生式系统由综合数据库、知识库和推理机3个主要部分组成,综合数据

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可以自动寻找那些对分类有较大区分能力的支持向量,由此构造出分类器,可以将类与类之间的间隔最大化,因而有较好的推广性和较高的分类准确率。 最优分类面(超平面)和支持向量

支持向量机SMO算法汇总

支持向量机SMO算法 1 简介 支持向量机基本上是最好的有监督学习算法了。最开始接触SVM是去年暑假的时候,老师要求交《统计学习理论》的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相关概念。这次斯坦福提供的学习材料,让我重新学习了一些SVM知识。我看很多正统的讲法都是从VC 维理论和结构风险最小原理出发,然后引出SVM什么的,还有些资料上来就讲分类超平面什么的。这份材料从前几节讲的logistic回归出发,引出了SVM,既揭示了模型间的联系,也让人觉得过渡更自然。 2 重新审视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)只不过是用来映 射,真实的类别决定权还在。还有当时,=1,反之=0。如果我们只从 出发,希望模型达到的目标无非就是让训练数据中y=1的特征,而是y=0的特征 。Logistic回归就是要学习得到,使得正例的特征远大于0,负例的特征远小于0, 强调在全部训练实例上达到这个目标。 图形化表示如下: 中间那条线是,logistic回顾强调所有点尽可能地远离中间那条线。学习出的结果也就 中间那条线。考虑上面3个点A、B和C。从图中我们可以确定A是×类别的,然而C我们是不太确定的,B还算能够确定。这样我们可以得出结论,我们更应该关心靠近中间分割线的点,让他们尽可能地远离中间线,而不是在所有点上达到最优。因为那样的话,要使得一部分点靠近中间线来换取另外一部分点更加远离中间线。我想这就是支持向量机的思路和logistic回归的不同点,一个考虑局部(不关心已经确定远离的点),一个考虑全局(已经远离的点可能通过调整中间线使其能够更加远离)。这是我的个人直观理解。

实验2分类预测模型-支持向量机

实验2分类预测模型——支持向量机SVM 一、 实验目的 1. 了解和掌握支持向量机的基本原理。 2. 熟悉一些基本的建模仿真软件(比如SPSS 、Matlab 等)的操作和使用。 3. 通过仿真实验,进一步理解和掌握支持向量机的运行机制,以及其运用的场景,特别是在分类和预测中的应用。 二、 实验环境 PC 机一台,SPSS 、Matlab 等软件平台。 三、 理论分析 1. SVM 的基本思想 支持向量机(Support Vector Machine, SVM ),是Vapnik 等人根据统计学习理论中结构风险最小化原则提出的。SVM 能够尽量提高学习机的推广能力,即使由有限数据集得到的判别函数,其对独立的测试集仍能够得到较小的误差。此外,支持向量机是一个凸二次优化问题,能够保证找到的极值解就是全局最优解。这希尔特点使支持向量机成为一种优秀的基于机器学习的算法。 SVM 是从线性可分情况下的最优分类面发展而来的,其基本思想可用图1所示的二维情况说明。 图1最优分类面示意图 图1中,空心点和实心点代表两类数据样本,H 为分类线,H1、H2分别为过各类中离分类线最近的数据样本且平行于分类线的直线,他们之间的距离叫做分类间隔(margin )。所谓最优分类线,就是要求分类线不但能将两类正确分开,使训练错误率为0,而且还要使分类间隔最大。前者保证分类风险最小;后者(即:分类间隔最大)使推广性的界中的置信范围最小,从而时真实风险最小。推广到高维空间,最优分类线就成为了最优分类面。 2. 核函数 ω

支持向量机的成功源于两项关键技术:利用SVM 原则设计具有最大间隔的最优分类面;在高维特征空间中设计前述的最有分类面,利用核函数的技巧得到输入空间中的非线性学习算法。其中,第二项技术就是核函数方法,就是当前一个非常活跃的研究领域。核函数方法就是用非线性变换 Φ 将n 维矢量空间中的随机矢量x 映射到高维特征空间,在高维特征空间中设计线性学习算法,若其中各坐标分量间相互作用仅限于内积,则不需要非线性变换 Φ 的具体形式,只要用满足Mercer 条件的核函数替换线性算法中的内积,就能得到原输入空间中对应的非线性算法。 常用的满足Mercer 条件的核函数有多项式函数、径向基函数和Sigmoid 函数等,选用不同的核函数可构造不同的支持向量机。在实践中,核的选择并未导致结果准确率的很大差别。 3. SVM 的两个重要应用:分类与回归 分类和回归是实际应用中比较重要的两类方法。SVM 分类的思想来源于统计学习理论,其基本思想是构造一个超平面作为分类判别平面,使两类数据样本之间的间隔最大。SVM 分类问题可细分为线性可分、近似线性可分及非线性可分三种情况。SVM 训练和分类过程如图2所示。 图2 SVM 训练和分类过程 SVM 回归问题与分类问题有些相似,给定的数据样本集合为 x i ,y i ,…, x n ,y n 。其中,x i x i ∈R,i =1,2,3…n 。与分类问题不同,这里的 y i 可取任意实数。回归问题就是给定一个新的输入样本x ,根据给定的数据样本推断他所对应的输出y 是多少。如图3-1所示,“×”表示给定数据集中的样本点,回归所要寻找的函数 f x 所对应的曲线。同分类器算法的思路一样,回归算法需要定义一个损失函数,该函数可以忽略真实值某个上下范围内的误差,这种类型的函数也就是 ε 不敏感损失函数。变量ξ度量了训练点上误差的代价,在 ε 不敏感区内误差为0。损失函数的解以函数最小化为特征,使用 ε 不敏感损失函数就有这个优势,以确保全局最小解的存在和可靠泛化界的优化。图3-2显示了具有ε 不敏感带的回归函数。 o x y 图3-1 回归问题几何示意图 o x y 图3-2 回归函数的不敏感地

基于支持向量机回归模型的海量数据预测

2007,43(5)ComputerEngineeringandApplications计算机工程与应用 1问题的提出 航空公司在客舱服务部逐步实行“费用包干”政策,即:综合各方面的因素,总公司每年给客舱服务部一定额度的经费,由客舱服务部提供客舱服务,而客舱服务产生的所有费用,由客舱服务部在“费用包干额度”中自行支配。新的政策既给客舱服务部的管理带来了机遇,同时也带来了很大的挑战。通过“费用包干”政策的实施,公司希望能够充分调用客舱服务部的积极性和主动性,进一步改进管理手段,促进新的现代化管理机制的形成。 为了进行合理的分配,必须首先搞清楚部门的各项成本、成本构成、成本之间的相互关系。本文首先对成本组成进行分析,然后用回归模型和支持向量机预测模型对未来的成本进行预测[1-3],并对预测结果的评价和选取情况进行了分析。 2问题的分析 由于客舱服务部的特殊性,“费用包干”政策的一项重要内容就集中在小时费的重新分配问题上,因为作为客舱乘务员的主要组成部分—— —“老合同”员工的基本工资、年龄工资以及一些补贴都有相应的政策对应,属于相对固定的部分,至少目前还不是调整的最好时机。乘务员的小时费收入则是根据各自的飞行小时来确定的变动收入,是当前可以灵活调整的部分。实际上,对于绝大多数员工来说,小时费是其主要的收入部分,因此,用于反映乘务人员劳动强度的小时费就必然地成为改革的重要部分。 现在知道飞行小时和客万公里可能和未来的成本支出有关系,在当前的数据库中有以往的飞行小时(月)数据以及客万公里数据,并且同时知道各月的支出成本,现在希望预测在知道未来计划飞行小时和市场部门希望达到的客万公里的情况下的成本支出。 根据我们对问题的了解,可以先建立这个部门的成本层次模型,搞清楚部门的各项成本、成本构成、成本之间的相互关系。这样,可以对部门成本支出建立一个层次模型:人力资源成本、单独预算成本、管理成本,这三个部分又可以分别继续分层 次细分,如图1所示。 基于支持向量机回归模型的海量数据预测 郭水霞1,王一夫1,陈安2 GUOShui-xia1,WANGYi-fu1,CHENAn2 1.湖南师范大学数学与计算机科学学院,长沙410081 2.中国科学院科技政策与管理科学研究所,北京100080 1.CollegeofMath.andComputer,HunanNormalUniversity,Changsha410081,China 2.InstituteofPolicyandManagement,ChineseAcademyofSciences,Beijing100080,China E-mail:guoshuixia@sina.com GUOShui-xia,WANGYi-fu,CHENAn.Predictiononhugedatabaseontheregressionmodelofsupportvectormachine.ComputerEngineeringandApplications,2007,43(5):12-14. Abstract:Asanimportantmethodandtechnique,predictionhasbeenwidelyappliedinmanyareas.Withtheincreasingamountofdata,predictionfromhugedatabasebecomesmoreandmoreimportant.Basedonthebasicprincipleofvectormachineandim-plementarithmetic,apredictionsysteminfrastructureonanaircompanyisproposedinthispaper.Lastly,therulesofevaluationandselectionofthepredictionmodelsarediscussed. Keywords:prediction;datamining;supportvectormachine;regressionmodel 摘要:预测是很多行业都需要的一项方法和技术,随着数据积累的越来越多,基于海量数据的预测越来越重要,在介绍支持向量机基本原理和实现算法的基础上,给出了航空服务成本预测模型,最后对预测结果的评价和选取情况进行了分析。 关键词:预测;数据挖掘;支持向量机;回归模型 文章编号:1002-8331(2007)05-0012-03文献标识码:A中图分类号:TP18 基金项目:国家自然科学基金(theNationalNaturalScienceFoundationofChinaunderGrantNo.10571051);湖南省教育厅资助科研课题(theResearchProjectofDepartmentofEducationofHunanProvince,ChinaunderGrantNo.06C523)。 作者简介:郭水霞(1975-),女,博士生,讲师,主要研究领域为统计分析;王一夫(1971-),男,博士生,副教授,主要研究领域为计算机应用技术,软件工程技术;陈安(1970-),男,副研究员,主要研究领域为数据挖掘与决策分析。 12

基于matlab的svm分类预测实现

2017年第3期信息通信2017 (总第171 期)INFORMATION & COMMUNICATIONS (Sum. No 171)基于matlab的svm分类预测实现 屈玉涛,邓万宇 (西安邮电大学,陕西西安710061) 摘要:支持向量机(英文简称SVM)可以很好地应用在数据分类及预测上,由于SVM在数据挖掘中具有通用性好、有效 性、计算简单、理论完善等优点,所以得到了广泛的应用,文章利用matlab软件,基于S V M实现了对意大利葡萄酒的分 类和预测。 关键词:SVM;分类;预测 中图分类号:TP393 文献标识码:A文章编号:1673-1131(2017)03-0033-02 〇引言 随着数据种类的增多以及数量的增长,人工处理数据已 经变得不太现实。B P神经网络在过去获得了大量的应用,但 由于其具有收敛速度慢,容易陷入局部最小值得缺点,BP神经 网络并不能很好地处理实际中的问题。支持向量机是一种分 类算法,通过最大化不同数据之间边缘距离来提高学习及其 各种方面的能力,能够构建出更为精确的分类模型,另外,也 能够在统计取样较少的情况下,得出较好的统计规律,即,统 计样本少,统计规律良好。 1阐述支持向量机的具体情况 所谓支持向量机是Vapnik以及Corinna Cortes等人于 1995年首先提出的,它的应用范围广泛,较为突出的应用是在 非线性回归以及模式分类等方面。支持向量机的最本质的作 用就是把一个分类的超平面当作为决策曲面,这样就会让正 例以及反例之间的间隔被其最大边缘化。SV M被广泛地应用 在自然语言处理、计算机视觉和机器学习中。 支持向量机优点很多,最突出的表现在下面五个方面,一 是不需要进行微调整,即鲁棒性;二是具有很强的通用性,可 以在各种函数中来集中构造其函数;三是具有非常明显的有 效性,可以解决各种事迹问题,并且非常有效;四是涉及的理 论较为完善,具备V C推广性的理论构架;五是计算较为简单, 能够利用较为简单的优化计算就能够实现计算。 例如:SV M的目标函数如公式(1)所示: r f{x) = w(x} + /)? r".⑴=> :(〇? —〇l )K(x,,x) +b i=1 其中w*代表的是一个d维的向量,b代表的是偏差。输 入数据X的一个非线性的映射。K为核函数,(a rai*)为拉格 朗日乘子,X为输入,Y为输出。 classnumber=3,记录的是类别数目; wine,178*13的一个double型矩阵,记录178个样本的 13个属性; wine lables,178*1的一个double型矩阵,记录178个样本的类标 2.2数据可视化图 wme数据的box可视化图Proline 00280/00315 of diluted v Hue Color intensitys Proanthocyanms Nonflavanoid phenols Flavanoids Total phenols Magnesium Alcalinity of ash Ash Malic acid Alcohol 图i数据的可视化图 3模型的建立 3.1选定训练集与预测集 在这178个样本中,1?59属于第一类,60?130属于 第二类,131?178属于第三类。现将每个类别分成两组,重 新组合数据,分为训练集(train_wine)和测试集(test_wine)。 第一步:将第一类中的1 ^30样本,第二类中660至95 样本,第三类中的131-153样本当做其训练集 代码表示为: trainwine= [wine(l:30,:);wine(60:95,:);wine(131:153,:)]; 第二对其训练集的标签进行分离 2葡萄酒种类识别相关背景 Wine数据的来源是U CI数据库,记录的是意大利同一区 域上三种不同类型葡萄酒的化学成分分析,数据集里含有178 个样本,每个样本含有13个属性,即化学成分,将每个样本的 类别用标签进行标注,并且已经给出相应标签,,然后将178个 样本的一半看做一个训练集,而另一半当做一个测试集,然后 用这个训练集对SV M进行训练,进而得到其分类模型,再用 得到的模型对测试集进行类标签的预测。 2.1对相关数据进行测试 整体数据存储在wine_data,数据可以从U C I数据库中下 载,数据内容为: 代码表示为: trainwinelabels =[wine_labels(l:30);wine_labels(60:95); wine_labels(131:153)]; ^三步:将第一类中的31至59样本,第二类中的96至 130样本,第三类中的154至178样本当做其测试集 代码表示为: test_wine= [wine(31:59,:);wine(96:130,:);wine(154:178,:)]; 第四步:对其测试集的标签进行分离 代码表示为: test wine labels =[wine_labels (31: 59); wine labels (96: 130);wine_labels(154:178)] 33

相关文档
最新文档