输入数据与ARFF文件--数据挖掘学习和weka使用(二)

时间:2024-03-10 10:40:56

我个人认为直接讨论数据挖掘算法和weka的使用过于心急。我一开始就直接学习的数据挖掘方法,有些方法艰涩枯燥,我常常在思考的不是方法本身,而是“这是干什么的?”。

在使用了weka后有些东西渐渐清晰,因为输入和输出给了人很直观的感觉,再结合技术本身学习效率很高。

输入主要有三类:概念、实例和属性。

概念

概念简单而言就是需要被处理的东西。它可以是分类学习中那个已经分类完成的样本集。

你需要处理的东西可能差别很大,但你可以统称它们为概念,而输出就是对其的描述,即概念描述。

实例

实例这个词你可能觉得陌生,但是你可以大致认为其为样本。

我们通常的输入是一个实例集,其中的每一个实例都是单一、独立的概念样本。

当然最常见的实例表现方式就是表格:

instances

不过这是因为如此,有人戏称数据挖掘应该成为文件挖掘。

诚然,关系型数据库可以表现更为复杂的关系,但有限关系的有限集一般都可以转化为单个表。有兴趣深入看看的朋友可以看一下有关反向规格化的虚假事实问题。

属性

如果上面说到的实例是表格中的一行的话,属性就是数据表中的一列。

一个特定实例的一个属性值是属性对应部分的一个测量或者观测值。

ARFF格式

arff格式是weka专用的文件格式,全称Attribute-Relation File Format。

它是一个ASCII文本文件,记录了一些共享属性的实例。arff格式是由怀卡托大学的计算机科学部门开发的。

arff格式文件主要由两个部分构成,头部定义和数据区。

头部定义包含了关系名称(relation name)、一些属性(attributes)和对应的类型,如:

   % 1. Title: Iris Plants Database 
%
% 2. Sources:
% (a) Creator: R.A. Fisher
% (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
% (c) Date: July, 1988
%
@RELATION iris

@ATTRIBUTE sepallength NUMERIC
@ATTRIBUTE sepalwidth NUMERIC
@ATTRIBUTE petallength NUMERIC
@ATTRIBUTE petalwidth NUMERIC
@ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica}

%是注释符号。NUMERIC说明其为数字型,属性class的取值是限定的,只能是Iris-setosa,Iris-versicolor,Iris-virginica中的一个。数据类型还可以是string和data数据区有@data开头,如:  

@DATA 

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

完整的一个arff文件如下:

% 1. Title: Iris Plants Database 

%
% 2. Sources:
% (a) Creator: R.A. Fisher
% (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
% (c) Date: July, 1988
%
@RELATION iris

@ATTRIBUTE sepallength NUMERIC
@ATTRIBUTE sepalwidth NUMERIC
@ATTRIBUTE petallength NUMERIC
@ATTRIBUTE petalwidth NUMERIC
@ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica}

@DATA
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

weka中打开该数据集的效果:

instances2

圈1处是所有属性

圈2处是一个简单的可视化预览

圈3处是数据的描述性统计

稀疏的ARFF格式

如果输入的实例大部分的值都是0,你就可以考虑一下稀疏格式。它的头部定义和ARFF格式一样。

唯一的区别就是0默认不需要声明。

比如:

@data 
0, X, 0, Y, 0, 0 "class A"
0, 0, W, 0, 0, 0 "class B"

可以简写为:

@data 
{1 X, 3 Y, 4 "class A"}
{2 W, 4 "class B"}

其实我不怎么推荐使用这个,因为很容易与缺省和未知值混淆。

0是省去了而已,不是残缺,未知值请使用?。

残缺值问题

一般的例子不会有残缺值,但是实际中确有残缺值。一般的残缺值是指超出正常范围那种,也有应该是正数却出现负数那种。

残缺值的意义需要重点研究,了解其出现的原因。比如数据采集的机器的故障或者问卷调查的对象拒绝回答一些较为隐私的问题。

虽然大部分算法会认定残缺值没有什么特别意义,仅仅是未知而已。但是通常我们可以通过残缺值获得一些有用的信息。

不正确的值

数据挖掘所用的数据并不是为了数据挖掘本身而收集的,出现一些不良数据和属性值也是情有可原的。某些数据在初始收集时无关紧要,但是对数据挖掘影响却很大。

ARFF格式定义了属性的类型,这可以在一定程度上验证数据,不过最靠谱的还是自己检查一下。

重复数据也是需要注意的,有时候它会对结果产生意想不到的干扰。

认真对待数据

请不要随意找一份数据就开始所谓的数据挖掘探索,你需要了解你要处理的数据,大致感知一下。对于一些不正常的数据或者可疑的数据请和相关人员反复谈论,请他们解释一下反常的、残缺的和那些被等级化的数据。

数据的前期处理是非常枯燥的,费时费力,却是成功的数据挖掘所必要的。甚至有观点认为输入数据的准备工作应该在一个数据挖掘项目中占到60%。