将UCI数据、Matlab数据转变为LIBSVM使用数据格式的程序

LIBSVM使用的训练数据和检验数据文件格式如下:
<label> <index1>:<value1> <index2>:<value2> ...
其中<label> 是训练数据集的目标值,对于分类,它是标识某类的整数(支持多个类);对于回归,是任意实数。<index> 是以1开始的整数,可以是不连续的;<value>为实数,也就是我们常说的自变量。检验数据文件中的label只用于计算准确度或误差,如果它是未知的,只需用一个数填写这一栏,也可以空着不填。

由于LIBSVM对数据格式的特殊要求,我们经常需要将UCI的数据转变为其所需格式,于是,需求由此产生。本人使用MATLAB编写特征属性在前、决策属性在最后一列的转化程序uci2svm.m代码如下:

function uci2svm(ucifile, delimiter)
% 将ucifile中UCI格式的数据转化为LIBSVM所需格式的数据存放在svm+ucifile命名的文件中。
if nargin < 2
    ucidata = dlmread(ucifile);
else
    ucidata = dlmread(ucifile, delimiter);
end
[uciR, uciC] = size(ucidata);
svmfile = strcat('svm', ucifile);
fid = fopen(svmfile, 'w');
for i = 1 : uciR
    fprintf(fid, '%s', num2str(ucidata(i, uciC)));
    for j = 1 : uciC - 1
        fprintf(fid,' %s:%s', num2str(j), num2str(ucidata(i, j)));
    end
    fprintf(fid,'\n');
end
fclose(fid);
return

运行实例:使用iris.txt数据集文件,生成svmiris.txt文件,运行命令如下
>> uci2svm('iris.txt');
原文件和目标文件内容部分如下:
iris.txt
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa

...
这里最后一列是类别标志,就是目标列!

svmiris.txt
1 1:5.1 2:3.5 3:1.4 4:0.2
1 1:4.9 2:3 3:1.4 4:0.2
1 1:4.7 2:3.2 3:1.3 4:0.2
1 1:4.6 2:3.1 3:1.5 4:0.2
1 1:5 2:3.6 3:1.4 4:0.2
1 1:5.4 2:3.9 3:1.7 4:0.4
1 1:4.6 2:3.4 3:1.4 4:0.3
1 1:5 2:3.4 3:1.5 4:0.2
……

转:http://www.aiseminar.cn/bbs/forum.php?mod=viewthread&tid=189

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值