UCI数据集准备方式

以Iris数据集为例

获取数据

下载数据

UCI数据集地址

image-20231121083924570

进入Iris页面后,可以查看这个数据集的属性,包括样本数,特征数,适用于回归任务还是分类任务,以及是否有缺失值等等:

image-20231121084059450

下载完成后会得到一个包含4个文件的压缩包,我们主要对iris.data进行处理

image-20231121084324417

导入数据

对于data后缀文件,可以在matlab中打开查看格式:

image-20231121084750866

在知道了数据集的大致内容后,可以使用fopen函数以二进制的形式对文件进行访问:

image-20231121081612175

在得到了文件标识符后,使用textscan函数将已打开的文本文件中的数据读取到元胞数组中,同时更改formatSpec参数,使读取数据的方式与转换设定符相匹配:

image-20231121081749571

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数据集
image-20231121083530564

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