SVM资料汇编

SVM资料汇编
SVM资料汇编

.SVM资料汇编

1.svm中参数的选择方法

libsvm的使用流程

2.libsvm

2.

3.如何用gridregression.py进行参数优化

LIBSVM中参数的意义

4.LIBSVM

4.

5.libsvm简介

6.使用FormatDataLibsvm.xls将数据格式化成SVM需要的格式

7.中文人名自动识别的一种有效方法

1.svm中参数的选择方法

支持向量机参数的取值直接影响到分类器的学习能力和推广能力。通常通过计算分类器的推广误差来衡量参数的优劣,常用的方法有K重交叉验证和留一法。

K重交叉验证法:该方法是最为普遍的计算推广误差的方法之一。其过程为:将训练样本集随机分为K个集合,通常分为K等份,对其中的K-1个集合进行训练,得到一个决策函数,并用决策函数对剩下的一个集合进行样本测试。该过程重复K次,取K次过程中的测试错误的平均值作为推广误差。

留一法:该方法可以说是K重交叉验证法的极端情况,即K=L,L为整个训练样本集的大小。该过程为:对于第i个训练样本,将其取出,对剩下L-1个样本进行训练,得到决策函数,并用其测试第i个训练样本,该过程重复L次,用此方法求出的误差对于实际中的测试误差来说几乎是无偏的。

2.libsvm的使用流程

用libsvm来做应用,需要依次运行svmscale.exe,svmtrain.exe,svmpredict.exe等命令,其实更简单的方法是使用easy.py,而且方便从matlab中用dos或system命令调用。如果你需要对很多数据集做多次试验然后取平均值的话,这是很有用的,可以节省你大量的精力。但是从台湾人网站上下载的libsvm工具包里带的easy.py运行会出错,经过研究发现是目录不对,经修改运行正常,修改后的脚本文件在附件中。

1、需要安装windows版本的python和绘图软件gnuplot.exe,python到网上搜一下就可以找到,gnuplot.exe在本贴附件gp373w32目录下。

2、下载台湾人的libsvm工具包,然后下载本贴附件,解压覆盖原文件。

3、修改easy.py和grid.py最上方两行有关libsvm、python和gnuplot的路径的代码。其中,s vmpath代表svmscale.exe、svmtrain.exe等可执行文件的路径,pythonpath代表easy.py和g rid.py等脚本文件路径,gnuplotpath代表pgnuplot.exe的路径。

注意:

a.脚本文件里似乎不能用“.\”和"..\"等相对路径。

b.路径最后面不要带反斜杠"\",即

svmpath="g:\Specialty\Tools\Libsvm-2.6"

不能写成

svmpath="g:\Specialty\Tools\Libsvm-2.6\"。

c.不要更改脚本文件的格式,比如缩进。

4、grid.py默认采用5倍交叉验证,对c采用的搜索范围和步长分别为[-10,15]和1,g的为[10,-15]和-1,请根据需要自行修改grid.py。

5、关于libsvm的数据格式:

a.FormatSplitBat.m是一个批量将以Tab或者空格分隔的数据转换为libsvm格式,并且分成占全部数据比例为p的训练集和1-p的测试集,然后调用easy.py的例子。

b.手工转换数据格式,可以通过excel文件FormatDataLibsvm.xls打开包含数据的文本文件,然后用宏将数据转换为libsvm格式。也可以用宏将libsvm格式的数据转换回来。

3.如何用gridregression.py进行参数优化

在用支持向量机进行分类或回归时,较重要的参数有C,和g。怎么进行参数优化,前面已经介绍过一些方法,这里介绍下怎么使用libsvm的功能来优化参数。

-p尽量选个比较小的数字。需要仔细调整的重要参数是-c和-g。除非用gridregression.py来搜索最优参数,否则只能自己慢慢试了。

用gridregression.py搜索最优参数的方法如下:

python d:\bishe\libsvm-2.84\python\grid.py-log2c-10,10,1-log2g-10,10,1-s3-v10-svmtrain D:\bishe\libsvm-2.84\windows\svmtrain.exe-gnuplot D:\bishe\gp373w32\pgnuplot.exeD:\bishe\li

bsvm-2.84\2.scaled>D:\bishe\libsvm-2.84\2.parameter

注意:-svmtrain是给出svmtrain.exe所在路径,一定要是完整的全路径

-gnuplot是给出pgnuplot.exe所在路径。这里要用pgnuplot.exe这种命令行形式的,不要用w gnupl32.exe,这个是图形界面的。

-log2c是给出参数c的范围和步长

-log2g是给出参数g的范围和步长

-log2p是给出参数p的范围和步长

上面三个参数可以用默认范围和步长

-s选择SVM类型,也是只能选3或者4

-t是选择核函数

-v10将训练数据分成10份做交叉验证。默认为5

最后给出归一化后训练数据的全路径

搜索最优参数的过程写入文件gridregression_feature.parameter(注意别少了这个>符号啊)

根据搜索到的最优参数修改feature.scaled.model中的参数

=====================================================

不明白的是按道理应该是用gridregression.py,可以实际上不行,用如上面的grid.py却可以,看网上说gridregression.py是根据grid.py修改的,不知道到底是怎么回事。

4.LIBSVM中参数的意义

比如在输入

svmtrain heart_scale时

这样输出optimization finished,#iter=26

nu=0.531390

obj=-3.95190,rho=0.794635

nSV=15,nBSV=0

Total nSV=15

===========================================

