UCI数据集准备方式
以Iris数据集为例
获取数据
下载数据
进入Iris页面后,可以查看这个数据集的属性,包括样本数,特征数,适用于回归任务还是分类任务,以及是否有缺失值等等:
下载完成后会得到一个包含4个文件的压缩包,我们主要对iris.data进行处理
导入数据
对于data后缀文件,可以在matlab中打开查看格式:
在知道了数据集的大致内容后,可以使用fopen函数以二进制的形式对文件进行访问:
在得到了文件标识符后,使用textscan函数将已打开的文本文件中的数据读取到元胞数组中,同时更改formatSpec参数,使读取数据的方式与转换设定符相匹配:
f=fopen('iris.data');% 打开文件
data=textscan(f,'%f,%f,%f,%f,%s'); % 读取数据
% 一个数据类型为一个元胞
% data =
%
% 1×5 cell 数组
%
% 列 1 至 3
%
% {150×1 double} {150×1 double} {150×1 double}
%
% 列 4 至 5
%
% {150×1 double} {150×1 cell}
fclose(f);
对数据进行处理
因为iris数据集最后一列是类别信息,前面都是特征的数据信息,我们对他们进行分开处理:
d_list=[]; % d_list中存放属性值
for i=1:length(data)-1
d_list=[d_list data{1,i}];
end
label=data{1,length(data)};
% label存放data元胞的最后一列属性
根据label元胞数组的类别信息,找到对应每个类别的索引:
n1=0;n2=0;n3=0;
for j=1:length(label)
if strcmp(label{j,1},'Iris-setosa')
n1=n1+1;
index_1(n1)=j;% 记录“Iris-setosa”类的索引
elseif strcmp(label{j,1},'Iris-versicolor')
n2=n2+1;
index_2(n2)=j;% 记录“Iris-versicolor”类的索引
elseif strcmp(label{j,1},'Iris-virginica')
n3=n3+1;
index_3(n3)=j;% 记录“Iris-virginica”类的索引
end
end
按照index索引对d_list数据进行重新排序:
class_1=d_list(index_1,:);
class_2=d_list(index_2,:);
class_3=d_list(index_3,:);
new_list=[class_1;class_2;class_3];
根据index的类别为new_list数据添加新的标签列,以数字1代表类别setosa,数字2代表类别versicolor,3代表virginica,保存新的数据文件:
I=[1*ones(n1,1);2*ones(n2,1);3*ones(n3,1)];
Iris=[I new_list];% 为各类添加数字标记
保存整理好的数据集
save Iris.mat Iris % 保存.mat文件
save Iris -ascii Iris; % 保存data文件
整理好的Iris数据集