标题：LIBSVM
概述补充
SVM用于模式识别或回归时，SVM方法及其参数、核函数及其参数的选择，目前国际上还没有形成一个统一的模式，也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优。
目前，LIBSVM拥有Java、Matlab、C#、Ruby、Python、R、Perl、Common LISP、Labview等数十种语言版本。最常使用的是Matlab、Java和命令行的版本。
以上各版本在林智仁（Lin Chih-Jen）主页上均有链接。
使用手册
LibSVM是以源代码和可执行文件两种方式给出的。如果是Windows系列操作系统，可以直接使用软件包提供的程序，也可以进行修改编译；如果是Unix类系统，必须自己编译，软件包中提供了编译格式文件，我们在SGI工作站（操作系统IRⅨ6.5）上，使用免费编译器GNU C++3.3编译通过。使用步骤LIBSVM 使用的一般步骤是：
1） 按照LIBSVM软件包所要求的格式准备数据集；
2） 对数据进行简单的缩放操作；
3） 考虑选用RBF 核函数；
4） 采用交叉验证选择最佳参数C与g ；
5） 采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型；
6） 利用获取的模型进行测试与预测。数据格式LIBSVM使用的数据格式
该软件使用的训练数据和检验数据文件格式如下：
<label> <index1>:<value1> <index2>:<value2> ...
其中<label> 是训练数据集的目标值，对于分类，它是标识某类的整数（支持多个类）；对于回归，是任意实数。<index> 是以1开始的整数，可以是不连续的；<value>；为实数，也就是我们常说的自变量。检验数据文件中的label只用于计算准确度或误差，如果它是未知的，只需用一个数填写这一栏，也可以空着不填。在程序包中，还包括有一个训练数据实例：heart_scale，方便参考数据文件格式以及练习使用软件。
可以编写小程序，将自己常用的数据格式转换成这种格式。其中formatdatalibsvm.xls文件可以方便的将excel数据转化为符合LIBSVM要求的数据格式。Svmtrain使用方法Svmtrain（训练建模）的用法：svmtrain [options] training_set_file [model_file]
Options：可用的选项即表示的涵义如下
-s svm类型：SVM设置类型（默认0)
0 -- C-SVC
1 --v-SVC
2 – 一类SVM
3 -- e -SVR
4 -- v-SVR
-t 核函数类型：核函数设置类型（默认2）
0 – 线性：u'v
1 – 多项式：（r*u'v + coef0)^degree
2 – RBF函数：exp(-r|u-v|^2）
3 –sigmoid：tanh(r*u'v + coef0)
-d degree：核函数中的degree设置（针对多项式核函数）（默认3）
-g r(gama）：核函数中的gamma函数设置（针对多项式/rbf/sigmoid核函数）（默认1/ k)
-r coef0：核函数中的coef0设置（针对多项式/sigmoid核函数）（（默认0)
-c cost：设置C-SVC，e -SVR和v-SVR的参数（损失函数）（默认1）
-n nu：设置v-SVC，一类SVM和v- SVR的参数（默认0.5）
-p p：设置e -SVR 中损失函数p的值（默认0.1）
-m cachesize：设置cache内存大小，以MB为单位（默认40）
-e eps：设置允许的终止判据（默认0.001）
-h shrinking：是否使用启发式，0或1（默认1）
-wi weight：设置第几类的参数C为weight*C (C-SVC中的C) （默认1）
-v n: n-fold交互检验模式，n为fold的个数，必须大于等于2
其中-g选项中的k是指输入数据中的属性数。option -v 随机地将数据剖分为n部分并计算交互检验准确度和均方根误差。以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合，如果设置的参数在函数或SVM类型中没有也不会产生影响，程序不会接受该参数；如果应有的参数设置不正确，参数将采用默认值。
training_set_file是要进行训练的数据集；model_file是训练结束后产生的模型文件，文件中包括支持向量样本数、支持向量样本以及lagrange系数等必须的参数；该参数如果不设置将采用默认的文件名，也可以设置成自己惯用的文件名。Svmpredict使用方法Svmpredict（使用已有的模型进行预测）的用法：svmpredict test_file model_file output_file
model_file是由svmtrain产生的模型文件；
test_file是要进行预测的数据文件；
Output_file是svmpredict的输出文件。
svm-predict没有其它的选项。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.rangetrain3>train3.scale
表示采用缺省值（即对属性值缩放到[ -1,1]的范围，对目标值不进行缩放）
对数据集train3 进行缩放操作，其结果缩放规则文件保存为train3.range，缩放集的缩放结果保存为train3.scale。
2） svmscale –r train3.rangetest3>test3.scale
表示载入缩放规则train3.range 后按照其上下限对应的特征值和上下限值线
性的地对数据集test3 进行缩放，结果保存为test3.scale。举例说明svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 -d 3 data_file
训练一个由多项式核（u'v+1）^3和C=1000组成的分类器。
svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file
在RBF核函数exp(-0.5|u-v|^2）和终止允许限0.00001的条件下，训练一个?-SVM (? = 0.1）分类器。
svmtrain -s 3 -p 0.1 -t 0 -c 10 data_file
以线性核函数u'v和C=10及损失函数?= 0.1求解SVM回归。
输出如下：
optimization finished,#iter
迭代次数
epsilon =
二次规划的终止条件
obj =,
obj，就是那个二次规划的最小值吧
rho =
判决函数的常数向
nSV =,
支持向量的个数
重要论文
本部分列出几篇关于LIBSVM的重要论文。
libsvm：a library for Support Vector Machines
A practical guide to SVM classification
Training and Testing Low-degree Polynomial Data Mappings via Linear SVM
Working Set Selection Using Second Order Information for Training Support Vector Machines