obj是对偶SVM问题的最佳目标值,rho是决策函数的偏置项,nSV和nBSV是支持向量和有界支持向量的个数,nu-svm是C-SVM中的C用nu代替的另一种支持向量机形式,nu就是对应的参数,更多的细节你可以参考https://www.360docs.net/doc/763457945.html,.tw/~cjlin/papers/libsvm.pdf 5.使用FormatDataLibsvm.xls将数据格式化成SVM需要的格式

先运行FormatDataLibsvm.xls然后将数据粘贴到sheet1的topleft单元

再再"工具"-->"宏"-->执行下面有一个选项(FormatDatatoLibsvm),要选中这个然后运行就可以了,这时数据转换的问题就解决了,可是现在生成的数据是.xls格式,

它还是不能做为libsvm的训练文件啊!还需要怎么转换呢?可以copy到一个记事本中即可。但是注意在用libsvm的时候要在命令行输入.txt后缀。

以下转自nut99的文章

更简单地,先打开FormatDataForLibsvm.xls,然后将需要格式化的数据粘贴到Excel的Shee t1的TopLeft单元,再运行菜单中的“宏...”即可。

注意,宏安全性应当设置为中或者低。输入数据的格式是

条件属性a条件属性b...决策属性

75 (2)

42 (1)

输出数据格式是

决策属性条件属性a条件属性b...

21:72:5...

11:42:2...

6.libsvm简介

SVM,Support Vector Machine,简而言之它是个起源与人工神经网络有点像的东西,現今最常拿来就是做分类。也就是说,如果我有一堆已经分好类的东西(可是分类的依据是未

知的),那当收到新的东西时,SVM可以預测新的数据要分到哪一堆去。听起来是很神奇的事(如果你觉得不神奇,请重想一想这句话代表什么:分类的依据是未知的!,还是不神奇的话就请你写个程序,解解上面的问題),不过SVM基于统计学习理论的,可以在合理的时间內漂亮的解决这个问題。

以图形化的例子来说明,假定我在空间中标了一堆用顏色分类的点,点的顏色就是它的类別,位置就是它的数据,那SVM就可以找出区隔这些点的程序,依此就可以分出一个个的区域;拿到新的点(数据)时,只要对照该位置在哪一区就可以找出它应该是哪一顏色(类別)了。当然SVM不是真的只有分区那么简单,不过看上面的例子应该可以了解SVM大概在作什么.要对SVM再多懂一点点,可以参考cjlin在data mining课的slides:pdf

或ps。我们可以把SVM当个黑盒子,数据丟进去让他处理然后我们再来用就好了.

哪里得到SVM?

libsvm当然是最完美的工具.下載处:libsvm.zip或者libsvm.tar.gz

.zip跟.tar.gz基本上是一样的,只是看你的操作系统;习惯上Windows用.zip

比较方便(因为有WinZIP,也有WinRAR),UNIX则是用.tar.gz

编译libsvm

解开来后,假定是UNIX系统,直接打make就可以了;编不出来的话请详读说明和运用常识.因为这是指南,所以我不花时间细谈,而且编不出来的情形真是少之又少,通常一定是你的系统有问題。其他的子目录可以不管,只要svm-train,svm-scale,svm-predict 三个执行文件有就可以了.Windows的用戶要自己重编当然也是可以,不过已经有编好的执行文件在里面了:请检查windows子目录,应该会有svmtrain.exe,svmscale.exe,svmpred ict.exe,svmtoy.exe.

SVM的使用

libsvm有很多种用法,这篇指南只打算讲简单的部分.

程序

svmtrain

训练数据.跑SVM被戏称为"开火車"也是由于这个程序名而来.train会接受特定格式的输入,产生一个"Model"文件.这个model你可以想像成SVM的內部数据,因为预测要model才能预测,不能直接吃原始数据.想想也很合理,假定train本身是很耗时的动作,而train可以以某种形式存起內部数据,那下次要预测时直接把那些內部数据载入就快多了. svmpredict

依照已经训练好的model,再加上给定的输入(新值),输出預测新值所对应的类別.

svmscale

扫描数据.因为原始数据可能范围过大或过小,svmscale可以先将数据重新scale (縮放)到适当范围使训练与预测速度更快。

文件格式

文件格式要先交代一下.你可以参考libsvm里面附的"heart_scale":这是SVM 的输入文件格式.

[label][index1]:[value1][index2]:[value2]...

[label][index1]:[value1][index2]:[value2]...

一行一条记录数据,如:

+11:0.7082:13:14:-0.3205:-0.1056:-1

label

或说是class,就是你要分类的种类,通常是一些整数。

index

是有順序的索引,通常是连续的整数。

value

就是用来train的数据,通常是一堆实数。

每一行都是如上的結构,意思就是:我有一排数据,分別是value1,value2,....value,(而且它们的順序已由index分別指定),这排数据的分类結果就是label。

或許你会不太懂,为什么会是value1,value2,....这样一排呢?这牵涉到SVM的原理。你可以这样想(我沒说这是正确的),它的名字就叫Support"Vector"Machine,所以输入的训练数据是"Vector"(向量),也就是一排的x1,x2,x3,...这些值就是value,而x [n]的n就是由index指定。这些东西又称为"(属性)attribute"。

真实的情况是,大部份时候我们给定的数据可能有很多"特征(feature)"或说"属性(attribute)",所以输入会是一组的。举例来说,以前面点分区的例子来说,我们不是每个点都有X跟Y的坐标吗?所以它就有两种属性。假定我有两个点:(0,3)跟(5,8)分別在label(class)1跟2,那就会写成

11:02:3

21:52:8

同理,空间中的三維坐标就等于有三组属性。这种文件格式最大的好处就是可以使用稀疏矩阵(sparse matrix),或说有些数据的属性可以有缺失。

