1、LibSVM 使用规范其实,这部分写也是多余,google 一下“libsvm 使用” ,就会 N 多的资源,但是,为了让你少费点心,在这里就简单的介绍一下,有不清楚的只有动动你的 mouse 了。需要说明的是,2.89版本以前,都是 svmscale、svmtrain 和 svmpredict,最新的是 svm-scale、svm-train 和 svm-predict,要是用不习惯,只需要把那四个 exe 文件名去掉中间的短横线,改成 svmscale、svmtrain 和 svmpredict 就可以了,我们还是按原来函数名的讲。1. libSVM 的数据格式Label 1:value
2、2:value .Label:是类别的标识,比如上节 train.model 中提到的1 -1,你可以自己随意定,比如-10,0 ,15。当然,如果是回归,这是目标值,就要实事求是了。Value:就是要训练的数据,从分类的角度来说就是特征值,数据之间用空格隔开比如: -15 1:0.708 2:1056 3:-0.3333需要注意的是,如果特征值为0,特征冒号前面的(姑且称做序号)可以不连续。如:-15 1:0.708 3:-0.3333表明第2个特征值为 0,从编程的角度来说,这样做可以减少内存的使用,并提高做矩阵内积时的运算速度。我们平时在 matlab 中产生的数据都是没有序号的常规矩阵
3、,所以为了方便最好编一个程序进行转化。2. svmscale 的用法svmscale 是用来对原始样本进行缩放的,范围可以自己定,一般是0,1或-1,1。缩放的目的主要是1)防止某个特征过大或过小,从而在训练中起的作用不平衡;2)为了计算速度。因为在核计算中,会用到内积运算或 exp 运算,不平衡的数据可能造成计算困难。用法:svmscale -l lower -u upper-y y_lower y_upper-s save_filename-r restore_filename filename其中,中都是可选项:-l:设定数据下限;lower:设定的数据下限值,缺省为-1-u:设定数据上
4、限;upper:设定的数据上限值,缺省为 1-y:是否对目标值同时进行缩放;y_lower 为下限值, y_upper 为上限值;-s save_filename:表示将缩放的规则保存为文件 save_filename;-r restore_filename:表示将按照已经存在的规则文件 restore_filename 进行缩放;filename:待缩放的数据文件,文件格式按照 libsvm 格式。默认情况下,只需要输入要缩放的文件名就可以了:比如(已经存在的文件为 test.txt)svmscale test.txt这时,test.txt 中的数据已经变成-1,1之间的数据了。但是,这样原
5、来的数据就被覆盖了,为了让规划好的数据另存为其他的文件,我们用一个 dos 的重定向符 来另存为(假设为 out.txt):svmscale test.txt out.txt运行后,我们就可以看到目录下多了一个 out.txt 文件,那就是规范后的数据。假如,我们想设定数据范围0,1,并把规则保存为 test.range 文件:svmscale l 0 u 1 s test.range test.txt out.txt这时,目录下又多了一个 test.range 文件,可以用记事本打开,下次就可以用-r test.range来载入了。3. svmtrain 的用法svmtrain 我们在前面已
6、经接触过,他主要实现对训练数据集的训练,并可以获得SVM 模型。用法: svmtrain options training_set_file model_file其中,options 为操作参数,可用的选项即表示的涵义如下所示:-s 设置 svm 类型:0 C-SVC1 v-SVC2 one-class-SVM3 -SVR4 n - SVR-t 设置核函数类型,默认值为20 - 线性核:u*v1 - 多项式核: (g*u*v+ coef 0)degree2 - RBF 核:exp(-*|u-v|2)3 - sigmoid 核:tanh( *u*v+ coef 0)-d degree: 设置多项
7、式核中 degree 的值,默认为3-g: 设置核函数中 的值,默认为1/k,k 为特征(或者说是属性)数;-r coef 0:设置核函数中的 coef 0,默认值为0;-c cost:设置 C-SVC、-SVR、n - SVR 中从惩罚系数 C,默认值为1;-n v :设置 v-SVC、one-class-SVM 与 n - SVR 中参数 n ,默认值0.5;-p :设置 v-SVR 的损失函数中的 e ,默认值为0.1 ;-m cachesize:设置 cache 内存大小,以 MB 为单位,默认值为40 ;-e :设置终止准则中的可容忍偏差,默认值为0.001;-h shrinking
8、:是否使用启发式,可选值为0 或1,默认值为1;-b 概率估计:是否计算 SVC 或 SVR 的概率估计,可选值 0 或1,默认0;-wi weight:对各类样本的惩罚系数 C 加权,默认值为1;-v n:n 折交叉验证模式;model_file:可选项,为要保存的结果文件,称为模型文件,以便在预测时使用。默认情况下,只需要给函数提供一个样本文件名就可以了,但为了能保存结果,还是要提供一个结果文件名,比如:test.model,则命令为:svmtrain test.txt test.model结果说明见 LibSVM 学习(二) 。4. svmpredict 的用法svmpredict 是根
9、据训练获得的模型,对数据集合进行预测。用法:svmpredict options test_file model_file output_file其中,options 为操作参数,可用的选项即表示的涵义如下所示:-b probability_estimates是否需要进行概率估计预测,可选值为0 或者1 ,默认值为0。model_file 是由 svmtrain 产生的模型文件;test_file 是要进行预测的数据文件,格式也要符合 libsvm 格式,即使不知道 label 的值,也要任意填一个,svmpredict 会在 output_file 中给出正确的 label 结果,如果知道label 的值,就会输出正确率;output_file 是 svmpredict 的输出文件,表示预测的结果值。至此,主要的几个接口已经讲完了,满足一般的应用不成问题。对于要做研究的,还需要深入到 svm.cpp 文件内部,看看都做了什么。