`
varsoft
  • 浏览: 2441282 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

[转]libsvm的介绍和使用

阅读更多
许多想用lib-svm解决分类或者回归的初学者可能像我一样一开始摸不着头绪。面对长篇的english,头都大了。有好心人把自己的经验总结了,我们就一起共享吧!

附录1:LIBSVM的简单介绍

1. LIBSVM 软件包简介

LIBSVM 是台湾大学林智仁(Chih-Jen Lin)博士等开发设计的一个操作简单、

易于使用、快速有效的通用SVM 软件包,可以解决分类问题(包括C- SVC、

n - SVC )、回归问题(包括e - SVR、n - SVR )以及分布估计(one-class-SVM )

等问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可

以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概

率估计等。LIBSVM 是一个开源的软件包,需要者都可以免费的从作者的个人主页http://www.csie.ntu.edu.tw/~cjlin/ 处获得。他不仅提供了LIBSVM的C++语言的算法源代码,还提供了Python、Java、R、MATLAB、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 K(x,y) e x y = -g - ;

4) 采用交叉验证选择最佳参数C与g ;

5) 采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型;

6) 利用获取的模型进行测试与预测。

一. LIBSVM 使用的数据格式

LIBSVM使用的训练数据和测试数据文件格式如下:

: :< 2> …

其中 是训练数据集的目标值,对于分类,它是标识某类的整数(支持

多个类);对于回归,是任意实数。

是以1 开始的整数,表示特征的序号;

为实数,也就是我们常说的特征值或自变量。当特征值为0 时,特征序号与特征值都可以同时省略,即index可以是不连续的自然数。

与第一个特征序号、前一个特征值与后一个特征序号之间用空格隔开。测试数据文件中的label 只用于计算准确度或误差,如果它是未知的,只需用任意一个数填写这一栏,也可以空着不填。例如:

+1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1 8:1.21

二. svmscale 的用法

对数据集进行缩放的目的在于:

1)避免一些特征值范围过大而另一些特征值范围过小;

2)避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常将数据缩放到[ -1,1]或者是[0,1]之间。

用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper]

[-s save_filename] [-r restore_filename] filename

(缺省值: lower = -1,upper = 1,没有对y进行缩放)

其中,

-l:数据下限标记;lower:缩放后数据下限;

-u:数据上限标记;upper:缩放后数据上限;

-y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;

-s save_filename:表示将缩放的规则保存为文件save_filename;

-r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放;

filename:待缩放的数据文件(要求满足前面所述的格式)。

缩放规则文件可以用文本浏览器打开,看到其格式为:

lower upper

lval1 uval1

lval2 uval2

其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表

示特征序号;lval 为该特征对应转换后下限lower 的特征值;uval 为对应于转换后上限upper 的特征值。

数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的

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

使用实例:

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。

三. svmtrain 的用法

svmtrain实现对训练数据集的训练,获得SVM模型。

用法: svmtrain [options] training_set_file [model_file]

其中,

options(操作参数):可用的选项即表示的涵义如下所示

-s svm类型:设置SVM 类型,默认值为0,可选类型有:

0 -- C- SVC

1 -- n - SVC

2 -- one-class-SVM

3 -- e - SVR

4 -- n - SVR

-t 核函数类型:设置核函数类型,默认值为2,可选类型有:

0 -- 线性核:u'*v

1 -- 多项式核: (g*u'*v+ coef 0)deg ree

2 -- RBF 核:e( u v 2) g -

3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

-d degree:核函数中的degree设置,默认值为3; -g g :设置核函数中的g ,默认值为1/ k ;

-r coef 0:设置核函数中的coef 0,默认值为0;

-c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

-n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;

-p e :设置n - SVR的损失函数中的e ,默认值为0.1;

-m cachesize:设置cache内存大小,以MB为单位,默认值为40;

-e e :设置终止准则中的可容忍偏差,默认值为0.001;

-h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

-b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

-wi weight:对各类样本的惩罚系数C加权,默认值为1;

-v n:n折交叉验证模式。

其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

使用实例:

1)svmtrain train3.scale train3.model

训练train3.scale,将模型保存于文件train3.model,并在dos窗口中输出如下

结果:

optimization finished, #iter = 1756

nu = 0.464223

obj = -551.002342, rho = -0.337784

nSV = 604, nBSV = 557

Total nSV = 604

其中,#iter为迭代次数,nu 与前面的操作参数-n n 相同,obj为SVM文件

转换为的二次规划求解得到的最小值,rho 为判决函数的常数项b,nSV 为支持

向量个数,nBSV为边界上的支持向量个数,Total nSV为支持向量总个数。

训练后的模型保存为文件train3.model,用记事本等文本浏览器打开可以看到其内容如下(其后“%”后内容为笔者所加注释):

svm_type c_svc % 训练所采用的svm类型,此处为C- SVC

kernel_type rbf % 训练采用的核函数类型,此处为RBF核

gamma 0.047619 % 与操作参数设置中的g 含义相同

nr_class 2 % 分类时的类别数,此处为两分类问题

total_sv 604 % 总共的支持向量个数

rho -0.337784 % 决策函数中的常数项b

label 0 1 % 类别标签

nr_sv 314 290 % 各类别标签对应的支持向量个数

SV % 以下为支持向量

1 1:-0.963808 2:0.906788 ... 19:-0.197706 20:-0.928853 21:-1

1 1:-0.885128 2:0.768219 ... 19:-0.452573 20:-0.980591 21:-1

... ... ...

1 1:-0.847359 2:0.485921 ... 19:-0.541457 20:-0.989077 21:-1

% 对于分类问题,上面的支持向量的各列含义与训练数据集相同;对于回归问题,略有不同,与训练数据中的标签label(即y值)所对应的位置在模型文件的支持向量中现在存放的是Lagrange 系数a 值,即为下面决策函数公式中的a 值:

* *

1

() ( )( ( ) ( )) ( ) ( , )

( , )

k

i i i i i i

i i sv

i i

i sv

fx a a x x b a a k x x b

ak x x b

= = - F F + = - +

= + g

四. svmpredict 的用法

svmpredict 是根据训练获得的模型,对数据集合进行预测。

用法:svmpredict [options] test_file model_file output_file

options(操作参数):

-b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,

默认值为0。

model_file 是由svmtrain 产生的模型文件;test_file 是要进行预测的数据文

件;output_file 是svmpredict 的输出文件,表示预测的结果值。svmpredict 没有

其它的选项。
分享到:
评论

相关推荐

    FormatDatalibsvm.xls

    libsvm 数据转换工具,可以将excel格式的数据转换成libsvm格式的数据格式的转换  本人在使用中发现,使用FormatDataLibsvm.xls进行的数据转换应该包括两两种数据的转换,一种是data.xls格式-&gt;data.svm格式的转换...

    FormatDatalLibsvm.xls(.xls->svm格式转换)

    2、打开data.xls,(注:网上很多的介绍都是直接将数据粘贴到sheet1的topleft单元),要特别注意的是这时候的数据排列顺序应该是: 条件属性a 条件属性b ... 决策属性 7 5 ... 2 4 2 ... 1 3、"工具"--&gt;"宏"--&gt...

    ALFASVMLib:ALFASVMLib-一个针对SVM的对抗标签翻转攻击的Matlab库

    它库依赖于 Libsvm (ver&gt;3.17) 和 CVX 求解器。 包含的标签翻转攻击算法的目标是通过翻转训练数据中的多个标签,最大限度地降低 SVM 对未知数据的分类准确度。 我们为那些有兴趣探索机器学习算法的可能弱点和设计更...

    matlab转换java代码-LibsvmAndroidClassification:LibsvmAndroid分类

    该项目旨在帮助研究/工业界在具有本地库的Android平台上使用[LIBSVM]()以获得更好的性能(与Java版本相比)。 LIBSVM是全世界许多领域中用于分类和回归问题的最强大工具之一。 该项目实际上是[this project]()的...

    matlab转换java代码-shogun-ng:试图使幕府将军插件化

    有关使用SHOGUN和cmake设置特定构建选项的信息,请参见。 介绍 机器学习工具箱的重点是大规模内核方法,尤其是支持向量机(SVM)[1]。 它提供了一个通用的SVM对象,可与几种不同的SVM实现接口,其中包括最先进的...

    onnxmltools:ONNXMLTools支持将模型转换为ONNX

    介绍 ONNXMLTools使您能够将模型从不同的机器学习工具包转换为 。 当前支持以下工具包: ( 的包装) Tensorflow( 的包装) scikit-learn( 的包装) 苹果酷睿ML Spark ML(实验性) LightGBM 的libsvm ...

    基于Weka的数据分类分析实验报告.docx

    4 实验过程及结果 应用iris.arff数据集,分别采用LibSVM、C4.5决策树分类器和朴素贝叶斯分类器进行测试和评价,分别在训练数据上训练分类模型,找出各个模型最优的参数值,并对三个模型进行全面评价比较,

    基于Weka的数据分类分析实验报告范文.docx

    4实验过程及结果 应用iri.arff数据集,分别采用LibSVM、C4.5决策树分类器和朴素贝叶斯分类器进行测试和评价,分别在训练数据上训练分类模型,找出各个模型最优的参数值,并对三个模型进行全面评价比较,得到一个最

    mockingbird:编程语言分类器

    知更鸟介绍的Go分类器。 语言学家可以通过以下方式用作Go软件包 import "github.com/lazywei/linguist" 并且在cli/ $ cd cli/$ ./build.sh$ ./mockingbird --help命令行界面用法准备LIBSVM格式数据集收集罗塞塔代码...

    svm工具包及英英文作用说明

    一个非常好用的支持向量机的工具,里面有详细的英文使用说明及对数据的转换处理

Global site tag (gtag.js) - Google Analytics