运行libsvm

下来解释一下libsvm的程序怎么用。你可以先拿libsvm附的heart_scale来做输入,底下也以它为例:

看到这里你应该也了解,使用SVM的流程大概就是:

1.准备数据并做成指定格式(有必要时需svmscale)

2.用svmtrain来训练成model

3.对新的输入,使用svmpredic来预测新数据的类别.

svmtrain

svmtrain的语法大致就是:

svmtrain[options]training_set_file[model_file]

training_set_file就是之前的格式,而model_file如果不给就会叫[training_set_file].model。

options可以先不要给。

下列程序执行結果会产生heart_scale.model文件:(螢幕输出不是很重要,沒有错誤就好了)

./svmtrain heart_scale

optimization finished,#iter=219

nu=0.431030

obj=-100.877286,rho=0.424632

nSV=132,nBSV=107

Total nSV=132

svmpredict

svmpredict的语法是:

svmpredict test_file model_file output_file

test_file就是我们要预测的数据。它的格式跟svmtrain的输入,也就是training_set_f ile是一样的,不过每行最前面的label可以省略(因为预测就是要预测那个label)。但如果test_file有label的值的话,predict完会順便拿predict出来的值跟test_file里面写的

值去做比对,这代表:test_file写的label是真正的分类結果,拿来跟我们预测的結果比对就可以知道预测的效果。所以,我们可以拿原training set当做test_file再丟给svmpredict 去预测(因为格式一样),看看正确率有多高,方便后面调参数。其它参数就很好理解了:model_file就是svmtrain出来的文件,output_file是存输出結果的文件案。输出的格式很简单,每行一个label,对应到你的test_file里面的各行。下列程序执行結果会产生hear t_scale.out:

./svm-predict heart_scale heart_scale.model heart_scale.out

Accuracy=86.6667%(234/270)(classification)

Mean squared error=0.533333(regression)

Squared correlation coefficient=0.532639(regression)

我们把原输入丟回去predict,第一行的Accuracy就是預测的正确率了。如果输入沒有lab el的话,那就是真的预测了。看到这里,基本上你应该已经可以利用svm来作事了:你只要写程序输出正确格式的数据,交给svm去train,后来再predict并读入結果即可。

Advanced Topics

后面可以说是一些稍微进阶的部份,我可能不会讲的很清楚,因为我的重点是想表达一些观念和解释一些你看相关文件时很容易碰到的名詞。

Scaling

svm-scale目前不太好用,不过它有其必要性。因为适当的扫描有助于参数的选择,还有解svm的速度。svmscale会对每个属性做扫描。范围用-l,-u指定,通常是[0,1]或是[-1, 1]。输出在stdout。另外要注意的(常常会忘记)是testing data和training data要一起扫描。而svm-scale最难用的地方就是沒办法指定testing data/training data(不同文件)然后一起扫描。

文件重定向符号“>”将结果另存为指定的文件。

使用实例:

1)svmscale–s train3.range train3>train3.scale

表示采用缺省值(即对属性值缩放到[-1,1]的范围,对目标值不进行缩放)

对数据集train3进行缩放操作,其结果缩放规则文件保存为train3.range,缩放集的缩放结果保存为train3.scale。

2)svmscale–r train3.range test3>test3.scale

表示载入缩放规则train3.range后按照其上下限对应的特征值和上下限值线

性的地对数据集test3进行缩放,结果保存为test3.scale。

Arguments

前面提到,在train的时候可以使用一些参数。(直接执行svm-train不指定输入文件与参数会列出所有参数及语法说明)这些参数对应到原始SVM公式的一些参数,所以会影响预测的正确与否。

举例来说,改个c=10:

./svm-train-c10heart_scale

再来预测,正确率馬上变成92.2%(249/270)。

Cross Validation

一般而言,SVM使用的方式(在决定参数时)常是这样:

1.先有已分好类的一堆数据

2.随机拆成好几组训练集

3.用某组参数去训练并预测別组,看正确率

4.正确率不够的话,换参数再重复训练/预测

等找到一组不错的参数后,就拿这组参数来建model并用来做最后对未知数据的预测。这整个过程叫cross validation,也就是交叉比对。在我们找参数的过程中,可以利用svmtr ain的內建交叉比对功能来帮忙:

-v n:n-fold cross validation

n就是要拆成几组,像n=3就会拆成三组,然后先拿1跟2来训练并预测3以得到正确率;再来拿2跟3训练并预测1,最后1,3训练并预测2。其它以此类推。如果沒有交叉比对的话,很容易找到只在特定输入时好的参数。像前面我们c=10得到92.2%,不过拿-v5来看看:

./svm-train-v5-c10heart_scale

Cross Validation Accuracy=80.3704%

平均之后才只有80.37%,比一开始的86还差。

What arguments rules?

通常而言,比较重要的参数是gamma(-g)跟cost(-c)。而交叉比对(-v)的参数常用5。c ost預设值是1,gamma預设值是1/k,k等于输入数据条数。那我们怎么知道要用多少来当参数呢?

