如何将数据转换libsvm格式文件

如题所述

使用FormatDataLibsvm.xls。其实这个软件就是一个excel工作薄,先把office的宏安全性应当设置为中或者低。打开它就会跳出来一个对话框,选“启用宏”就行了,其他不用管它,把你要的数据拷上去就好了。
1,先运行FormatDataLibsvm.xls然后将数据粘贴到sheet1的topleft单元。
2,再"工具"-->"宏"-->执行下面有一个选项(FormatDatatoLibsvm)-->执行,要选中这个然后运行就可以了 ,这时数据转换的问题就解决了,可是现在生成的数据是.xls格式,它还是不能做为libsvm的训练文件啊!还需要怎么转换呢?
3,可以copy到一个记事本中即可。但是注意在用libsvm的时候要在命令行输入.txt后缀。

输入数据的格式是

条件属性a 条件属性b ... 决策属性
7 5 ... 2
4 2 ... 1

输出数据格式是

决策属性 条件属性a 条件属性b ...
2 1:7 2:5 ...
1 1:4 2:2 ...
P.S. 在第2步时,执行下面还有另一个选项(FormatDatafromLibsvm)这个可以把libsvm数据的格式重新转回来,转到你第1步时刚拷贝到excel里的数据形式。
或者自己写个MATLAB的程序,将自己常用的数据格式按照这种数据格式要求转换成这种格式供LIBSVM直接使用。
格式转换函数write2libsvm如下:

function write2libsvm
% 为了使得数据满足libsvm的格式要求而进行的数据格式转换
% 原始数据保存格式为:
% [标签 第一个属性值 第二个属性值...]
% 转换后文件格式为满足libsvm的格式要求,即:
% [标签 1:第一个属性值 2:第二个属性值 3:第三个属性值 ...]

[filename, pathname] = uigetfile( {'*.mat', ...
'数据文件(*.mat)'; '*.*', '所有文件 (*.*)'}, '选择数据文件');
try
S=load([pathname filename]);
fieldName = fieldnames(S);
str = cell2mat(fieldName);
B = getfield(S,str);
[m,n] = size(B);
[filename, pathname] = uiputfile({'*.txt;*.dat' ,'数据文件
(*.txt;*.dat)';'*.*','所有文件 (*.*)'},'保存数据文件');
fid = fopen([pathname filename],'w');
if(fid~=-1)
for k=1:m
fprintf(fid,'%3d',B(k,1));
for kk = 2:n
fprintf(fid,'\t%d',(kk-1));
fprintf(fid,':');
fprintf(fid,'%d',B(k,kk));
end
fprintf(fid,'\n');
end
fclose(fid);
else
msgbox('无法保存文件!');
end
catch
msgbox('文件保存过程中出错!','出错了...','error');

(望楼主采纳哦)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-31
有三种工具可用
1.网上有一个xls文FormatDataLibsvm.xls具有宏命令,可以利用其中的宏命令来实现。对于属性数据只有一二百的,这种工具简单方便。

2.对于一两千的就需要借助代码之类的工具了。
其实仔细看cjlin的libsvm网站http://www.csie.ntu.edu.tw/~cjlin/libsvm/,从网站的Libsvm FAQ中有提到的格式转换的方法
Q: How to convert other data formats to LIBSVM format?

It depends on your data format. We have a simple C code to transfer space/colon separated format to libsvm format. Please contact us if needed.

Alternatively, a simple way is to use libsvmwrite in the libsvm matlab/octave interface. Take a CSV (colon separated format) file in UCI machine learning repository as an example. We download SPECTF.train. Labels are in the first column. The following steps produce a file in the libsvm format.

matlab> SPECTF = csvread('SPECTF.train'); % read a csv file
matlab> labels = SPECTF(:, 1); % labels from the 1st column
matlab> features = SPECTF(:, 2:end);
matlab> features_sparse = sparse(features); % features must be in a sparse matrix
matlab> libsvmwrite('SPECTFlibsvm.train', labels, features_sparse);

The tranformed data are stored in SPECTFlibsvm.train.
按照上面的命令,代入自己的数据则可以达到效果。

3.可以利用weka来转换,用weka打开csv文件,再将文件重新保存为libsvm格式。方便简单,经我测试的结果也是一致的。这个方法很好,多列属性也可行。本回答被提问者和网友采纳
第2个回答  2016-02-03
有三种工具可用
1.网上有一个xls文FormatDataLibsvm.xls具有宏命令,可以利用其中的宏命令来实现。对于属性数据只有一二百的,这种工具简单方便。

2.对于一两千的就需要借助代码之类的工具了。
  其实仔细看cjlin的libsvm网站,从网站的Libsvm FAQ中有提到的格式转换的方法
  Q: How to convert other data formats to LIBSVM format?

  It depends on your data format. We have a simple C code to transfer space/colon separated format to libsvm format. Please contact us if needed.

  Alternatively, a simple way is to use libsvmwrite in the libsvm matlab/octave interface. Take a CSV (colon separated format) file in UCI machine learning repository as an example. We download SPECTF.train. Labels are in the first column. The following steps produce a file in the libsvm format.

  matlab> SPECTF = csvread('SPECTF.train'); % read a csv file
  matlab> labels = SPECTF(:, 1); % labels from the 1st column
  matlab> features = SPECTF(:, 2:end);
  matlab> features_sparse = sparse(features); % features must be in a sparse matrix
  matlab> libsvmwrite('SPECTFlibsvm.train', labels, features_sparse);

  The tranformed data are stored in SPECTFlibsvm.train.
  按照上面的命令,代入自己的数据则可以达到效果。

3.可以利用weka来转换,用weka打开csv文件,再将文件重新保存为libsvm格式。方便简单,经我测试的结果也是一致的。这个方法很好,多列属性也可行。
相似回答