安装libsvm
https://blog.csdn.net/he99774/article/details/80388612
处理成libsvm数据格式
https://blog.csdn.net/he99774/article/details/80389490
实验(训练、预测)
所需数据集在网盘:https://pan.baidu.com/s/14R4nMlwjDio8OHilhWa9Cg(处理libsvm格式后的为.txt,原始为.data)
一、进行简单的训练和预测
from svmutil import *
y, x = svm_read_problem('dataset/train.txt')
yt, xt = svm_read_problem('dataset/test.txt')
model = svm_train(y, x)
p_label, p_acc, p_val = svm_predict(yt[0:117], xt[0:117], model)
不设置参数的训练与预测,得到的输出结果如下:
其中一些输出含义:
iter:迭代次数
nu:SVM对应类型的参数
obj:SVM文件转换为的二次规划求解得到的最小值
rho:判决函数的常数项b
nSV:支持向量个数, nBSV:边界上的支持向量个数
Total nSV:支持向量总个数
Accuracy:测试准确率
二、使用grip.py工具得到最优参数c和g
grip.py 是libsvm里面含有的,libsvm包下载:https://www.csie.ntu.edu.tw/~cjlin/libsvm/oldfiles/(下载最新版本即可)
解压后,在tools文件夹里面可以看到grip.py 和 easy.py,下面介绍python的使用方法。
1.首先安装gnuplot:http://www.gnuplot.info/ (下载最新版本即可)
2.打开grip.py,修改路径
也可以顺便把easy.py的路径改了
3.将训练集和测试集放在tools目录下,打开cmd,通过cd命令打开tools文件夹,之后用python运行
python grid.py train.txt
这样运行后可以得到最优的c和g
4.可以使用easy.py训练并测试
python easy.py train.txt test.txt
5.得到c和g参数后,我们可以回到代码中
y, x = svm_read_problem('dataset/train.txt')
yt, xt = svm_read_problem('dataset/test.txt')
parameter = '-c 2048.0 -g 0.0078125'
model = svm_train(y, x, parameter)
p_label, p_acc, p_val = svm_predict(yt[0:], xt[0:], model)
在parameter里面加上我们的参数,再次运行即可。
注:因提供的数据集有一些问题,所以测试优化后的正确率难以看出差距。