TRY就是尝试找比较好的参数值。Try参数的过程是用指数增长的方式来增加与減少参数的数值,也就是2^n(2的n次方)。因为有两组参数,所以等于要尝试n*n=n^2次。这个过程是不连续的成长,所以可以想象成我们在一个X-Y平面上指定的范围內找一群格子点(grid,如果你不太明白,想成方格紙或我们把平面上所有整数交点都打个点,就是那样),每个格子点的X跟Y经过换算(如2^x,2^y)就拿去当cost跟gamma的值来交叉比对。所以現在你应该懂得libsvm的python子目录下面有个grid.py是做啥的了:它把上面的过程自动化,在你给定的范围內呼叫svm-train去尝试所有的参数值。grid.py还会把結果绘制出来,方便你尋找参数。libsvm有很多跟python結合的部份,由此可見python 是強大方便的工具。很多神奇的功能,像自动登入多台机器去平行跑grid等等都是python 帮忙的。不过SVM本身可以完全不需要python,只是会比较方便。跑grid(基本上用grid. py跑当然是最方便,不过如果你不懂python而且觉得很难搞,那你要自己产生参数来跑也是可以的)通常好的范围是[c,g]=[2^-10,2^10]*[2^-10,2^10]另外其实grid用[-8,8]也很够了。

Regression(衰减)

另一个值得一提的是regression(衰减)。简单来说,前面都是拿SVM来做分类,所以l abel的值都是离散的数据、或说已知的固定值。而regression则是求连续的值、或说未知的值。你也可以说,一般是二分类问题,而regression是可以預测一个实数。

比如说我知道股市指数受到某些因素影响,然后我想預测股市。股市的指数就是我们的label,那些因素量化以后变成属性。以后收集那些属性给SVM它就会預测出指数(可能是沒出現过的数字),这就要用regression。那对于开奖的号码呢?因为都是固定已知的数字,很明显我们应该用一般SVM的分类来预测。(註这是真实的例子--llwang就写过这样的东西)所以说label也要扫描,用svm-scale-y lower upper但是比较糟糕的情况是grid.py不支持regression,而且较差对比对regression也常常不是很有效。

7.中文人名自动识别的一种有效方法

https://www.360docs.net/doc/763457945.html,/uploads/200708/09_101105_.pdf

