本文将粗略解释如何使用libSVM程序,使用SVM的流程大概就是:
(1)准备数据并做成指定的格式(有必要时许svm_scale)
(2)用svm-train来训练成model
(3)对新的输入,使用svm-predict来预测新数据的类(class)
下面分别解释svm-train以及svm-predict的用法
(1)svm-train 的语法是:svm-train [options] training_set_file [model_file]
training_set_file :按照之前的格式,而model_file若不特指,则结果会以[training_set_file].model形式保存,options可以先不给出。
如下的例子:
./svm-train heart_scale
optimization finished,#iter = 219
nu = 0.431030
obj = -100.877286,rho = 0.424632
nSV = 132,nBSV = 107
Total nSV = 132
执行结果产生heart_scale.model
(2)svm-predict的语法是: svm-predict test_file model_file output_file
test_file:即我们要predict的数据,其格式与svm-train的输入(即training_set_file )是一样的,不过,每行最前面的label可以省略(因为predict就是要预测那个label),
若test_file有label值的话,predict以后会顺便拿predict出来的值域test_file里面写的值做对比,这代表着:test_file写的label是真正的分类结果,与predict的结果
做对比集合知道predict是否正确。 故可以拿原来的训练集当做test_file,再丢给svm-predict去预测,看看正确率有多高,方便后面调参数。
model_file :就是svm-train出来的模型
out_file:存储输出的结果
输出的格式很简单,每行一个label,对应到 test_file里面的各行。
下列的程序执行会产生heart_scale.out
./svm-predict heart_scale heart_scale.model heart_scale.out
Accuracy = 86.6667% (234/270) (calssification分类)
Mean squared error = 0.533333 (regession回归)
Squared correlation coefficient = 0.532639(regession回归)
将原输入丢 回去predict,第一行的Accuracy 就是预测的正确率,若输入没有label的话,则是真的predict。
简而言之,利用SVM来实现:只要写程序输出正确格式的数据,交给SVM训练,再predict并读入结果即可。