第一次发帖,能交流相互成长,呵呵{:soso__8958479446408498907_4:}
这次发帖的内容是与支持向量机经常使用UCI数据库做测试,但有的数据文件出现每行列数不一致的问题。由于UCI数据库是C平台下的编写格式。在MATLAB下如果每行列数不一致,或由于缺少某些属性值,或由于多了一些属性标号,导致不能load.这里以libsvm自带的测试数据文件:heart_scale为例(270行),数据出现了上述小问题。下面对数据处理的代码。heart_scale存为qq.txt.数据文件处理后保存到luck.txt。不知道大家是否还有更好地方法,或能告诉我编写的代码咋样更专业些,因为是刚学matlab,很多时候感觉做事很山寨,又苦于没啥人教,呵呵,谢谢大家了。
fout=fopen('luck.txt','wt');
fid=fopen('qq.txt','r+');
for j=1:1:270
a=1;
C=[];
b=fscanf(fid,'%d',1);
C(a)=b;
a=a+1;
fseek(fid,1,0);
d1=fscanf(fid,'%d',1);
if d1~=1
C(a)=0;
a=a+1;
end
while a<15
fseek(fid,1,0);
b=fscanf(fid,'%f',1);
C(a)=b;
a=a+1;
if a>14
break;
end
fseek(fid,1,0);
d2=fscanf(fid,'%d',1);
if d2-d1~=1
e=a;
for i=e:1:e+d2-d1-2
C(i)=0;
a=a+1;
end
end
d1=d2;
end
fgetl(fid);
j=j+1;
fprintf(fout,'%d %f %f %f %f %f %f %f %f %f %f %f %f %f \n',C);
end
fclose(fid);
fclose(fout);
经过处理后的数据保留了label 和各属性值,属性标号(如1:,2:,...等被去掉),原来每行某些列缺失的属性值重新补0,这样每行列数相同。
可以加载到matlab中了。
lA=oad('luck.txt');
save matlab A;这样所有的数据就保存在了matlab.mat数据文件中的A矩阵变量中,就可以进行后续数据处理了。^_^