(完整word版)支持向量机(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 等人根据统计学习理论提出的一种新的机器学习方法,它以结构风险最小化原则为理论基础,通过适当地选择函数子集及该子集中的判别函数,使学习机器的实际风险达到最小,保证了通过有限训练样本得到的小误差分类器,对独立测试集的测试误差仍然较小。 支持向量机的基本思想:首先,在线性可分情况下,在原空间寻找两类样本的最优分类超平面。在线性不可分的情况下,加入了松弛变量进行分析,通过使用非线性映射将低维输

基于支持向量机的图像分类研究

目录 摘要 (2) Abstract (3) 1 引言 (3) 1.1 概述 (4) 1.2 统计学习理论 (4) 1.3 支持向量机及其发展简史 (5) 1.4 研究内容及其现实意义 (6) 2 持向量机模型的建立 (7) 2.1 SVM核函数 (7) 2.2 核函数的选择 (8) 2.3 SVM算法简介 (8) 2.4 SVM学习算法的步骤 (9) 3 图像内容的描述及特征提取 (10) 3.1 图像内容的描述模型 (10) 3.2 颜色特征的描述 (10) 3.2.1 颜色的表示和颜色模型 (10) 3.2.2 颜色直方图 (11) 3.2.3 累积颜色直方图 (12) 3.2.4 主色 (12) 3.3 纹理特征的描述 (12) 4 基于SVM的图像分类方法研究 (13) 4.1 分类系统的结构 (13) 4.1.1 特征提取模块 (13) 4.1.2 SVM分类模块 (13) 4.2 特征提取策略 (14) 4.3 实验 (14) 4.3.1 三种核函数的选择比较实验 (14) 4.3.2 基于颜色特征的图像分类 (17) 4.3.3 基于纹理特征的图像分类 (17) 4.3.4 基于综合特征的图像分类 (17) 5 结论 (18) 参考文献 (19)

摘要 支持向量机(SVM)方法是建立在统计学习理论基础之上的,克服了神经网络分类和传统统计分类方法的许多缺点,具有较高的泛化性能。但是,由于支持向量机尚处在发展阶段,很多方面尚不完善,现有成果多局限于理论分析,而应用显得较薄弱,因此研究和完善利用支持向量机进行图像分类对进一步推进支持向量机在图像分析领域的应用具有积极的推动作用。本文研究了图像的颜色、纹理等特征对利用支持向量机进行图像分类的影响。对支持向量机在图像分类中的应用作了较全面的研究。对三种核函数进行了对比实验,实验表明二项式核函数较高斯核函数和sigmoid核函数具有更强的泛化能力;同时,通过实验分析了特征选取对向量机性能的影响,发现综合特征有利于分类效果的提高。在以上研究的基础上,我们建立了一个基于svM的图像分类实验平台,讨论了系统的组成模块和功能,给出了一些图像分类实例,并验证了前述理论研究的结果。 关键词:统计学习理论支持向量机图像分类特征提取

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

svmtrain和svmpredict简介回归、分类

svmtrain和svmpredict简介 分类:SVM 本文主要介绍了SVM工具箱中svmtrain和svmpredict两个主要函数: (1)model= svmtrain(train_label, train_matrix, ['libsvm_options']); 其中: train_label表示训练集的标签。 train_matrix表示训练集的属性矩阵。 libsvm_options是需要设置的一系列参数,各个参数可参见《libsvm 参数说明.txt》,里面介绍的很详细,中英文都有的。如果用 回归的话,其中的-s参数值应为3。 model:是训练得到的模型,是一个结构体(如果参数中用到-v,得到的就不是结构体,对于分类问题,得到的是交叉检验下的平均分类准确 率;对于回归问题,得到的是均方误差)。 (2)[predicted_label, accuracy/mse,decision_values/prob_estimates] =svmpredict(test_label, test_matrix, model, ['libsvm_options']); 其中: test _label表示测试集的标签(这个值可以不知道,因为作预测的时候,本来就是想知道这个值的,这个时候,随便制定一个值就可以 了,只是这个时候得到的mse就没有意义了)。 test _matrix表示测试集的属性矩阵。 model 是上面训练得到的模型。 libsvm_options是需要设置的一系列参数。 predicted_label表示预测得到的标签。 accuracy/mse是一个3*1的列向量,其中第1个数字用于分类问题,表示分类准确率;后两个数字用于回归问题,第2个数字 表示mse;第三个数字表示平方相关系数(也就是说,如 果分类的话,看第一个数字就可以了;回归的话,看后两 个数字)。 decision_values/prob_estimates:第三个返回值,一个矩阵包含决策

选取SVM中参数c和g的最佳值

写了个程序来选取SVM中参数c和g的最佳值. [写这个的目的是方便大家用这个小程序直接来寻找c和g的最佳值,不用再另外编写东西了.] 其实原本libsvm C语言版本中有相应的子程序可以找到最佳的c和g,需装载python语言然后用py 那个画图就可以找到最佳的c和g,我写了个matlab版本的.算是弥补了libsvm在matlab版本下的空缺. 测试数据还是我视频里的wine data. 寻找最佳c和g的思想仍然是让c和g在一定的范围里跑(比如 c = 2^(-5),2^(-4),...,2^(5),g = 2^(-5),2^(-4),...,2^(5)),然后用cross validation的想法找到是的准确率最高的c和g,在这里我做了一点修改(纯粹是个人的一点小经验和想法),我改进的是: 因为会有不同的c和g都对应最高的的准确率,我把具有最小c的那组c和g认为是最佳的c和g,因为惩罚参数不能设置太高,很高的惩罚参数能使得validation数据的准确率提高,但过高的惩罚参数c会造成过学习状态,反正从我用SVM到现在,往往都是惩罚参数c过高会导致最终测试集合的准确率并不是很理想.. 在使用这个程序时也有小技巧,可以先大范围粗糙的找比较理想的c和g,然后再细范围找更加理想的c和g. 比如首先让c = 2^(-5),2^(-4),...,2^(5),g = 2^(-5),2^(-4),...,2^(5)在这个范围找比较理想的c和g,如图:

====== 此时bestc = 0.5,bestg=1,bestacc = 98.8764[cross validation 的准确率] 最终测试集合的准确率Accuracy = 96.6292% (86/89) (classification) ====== 此时看到可以把c和g的范围缩小.还有步进的大小也可以缩小(程序里都有参数可以自己调节,也有默认值可不调节). 让c = 2^(-2),2^(-1.5),...,2^(4),g = 2^(-4),2^(-3.5),...,2^(4)在这个范围找比较理想的c 和g,如图: ============= 此时bestc = 0.3536,bestg=0.7017,bestacc = 98.8764[cross validation 的准确率] 最终测试集合的准确率Accuracy = 96.6292% (86/89) (classification) ===================上面第二个的测试的代码: 1.load wine_SVM;

基于libsvm的gist和phog特征的图像分类研究

研究生技术报告题目:基于libsvm的图像分类研究 编号:20132098 执笔人:刘金环 完成时间:2013-11-23

摘要 随着科学技术的飞速发展,机器学习与人工智能技术的不断创新,人们对特定信息检索的需求逐渐增加,使得如何对资源进行合理有效的分类成为一个关键问题。支持向量机(SVM)是一种建立在统计学习理论基础之上的机器学习方法,由于其基于小样本训练的优越性,被广泛应用于模式识别的各个领域,在图像检索、人脸识别等中充分了体现了其优越性,越来越受到广泛的关注和重视。 本文主要介绍了基于libsvm分类器的分类问题。本文以gist和phog特征为例简单实现了图像的分类问题,并通过查询准确性对这两种分类方法进行对比和分析。由仿真结果可知,gist特征分类要好于phog的特征分类,仿真效果较为理想。

目录 1 课题意义..................................................................................................... 错误!未定义书签。 2 技术要求及性能指标................................................................................. 错误!未定义书签。3方案设计及算法原理.................................................................................. 错误!未定义书签。 3.1基于libsvm的gist特征提取分类.............................................. 错误!未定义书签。 3.1.1算法原理 (1) 3.1.2设计框图 (2) 3.2基于libsvm的phog特征提取分类.............................................. 错误!未定义书签。 3.2.1算法原理.............................................................................. 错误!未定义书签。 3.2.2设计框图.............................................................................. 错误!未定义书签。4代码及相关注释. (4) 4.1基于libsvm的gist特征提取分类仿真结果 (6) 4.1.1代码及注释 (9) 4.1.2测试结果 (9) 4.2基于libsvm的phog特征提取分类仿真结果 (9) 4.2.1代码及注释 (9) 4.2.2测试结果 (12) 4.3基于libsvm的gist特征分类不同训练集测试结果.................. 错误!未定义书签。 4.3.1代码及注释.......................................................................... 错误!未定义书签。 4.3.2测试结果 (14) 5实验结果分析.............................................................................................. 错误!未定义书签。6总结 ............................................................................................................. 错误!未定义书签。

LIBSVM使用介绍

附录1:LIBSVM的简单介绍 1. LIBSVM软件包简介 LIBSVM是台湾大学林智仁(Chih-Jen Lin)博士等开发设计的一个操作简单、易于使用、快速有效的通用SVM软件包,可以解决分类问题(包括C SVC ?、SVC ν?)、回归问题(包括SVR ε?、SVR ν?)以及分布估计(on e class SVM ??)等问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。LIBSVM是一个开源的软件包,需要者都可以免费的从作者的个人主页https://www.360docs.net/doc/763457945.html,.tw/~cjlin/处获得。他不仅提供了LIBSVM的C++语言的算法源代码,还提供了Python、Java、R、MA TLAB、Perl、Ruby、LabVIEW 以及C#.net等各种语言的接口,可以方便的在Windows或UNIX平台下使用,也便于科研工作者根据自己的需要进行改进(譬如设计使用符合自己特定问题需要的核函数等)。另外还提供了WINDOWS平台下的可视化操作工具SVM-toy,并且在进行模型参数选择时可以绘制出交叉验证精度的等高线图。 2. LIBSVM使用方法简介 LIBSVM在给出源代码的同时还提供了Windows操作系统下的可执行文件,包括:进行支持向量机训练的svmtrain.exe;根据已获得的支持向量机模型对数据集进行预测的svmpredict.exe;以及对训练数据与测试数据进行简单缩放操作的svmscale.exe。它们都可以直接在DOS环境中使用。如果下载的包中只有C++的源代码,则也可以自己在VC等软件上编译生成可执行文件。 LIBSVM使用的一般步骤是: 1)按照LIBSVM软件包所要求的格式准备数据集; 2)对数据进行简单的缩放操作; 3)考虑选用RBF核函数 2 (,)x y K x y eγ?? =; 4)采用交叉验证选择最佳参数C与γ;

SVM分类方法在人脸图像分类中的应用

SVM分类方法在人脸图像分类中的应用 摘要:本文首先简要综述了人脸识别技术中不同的特征提取方法和分类方法;然后介绍了支持向量机(SVM)的原理、核函数类型选择以及核参数选择原则以及其在人脸分类识别中了应用,最后通过在构建的人脸库上的仿真实验观测观测不同的特征提取方法对人脸识别率的影响、不同的学习样本数对人脸识别率的影响、支持向量机选用不同的核函数后对人脸识别率的影响、支持向量机选用不同的核参数后对人脸识别率的影响。 一、人脸识别简介 人脸识别也就是利用计算机分析人脸图象,进而从中提取出有效的识别信息,用来“辨认”身份的一门技术。人脸识别技术应用背景广泛,可用于公安系统的罪犯身份识别、驾驶执照及护照等与实际持证人的核对、银行及海关的监控系统及自动门卫系统等。 常见的人脸识别方法包括基于KL变换的特征脸识别、基于形状和灰度分离的可变形模型识别、基于小波特征的弹性匹配、基于传统的部件建模识别、基于神经网络的识别、基于支持向量机的识别等。其中特征脸方法、神经网络方法、基于支持向量机的方法等是基于整体人脸的识别,而基于提取眼睛等部件特征而形成特征向量的方法就是基于人脸特征的识别。 虽然人类的人脸识别能力很强,能够记住并辨别上千个不同人脸,可是计算机则困难多了。其表现在:人脸表情丰富;人脸随年龄增长而变化;人脸所成图象受光照、成象角度及成象距离等影响;而且从二维图象重建三维人脸是病态过程,目前尚没有很好的描述人脸的三维模型。另外,人脸识别还涉及到图象处理、计算机视觉、模式识别以及神经网络等学科,也和人脑的认识程度紧密相关。这诸多因素使得人脸识别成为一项极富挑战性的课题。 通常人类进行人脸识别依靠的感觉器官包括视觉、听觉、嗅觉与触觉等。一般人脸的识别可以用单个感官完成,也可以是多感官相配合来存储和检索人脸。而计算机的人脸识别所利用的则主要是视觉数据。另外计算机人脸识别的进展还受限于对人类本身识别系统的认识程度。研究表明,人类视觉数据的处理是一个

libsvm简单介绍

在用林智仁老师的LIBSVM-2.82做SVM回归的过程中,深深得益于网上共享的学习笔记以及一些热心网友的帮助(哪怕只是一句提醒),前面想着一定要写个学习笔记。自己会用了之后,突然发现原来值得讲出来的实在很少,甚至不想再写什么。想到自己花大概两个月才把一个程序跑明白,觉得还是因为其中有些让自己头疼的问题的,想必其他学习者未尝不需要多花功夫琢磨这些,未免浪费时间(技术问题嘛),还是写一个简单的学习笔记,把自己觉得最要弄明白的难点记下来吧。 装microsoft Visualstudio 6.0(是装python需要的,可能是需要c语言的环境吧) 装gnuplot :gp400win32 装python 试运行程序中遇到的问题 读PYTHON写的GRID.PY程序 问题1:程序的路径指定问题在程序的相关语句中指出调用的程序的路径 注意类似: D:\programm files\gnuplot.exe 这样的路径会报错,因为程序在读语句时在programm后面断句,而不是把programm files整体当作一个路径 问题2:命令行运行PYTHON 以及输入参数 E:\libsvm-2.82\tools>python gridregcopy.py,首先进入到PYTHON程序的上一级路径然后用python接程序名称以及参数 当时的问题是怎么也弄不明白PYTHON程序自带的几个操作窗口都不能进行程序的运行。呵呵,好像都只是脚本编辑器(反正我能用命令行运行就可以了——何况加一个"!"就可以在MA TLAB中执行)。 另外关于参数,读原程序怎么也不懂,看了魏忠的学习笔记才明白的: OS.ARGV 可以在命令行输入,作为OS.ARGV列表的值。但是注意OS.ARGV[0]默认的就是所执行的程序本身,也就是除了输入的N个参数,OS.ARGV列表实际上有N+1个值,其中输入的第一个参数就是OS.ARGV[1],也就是它的第二个参数。 问题3:参数选择程序跑不动 提示: worker local quit 晕了几天后面终于明白不是程序有问题,是因为数据量太大,程序直接溢出的缘故:注意有一个参数-M 用来选择缓存的大小。 subset这个程序仍然运行不了——不知道自己的数据和程序包里给出的例子有什么区别。不过我的s数据量小,这个不能用不碍事。 注意: testing data/training data(不同文件) 需要一起scale。 也就是要把测试集和训练集在一个框架下进行归一化处理,很容易想见的道理(可是容易忽

毕业设计(论文)-基于SVM的图像分类系统设计文档

LANZHOU UNIVERSITY OF TECHNOLOGY 毕业设计 题目基于SVM的图象分类系统 学生姓名 学号 专业班级计算机科学与技术3班 指导教师 学院计算机与通信学院 答辩日期

摘要 支持向量机(SVM)方法是建立在统计学习理论基础之上的,克服了神经网络分类和传统统计分类方法的许多缺点,具有较高的泛化性能。但是,由于支持向量机尚处在发展阶段,很多方面尚不完善,现有成果多局限于理论分析,而应用显得较薄弱,因此研究和完善利用支持向量机进行图像分类对进一步推进支持向量机在图像分析领域的应用具有积极的推动作用。 本文通过支持向量机技术和图像特征提取技术实现了一个图像分类实验系统。文中首先引入了支持向量机概念,对支持向量机做了较全面的介绍;然后,讨论了图像特征的描述和提取方法,对图像的颜色矩特征做了详细的描述,对svm分类也做了详细的说明;最后讨论了由分类结果所表现的一些问题。测试结果表明,利用图像颜色矩特征的分类方法是可行的,并且推断出采用综合特征方法比采用单一特征方法进行分类得到的结果要更令人满意。 关键词:支持向量机图像分类特征提取颜色矩

Abstract The support vector machine (SVM) method is based on statistical learning theory foundation, overcome the neural network classification and traditional statistical classification method of faults, and has high generalization performance. But, because the support vector machine (SVM) is still in the development stage, many still not perfect, the existing results more limited to the theoretical analysis, and the use of appear more weak and therefore study and improve the use of support vector machines to image classification support vector machine to further advance in the application of image analysis play a positive role in promoting. In this paper, support vector machine (SVM) technology and image feature extraction technology implements a image classification experiment system. This paper first introduces the concept of support vector machine (SVM), the support vector machine (SVM) made a more comprehensive introduction; Then, discussed the image characteristics of description and extraction method, the image color moment features described in detail, also made detailed instructions for the SVM classification; Finally discussed the classification results of some problems. Test results show that using the torque characteristics of the image color classification method is feasible, and deduce the comprehensive characteristic method than using single feature method to classify the results are more satisfactory. Keywords: support vector machine image classification feature extraction Color Moment

支持向量机(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的图像分类的研究

第27卷第1期计算机应用与软件V01.27No.12010年1月ComputerApplicationsandSoftwareJan.2010 基于自适应特征选择和SVM的图像分类的研究 潘崇朱红斌 (丽水学院计算机与信息工程学院浙江丽水323000) 摘要提出多特征结合的图像分类方法,分别提取颜色特征和LBP纹理特征,同时提出Adaboost算法对特征进行选择,选择最能表示图像的特征,这样既降低了特征的维数,又提高了分类的精度。最后对基于SVM的多类图像分类方法进行了研究,提出在二类支持向量机的基础上构造多类分类器的方法,实验结果表明,提出的方法能够很好地用于图像分类。 关键词图像分类支持向量机特征选择Adaboost算法 oNIMAGECLASSIFICATIONBASEDoNADAPTIVEFEATURESELECTIoN ANDSUPPORTVECTORMACHINE PanChongZhuHongbin (CollegeofComputerandInformationEngineering,LishuiUniversity,Lishui 323000,撕昭,China) AbstractAnimageclassificationmethodofmulti.featuremergeneeisproposedinthispaper,itextractsrespectivelythecolourfeatureandLBPtexturefeature,meanwhileAdaboostalgorithmisputforwardforfeatureselecting.Bychoosingthefeaturewhichrepresentsimagethebest.itc明bothreducefeature’Sdimensionandimproveclassificationprecision.Intheendofthispaper,themethodofmulti。classimageclas?sificationbasedonsupportvectormachineisstudied,andtheapproachofconstructingthemulti-classclassifierbasedontwo。classSVMisproposed.Experimentalresultsshowthattheproposedapproach hasgoodperformanceinimageclassification? KeywordsImageclassificationSupportvectormachineFeatureselectionAdaboostalgorithm 0引言 随着数字图像处理技术的发展和实际应用的需要,图像分类识别技术应运而生。例如从遥感图像中识别出各种农作物、森林资源、矿产资源等,用人工地震波形图寻找有油的岩层结构,根据医学x光图像分析各种病变,邮政系统中的信函自动分拣等等,都需要对图像中的各种对象进行区别分类。图像的计算机分类,是模式识别技术在图像领域中的具体运用,它的目的是研制能够自动处理图像信息的计算机系统,以便代替人们完成图像的分类和识别的任务【1.21。 基于内容的|冬I像分类对图像数据库的检索、图像过滤、图像识别等具有霞要意义,研究人员已做了一些有意义的工作。文献[3]中基于图像的颜色和主方向特征利用KNN分类器实现了室内/室外的图像分类。文献[4]使用支持向量机分类器实现r基于颜色直方图的图像分类系统。文献[5]中利用Bayes-tan分类器实现了基于空间颜色矩和边缘方向直方图的室内/室外、城市/自然风景图像分类。这些方法都只用到了图像的颜色特征,由于各种对象的复杂性以及干扰因素的多样性,使得这些分类方法的分类精度较低。 本文提出多特征结合的图像分类方法,分别采用颜色特征和LBP纹理特征,同时采用Adaboost对特征进行选择,选择最能表示图像的特征,这样既降低了特征的维数,又提高J,分类的精度。最后提fIj在一类支持向量机的基础|二构造多类分类器的方法,实验表明,提出的方法具有良好的分类性能。1自适应特征选择 1.1特征 本文采用二种不同类型特征空间中的特征:颜色特征和LBP纹理特征。这二种特征均可以进行快速计算。 1.1.1颜色特征 我们采用文献[6]据出的颜色特征空间中的方法,颜色特征空间: Fl兰{埘1R+硼2G+tl,381wj∈[一2,一1,0,+I,+2]}(1)式中埘。对应于一2到2之间的整数,这样的组合可以达到53种,但最终选择了其中的49种特征作为我们的颜色特征旧1。 1.1.2LBP纹理特征 LBP(1_x,calbinarypaRern)"1作为纹理算子可以很好地用来分析图像纹理特征。假定给定图像函数l(x,Y),为了刻画图像像素点在某邻域内的灰度变化,考虑像素点的mxm邻域,LBP纹理算子计算公式如下: 2m一1 LBP(x。,儿)=∑s(,P一,c)2’ 其中Ic、L分别为中心(‰,Y。)处及邻域内各像素点的灰度值,s(茁)为一个二值函数,定义如下: 收稿日期:2008—08—23。潘崇,硕士,主研领域:图形图像,嵌入式系统。 万方数据

支持向量机的介绍讲解

支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: ?如何使用OpenCV函数CvSVM::train训练一个SVM分类器,以及用CvSVM::predict测试训练结果。 支持向量机(SVM) 是一个类分类器,正式的定义是一个能够将不同类样本在样本空间分隔的超平面。换句话说,给定一些标记(label)好的训练样本(监督式学习), SVM算法输出一个最优化的分隔超平面。 如何来界定一个超平面是不是最优的呢? 考虑如下问题: 假设给定一些分属于两类的2维点,这些点可以通过直线分割,我们要找到一条最优的分割线. Note 在这个示例中,我们考虑卡迪尔平面内的点与线,而不是高维的向量与超平面。 这一简化是为了让我们以更加直觉的方式建立起对SVM概念的理解,但是其基本的原理同样适用于更高维的样本分类情形。

在上面的图中,你可以直觉的观察到有多种可能的直线可以将样本分开。那是不是某条直线比其他的更加合适呢? 我们可以凭直觉来定义一条评价直线好坏的标准: 距离样本太近的直线不是最优的,因为这样的直线对噪声敏感度高,泛化性较差。因此我们的目标是找到一条直线,离所有点的距离最远。 由此,SVM算法的实质是找出一个能够将某个值最大化的超平面,这个值就是超平面离所有训练样本的最小距离。这个最小距离用SVM术语来说叫做间隔(margin)。概括一下,最优分割超平面最大化训练数据的间隔。 下面的公式定义了超平面的表达式: 叫做权重向量,叫做偏置(bias)。 See also 关于超平面的更加详细的说明可以参考T. Hastie, R. Tibshirani 和J. H. Friedman的书籍Elements of Statistical Learning,section 4.5 (Seperating Hyperplanes)。

(1)matlab中SVM工具箱的使用方法

包已经解压到文件夹F:\R2009b\toolbox\svm matlab中SVM工具箱的使用方法 1,下载SVM工具箱:https://www.360docs.net/doc/763457945.html,/faculty/chzheng/bishe/indexfiles/indexl.htm 2,安装到matlab文件夹中 1)将下载的SVM工具箱的文件夹放在\matlab71\toolbox\下 2)打开matlab->File->Set Path中添加SVM工具箱的文件夹 现在,就成功的添加成功了. 可以测试一下:在matlab中输入which svcoutput 回车,如果可以正确显示路径,就证明添加成功了,例如: C:\Program Files\MATLAB71\toolbox\svm\svcoutput.m 3,用SVM做分类的使用方法 1)在matlab中输入必要的参数:X,Y,ker,C,p1,p2 我做的测试中取的数据为: N = 50; n=2*N; randn('state',6); x1 = randn(2,N) y1 = ones(1,N); x2 = 5+randn(2,N); y2 = -ones(1,N); figure; plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.'); axis([-3 8 -3 8]); title('C-SVC') hold on; X1 = [x1,x2]; Y1 = [y1,y2]; X=X1'; Y=Y1'; 其中,X是100*2的矩阵,Y是100*1的矩阵 C=Inf;

ker='linear'; global p1 p2 p1=3; p2=1; 然后,在matlab中输入:[nsv alpha bias] = svc(X,Y,ker,C),回车之后,会显示: Support Vector Classification _____________________________ Constructing ... Optimising ... Execution time: 1.9 seconds Status : OPTIMAL_SOLUTION |w0|^2 : 0.418414 Margin : 3.091912 Sum alpha : 0.418414 Support Vectors : 3 (3.0%) nsv = 3 alpha = 0.0000 0.0000 0.0000 0.0000 0.0000 2)输入预测函数,可以得到与预想的分类结果进行比较. 输入:predictedY = svcoutput(X,Y,X,ker,alpha,bias),回车后得到: predictedY = 1 1 1 1 1 1 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维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。回头看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛

相关文档
最新文档