对于LIBSVM包的使用说明:
-
第一步,要进行数据格式的预处理,通过matlab中xlsx_txt.m文件将Excel表格文件转换成txt文本文件,然后用libsvmtransform.m文件将数据处理成LIBSVM包能处理的格式。具体代码如下:
%%%%%将svr.xlsx数据转化为svr.txt格式数据 clear;clc [a,b,c] = xlsread('.\data\svr.xlsx'); fid = fopen('.data\svr.txt','w'); for i = 1:length(b) fprintf(fid, '%s\t',b{1,i}); end fprintf(fid,'\r\n'); %\r是回车,表示使光标下移一格,\n是换行,表示使光标到行首 [row,col] = size(a); for i = 1:row for j = 1:col fprintf(fid,'%d\t',a(i,j)); end fprintf(fid,'\r\n'); end fclose(fid); %%%%% libsvmtransform.m函数 %%%%%%% function libsvmtransform(A,filename) [m,n]=size(A); txt='.txt'; file=[filename,txt]; fid = fopen(file,'w');%写入文件路径 for i=1:m temp1 = A(i,2:n);%存储A中每一行从第2位开始的值 temp2 = []; for j = 1:length(temp1) if temp1(j) ~= 0 temp2 = [temp2 ' ' num2str(j) ':' num2str(temp1(j))]; else temp2 = [temp2]; end end % temp2存放A一行添加序号的结果 temp3 = [num2str(A(i,1)) temp2];%temp3存放最终一行的结果 [m1,n1] = size(temp3); for k = 1:n1 if k == n1 fprintf(fid,'%c\n',temp3(k)); else fprintf(fid,'%c',temp3(k)); end end end fclose(fid); %%%%%%%%%%% 上述函数的使用 %%%%%%%%%% a= textread('svr.txt');%第一步转化得到的文本文件 libsvmtransform(a,'svm')调用上述函数 得到svm.txt文件 符合Libsvm格式的数据
检测数据格式是否转化成功?先将转换好的数据文件放到指定文件夹中,将svm.txt 文件复制到libsvm文件夹下的tools文件夹中。(在运行checkdata.py文件时 可能会报错 未找到python38.dll,原因是没有安装python运行环境,如果安装了,那就是因为没有配置环境变量,环境变量配置参考这篇环境变量配置博客。
- 第二步,将处理后的文件放到Libsvm安装路径下的tools中和windows中。然后输入命令“checkdata.py 文件名.txt”回车,若显示“No error”,则表示数据格式正确。
- 第三步,用svm-scale.exe对数据集进行归一化处理。具体操作,打开“命令提示符”,进入libsvm中的windows下,输入命令“svm-scale.exe -l 0 -u 1 文件名.txt>输出归一化后的文件.txt”
- 第四步,用grid.py搜索最优参数,主要是c和g。集体操作,在"cmd", 输入“python grid.py 输出归一化后的文件.txt”
- 第五步,用svm-train训练模型。打开命令提示符,进入……\libsvm\windows然后输入“svm-train -s 3 -t 2 -c 1024.0 -g 4 .0 -p 0.0625 data.txt”,这里-s是选择SVM的类型。对于回归来说,只能选3或者4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数。然后c,g,p我们已经寻出,直接运行即可。
- 这时在windows中会生成一个data.txt.model文件。可以用来进行下面的预测了。
- 第六步,用svm-predict预测。还是在命令提示符windows下输入“svm-predict test.txt data.txt.model out.txt”
- 可以看到,第一行是均差,第二行是相关系数,预测结果还是不错的。如果预测结果不好,一可能是你的参数选择不当,还可能是你的特征值选择的有问题。
- 另外,在windows下会生成一个out.txt文件,可以打开看一下和test.txt文件的差别。