摘要:UCI数据集作为标准测试数据集经常出现在许多机器学习的论文中,为了更方便使用这些数据集有必要对其进行整理,这里整理了论文中经常出现的数据集,并详细介绍如何使用MATLAB将数据集文件整理成自己需要的格式以及如何使用数据集文件。要点如下,博主另一篇博文UCI数据集详解及其数据处理(附148个数据集及处理代码)有更加详细的介绍。
下载链接:博主在面包多网站上的完整资源下载页
代码介绍及演示视频链接:https://www.bilibili.com/video/BV1wS4y1Y7Sn/(正在更新中,欢迎关注博主B站视频)
UCI数据集是一个常用的机器学习标准测试数据集,是加州大学欧文分校(University of CaliforniaIrvine)提出的用于机器学习的数据库。机器学习算法的测试大多采用的便是UCI数据集了,其重要之处在于“标准”二字,新编的机器学习程序可以采用UCI数据集进行测试,类似的机器学习算法也可以一较高下。其官网地址如下:website: UCI Machine Learning Repository
尽管从UCI数据集官网可以很容易找到许多想要的数据集,但要将其提供给自己的程序使用还需要了解数据的详细信息。UCI数据集中并非所有数据集都是以相同格式存于文件中的,读取和使用文件方式不一,因此有必要对数据文件稍作整理,特此总结。
要使用数据集中的数据首先需要分清标记和属性值。如点击进入数据集官网:UCI数据集官网选取数据集Iris
该数据集详情页面如下,从表中数据显示该数据集的数据量为150,属性数为4
而再往下的Data Set information 中则介绍了该数据集的详细信息,下面的Attribute Information(属性信息)是我们需要关注的,如下图
其中1-4分别说明了四个属性所代表的实际意义,而5则说明了该数据集分为三类:Iris Setosa、Iris Versicolour和Iris Virginica。认识到这些,再去看具体的Iris文件中的数据便清楚明了了,点击标题Iris Data Set下方的Data Folder进入文件位置页面,选择iris.data(该文件为Iris数据集数据存放文件)
进入到数据详情页面,如下图。可以看到文本的排列:每行5个数以逗号分隔,共150行,每行的前4列(红框内的数)分别对应4个属性值,而最后一列(绿色框内)为每个数据所属类别(或称标记)。当前看到的都是“Iris-setosa”一类的数据,往下翻则可看到”Iris-versicolour“和”Iris-virginica”
其他的数据集的情况与iris相似,而各个数据集属性数或类别数各有差异。值得注意的是,有些数据集每行数据中间的分隔符并非都是“ ,”(逗号),还有可能是“ ”(空格);有些数据集的标记可能是用数字表示的,如1,2,… 其位置也可能出现在第1列(也可能文件中未给出标记,需自行加上);还有的可能属性值都是英文字符,分别如下所示的wine数据集、heart-disease数据集、adult数据集。要想以统一的程序使用这样内部格式不一的数据集,就需要在程序使用前根据实际情况对数据集进行调整了。
总之,各数据集可能各有差异,按照上面的步骤了解了各自的注释信息,找到属性数、分类数、标记等重要信息使用起来便顺利得多。
要保存网站上的数据文件,可以进入某个数据集的文件位置页面,如Iris文件位置,选择“iris.data”,右键,链接另存为,即可下载该数据集文件。如下所示,当前保存的文件格式为“.data”文件。
如若想保存文本文件(.txt),可先自行新建一个文本文件,直接点击iris.data进入数据详情页面,直接全选所有数据将数据粘贴到自己新建的文本文件中。至于其他文件格式如.mat,.xls则可借助MATLAB先读取文件数据然后转存为其他格式,在后面章节也会介绍。
本节介绍如何使用MATLAB对数据集进行整理,下面以对Iris数据集的整理为例介绍。
首先从官网下载数据集,例如前面下载的iris.data或者自行复制的txt文件(自命名iris.txt),在文件所在文件夹新建一个.m文件。整理程序的功能是读取原文件数据将最后一列的英文标记按每类改为1-3的数字并将标记放在第一列,重新存储到新的txt文件,顺便另存为.mat以及.xls文件。
从前面可知,iris文件的最后列为英文字母,如果直接采用MATLAB的load( )函数将导致最后一列文本未知错误,所以这里采用textscan( )函数。textscan( )函数调用方式如下
textscan( ): 读取任意格式的文本文件。通过此函数,能够以一次读取一个块的方式读取文件,并且每个块可以具有不同的格式。
使用方法:首先打开文本文件以进行读取,fopen 返回文件标识符。
fileID = fopen('test80211.txt','r');
读取 4 个简介行,这些行是由换行符分隔的字符串。
Intro = textscan(fileID,'%s',4,'Delimiter','\n')
Intro = 1x1 cell array{4x1 cell} textscan 返回一个 1x1 元胞数组,其中包含由字符串组成的一个 4×1 元胞数组。
然后读取每个块的内容即可取出数据了,最后关闭文件。
fclose(fileID);
—— 引自 《MATLAB中文文档》
对Iris数据集进行整理的MATLAB程序如下。首先利用textscan()读取数据data为 1 * 5 cell 的元胞数组,每个元素是150*1 double 的数组,存储了一列上的所有数据。明显地,最后一个元素就是全部的标记数组,我们遍历这些标记并把带同一类标记的数据的索引记录下来。根据记录下的每类所有数据的索引便可取出每一类的数据并重新加上数字的标记。
clear
clc
% 整理iris数据集
% f=fopen('iris.txt');
f=fopen('iris.data');% 打开文件
data=textscan(f,'%f,%f,%f,%f,%s'); % 读取数据
D=[];% D中存放属性值
for i=1:length(data)-1
D=[D data{1,i}];
end
fclose(f);
lable=data{1,length(data)};
n1=0;n2=0;n3=0;
% 找到每类数据的索引
for j=1:length(lable)
if strcmp(lable{j,1},'Iris-setosa')
n1=n1+1;
index_1(n1)=j;% 记录下属于“Iris-setosa”类的索引
elseif strcmp(lable{j,1},'Iris-versicolor')
n2=n2+1;
index_2(n2)=j;
elseif strcmp(lable{j,1},'Iris-virginica')
n3=n3+1;
index_3(n3)=j;
end
end
% 按照索引取出每类数据,重新组合
class_1=D(index_1,:);
class_2=D(index_2,:);
class_3=D(index_3,:);
Attributes=[class_1;class_2;class_3];
I=[1*ones(n1,1);2*ones(n2,1);3*ones(n3,1)];
Iris=[I Attributes];% 为各类添加数字标记
save Iris.mat Iris % 保存.mat文件
save Iris -ascii Iris; % 保存data文件
f=fopen('iris1.txt','w');
[m,n]=size(Iris);
for i=1:m
for j=1:n
if j==n
fprintf(f,'%g \n',Iris(i,j));
else
fprintf(f,'%g,',Iris(i,j));
end
end
end
fclose(f);
% save iris.txt -ascii Iris
% dlmwrite('iris.txt',Iris);
经过代码1-42行的操作,原来带有的英文标记的数据便由相应的数字标记代替了并放在了第一列的位置上。这里原来标记为Iris-setosa的数据重新标记为1,Iris-versicolor标记为2,Iris-virginica标记为3。
代码45行和46行分别将整理好的数据保存为.mat文件和.data文件;第49-61行是通过文件操作的方式利用循环逐行逐列将数据打印到txt文件中,每个数据中间由逗号分隔,每行5个数据打印完则回车至下一行。
当然也可以采用64行或65行的方式保存txt文件,不过里面数据的格式稍有不同,读者可以自行尝试一下。整理前后的文件对比情况如下图所示。参照以上代码对于其他数据集的整理程序可在此之上根据实际需要稍作修改。
整理好了数据文件,使用起来就比较简单了,其实前面的代码中已经读取过文件中的数据了。经过整理现在文件中的数据都是数字形式,在MATLAB中可以通过load( )函数直接读取了,如下代码
iris_data=load('iris1.txt');
lable_iris=iris_data(:,1);
attributes_iris=iris_data(:,2:end);
iris_data包含了标记和属性值的全部数据,lable_iris是iris_data的第一列所有元素,即每个数据的标记,attributes_iris取自其后的所有列上的元素,即所有属性值的数组。具体的使用UCI数据集的机器学习算法实例可参考本人前面一篇博文Kmeans聚类算法详解,后面也会继续介绍。
论文中经常出现的数据集本人已经按照以上方法整理完成,现将其一并分享给大家。整理好的数据集如下表所示,每个数据集文件都保存了.mat、.data、.txt三种文件格式方便大家选择下载,以下是下载链接
【下载链接】
下载链接1:论文中常见UCI数据集txt版
下载链接2:论文中常见UCI数据集mat版
下载链接3:论文中常见UCI数据集data版
另外在整理过程中搜集了许多其他的UCI数据集,文件都是mat格式方便使用,下图是压缩包内的文件详情,有需要的可以下载,下载链接如下
同时本资源已上传至面包多网站,如果您没有积分或C币或者没有会员,可以点击以下链接获取。完整文件下载链接如下:
下载链接:博主在面包多网站上的完整资源下载页
【公众号获取】
本人微信公众号已创建,扫描以下二维码并关注公众号“AI技术研究与分享”,后台回复“UC20180830”即可获取全部资源文件信息。
由于博主能力有限,博文中提及的方法与代码即使经过测试,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手