libsvm的参数选择一直是令人头痛的问题。不过,对于初学者,如果数据不是很大,在libsvm的tools文件中为大家提供了easy.py。它可以自动完成从归一化到参数选择的一切所需操作。
使用方法为:easy.py training_file [testing_file]
另外有其他参数选择工具,可以参考tools中的readme说明。下面,我们先使用easy.py进行分类实验。
(1)首先使用subset.py工具将iris数据集(如何将UCI转化为LIBSVM格式的,请参考前面博文)抽样:
python subset.py iris.libsvm.txt 100 iris.train iris.test
抽取100个作为训练数据iris.train,剩余50个作为测试数据iris.test。
(2)使用libsvm进行多分类——利用easy.py工具
在使用前,要确保上面环境变量已经配置。然后将tra_iris.txt、tes_iris.txt拷贝到tools文件夹,以防止写长路径名。同时,因为gnuplot的安装路径人人都不相同,所以,需要在easy.py中做相应修改,如下将
CODE:
else:
# example for windows
svmscale_exe = r"../windows/svm-scale.exe"
svmtrain_exe = r"../windows/svm-train.exe"
svmpredict_exe = r"../windows/svm-predict.exe"
gnuplot_exe = r"D:\Program Files\gnuplot\bin\gnuplot.exe"
grid_py = r"./grid.py"中D:\Program Files\gnuplot\bin\gnuplot.exe,改为你的gnuplot.exe所在位置。
【syr 补充:
在“交叉验证寻找最优参数”之前,需要在grid.py中:
CODE:
else:
# example for windows
svmtrain_exe = r"../windows/svm-train.exe"
gnuplot_exe = r"D:\Program Files\gnuplot\bin\gnuplot.exe"其中的"D:\Program Files\gnuplot\bin\gnuplot.exe"改为你的pgnuplot.exe所在的路径。】
接着,“运行”中输入cmd打开命令行,转到/libsvm-3.20/tools所在目录,然后,输入命令
CODE:
python easy.py iris.train iris.test
执行,程序会自动调用训练、交叉验证、预测将结果保存到同目录的文件中。运行情况如下:
程序执行的结果在iris.test.predict文件中,规范化结果在iris.train.scale.out中。从运行情况可看出,其预测精度为Accuracy = 98% (49/50)。另有测试数据为60个样本的,其预测精度为Accuracy = 96.6667% (58/60),可见最后的Accuracy和选取的训练样本数和测试样本数也有关系。
(2)对应上实验,手动使用libsvm进行多分类的方法
下面方法是通过分析easy.py所得,均在“运行”cmd命令行执行。
规范化训练样本
CODE:
svm-scale -s iris.train.range iris.train > iris.train.scale
交叉验证寻找最优参数
CODE:
grid.py -svmtrain svm-train -gnuplot gnuplot iris.train.scale
利用寻找的参数训练模型
CODE:
svm-train -c 8.0 -g 0.03125 iris.train.scale iris.train.model
规范化测试样本
CODE:
svm-scale -r iris.train.range iris.train > iris.train.scale
注:根据我的实际经验,对iris数据不进行归一化也是可以正常操作的,但是对于最后分类的Accuracy有多大影响,或者有没有影响,有待实验。
使用模型进行分类预测
CODE:
svm-predict iris.test.scale iris.train.model iris.test.predict
svm-train、svm-scale、svm-predict等名字为windows文件夹中exe文件的名字。
至此,使用libsvm进行分类的完整过程分析介绍。
到这里,LIBSVM的使用基本上也就差不多了,选出最优参数,训练模型,使用训练模型进行分类预测。真的很易用,但要想熟练的选择核函数以及参数调优,还需要对支持向量机的原理进行认真学习,起码支持向量机的类型,每个核函数的参数,惩罚系数是必须要熟知的。
欢迎讨论。
quote from:
http://blog.csdn.net/ddkxddkx/article/details/6321775