实验一 熟悉weka平台
一、实验名称
WEKA的使用与数据准备
二、实验目的
熟悉数据挖掘的常用软件WEKA的安装和环境,理解weka的数据格式,掌握数据格式的转换,理解数据预处理的必要性和基本方法。
三、实验平台
计算机、软件WEKA、UtraEdit
四、实验数据
bank-data.csv(在服务器上有提供)
weather.arff (代码在文档中)
五、实验方法和步骤
1、实验准备
(1)访问WEKA网站http://www.cs.waikato.ac.nz/ml/weka,下载带JAVA虚拟机版本的WEKA。(机房如果安装就不用安装)
(2)将实验所需数据bank-data.csv从服务器下载。
2、了解weka的环境
(1)安装weka,了解weka的环境
(2) “weather.arff”文件,了解arff文件的格式
3、数据准备
(1)将原来的“bank-data.csv”文件转化为arff文件“bank-data.arff”。
(2)把“ID”属性去掉。
(3)把“Children”属性转换成数值型的值{0,1,2,3}。
(4)使用“Discretize”的Filter把“age”和“income”的离散化,另存文件为bank_data_final.arff
六、实验指导
1. 简介
WEKA的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),它的源代码可通过http://www.cs.waikato.ac.nz/ml/weka得到。同时weka也是新西兰的一种鸟名,而WEKA的主要开发者来自新西兰。
WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。
图一 WEKA主界面
如果想自己实现数据挖掘算法,可以看weka的接口文档,在weka中集成自己的算法。
2005年8月,在第11届ACM SIGKDD国际会议上,怀卡托大学的Weka小组荣获了数据挖掘和知识探索领域的最高服务奖,Weka系统得到了广泛的认可,被誉为数据挖掘和机器学习历史上的里程碑,是现今最完备的数据挖掘工具之一。
2. 数据格式
跟很多电子表格或数据分析软件一样,WEKA所处理的数据集是图2那样的一个二维的表格。
图2 新窗口打开
表格里的一个行称作一个实例(Instance),相当于统计学中的一个样本,或者数据库中的一条记录。列称作一个属性(Attrbute),相当于统计学中的一个变量,或数据库中的一个字段。这样一个表格(数据集),在WEKA看来,呈现了属性之间的一种关系(Relation)。图1中一共有14个实例,5个属性,关系名称为“weather”。
WEKA存储数据的格式是ARFF(Attribute-Relation File Format)文件,这是一种ASCII文本文件。图1所示的二维表格存储在如下的ARFF文件中。以下是“weather.arff”文件代码。
代码:
% ARFF file for the weather data with some numric features
%
@relation weather
@attribute outlook {sunny, overcast, rainy}
@attribute temperature real
@attribute humidity real
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}
@data
%
% 14 instances
%
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
rainy,68,80,FALSE,yes
rainy,65,70,TRUE,no
overcast,64,65,TRUE,yes
sunny,72,95,FALSE,no
sunny,69,70,FALSE,yes
rainy,75,80,FALSE,yes
sunny,75,70,TRUE,yes
overcast,72,90,TRUE,yes
overcast,81,75,FALSE,yes
rainy,71,91,TRUE,no
需要注意的是,在Windows记事本打开这个文件时,可能会因为回车符定义不一致而导致分行不正常。推荐使用UltraEdit这样的字符编辑软件察看ARFF文件的内容。识别ARFF文件的重要依据是分行,因此不能在这种文件里随意的断行。空行(或全是空格的行)将被忽略。以“%”开始的行是注释,WEKA将忽略这些行。如果你看到的“weather.arff”文件多了或少了些“%”开始的行,是没有影响的。除去注释后,整个ARFF文件可以分为两个部分。
第一部分:头信息(Head information),包括了对关系的声明和对属性的声明。
第二部分:数据信息(Data information),即数据集中给出的数据。从“@data”标记开始,后面的是数据信息。
(1)关系声明
关系名称在ARFF文件的第一个有效行来定义,格式为
@relation
(2)属性声明
属性声明用一列以“@attribute”开头的语句表示。数据集中的每一个属性都有它对应的“@attribute”语句,来定义它的属性名称和数据类型。
这些声明语句的顺序很重要。首先它表明了该项属性在数据部分的位置。例如,“humidity”是第三个被声明的属性,这说明数据部分那些被逗号分开的列中,第三列数据 85 90 86 96 ... 是相应的“humidity”值。其次,最后一个声明的属性被称作class属性,在分类或回归任务中,它是默认的目标变量。属性声明的格式为
@attribute
其中
WEKA支持的
numeric-------------------------数值型
string----------------------------字符串型
date [
其中
数值属性
①数值型属性可以是整数或者实数,但WEKA把它们都当作实数看待。
分类属性
②分类属性由
例如如下的属性声明说明“outlook”属性有三种类别:“sunny”,“ overcast”和“rainy”。而数据集中每个实例对应的“outlook”值必是这三者之一。
@attribute outlook {sunny, overcast, rainy}
如果类别名称带有空格,仍需要将之放入引号中。
字符串属性
③字符串属性中可以包含任意的文本。这种类型的属性在文本挖掘中非常有用
示例: @ATTRIBUTE LCC string
日期和时间属性
④日期和时间属性统一用“date”类型表示,它的格式是
@attribute
其中
(3)数据信息
数据信息中“@data”标记独占一行,剩下的是各个实例的数据。每个实例占一行。实例的各属性值用逗号“,”隔开。如果某个属性的值是缺失值(missing value),用问号“?”表示,且这个问号不能省略。例如:
@data
sunny,85,85,FALSE,no
?,78,90,?,yes
字符串属性和分类属性的值是区分大小写的。若值中含有空格,必须被引号括起来。例如:
@relation LCCvsLCSH
@attribute LCC string
@attribute LCSH string
@data
AG5, 'Encyclopedias and dictionaries.;Twentieth century.'
AS262, 'Science -- Soviet Union -- History.'
日期属性的值必须与属性声明中给定的相一致。例如:
@RELATION Timestamps
@ATTRIBUTE timestamp DATE "yyyy-MM-dd HH:mm:ss"
@DATA
"2001-04-03 12:12:12"
"2001-05-03 12:59:55"
(4)稀疏数据
有的时候数据集中含有大量的0值(比如购物篮分析),这个时候用稀疏格式的数据存贮更加省空间。稀疏格式是针对数据信息中某个实例的表示而言,不需要修改ARFF文件的其它部分。看如下的数据:
@data
0, X, 0, Y, "class A"
0, 0, W, 0, "class B"
用稀疏格式表达的话就是
@data
{1 X, 3 Y, 4 "class A"}
{2 W, 4 "class B"}
每个实例用花括号括起来。实例中每一个非0的属性值用
注意在稀疏格式中没有注明的属性值不是缺失值,而是0值。若要表示缺失值必须显式的用问号表示出来。
3、xls,cvs,arff数据格式转化
实际工程中数据常以各种各样的格式存储和加工,如Excel的xls文件,记事本文件,CSV文件。(CSV逗号分隔值文件(Comma Separated value),是一种用来存储数据的纯文本文件格式,通常用于电子表格或数据库软件。 )WEKA默认的存储数据的格式是ARFF,因此有必要了解其他格式的文件是如何转换为ARFF文件,以方便在weka中处理。
用UltraEdit打开bank-data.csv可以看到,这种格式也是一种逗号分割数据的文本文件,储存了一个二维表格。
图3 使用UltraEdit打开bank-data.csv
(1)Excel的xls转化为CSV
Excel的XLS文件可以让多个二维表格放到不同的工作表(Sheet)中,只能把每个工作表存成不同的CSV文件。打开一个XLS文件并切换到需要转换的工作表,另存为CSV类型,点“确定”、“是”忽略提示即可完成XLS转化为CSV格式的操作。
(2)使用“Arff Viewer”模块完成CSV文件转为Arff文件
在WEKA 3.5中提供了一个“Arff Viewer”模块,可以用它打开一个CSV文件将进行浏览,然后另存为ARFF文件。
图4 Arff Viewer”模块
图4 Arff Viewer”模块选择文件类型
进入“Exploer”模块,从上方的按钮中打开CSV文件然后另存为ARFF文件。
5.1数据集属性的选择
通常对于数据挖掘任务来说,ID这样的信息是无用的,我们将之删除。在区域5勾选属性“id”,并点击“Remove”。将新的数据集保存一次,并用UltraEdit打开这个ARFF文件。我们发现,在属性声明部分,WEKA已经为每个属性选好了合适的类型。
5.2数值数据属性的离散化处理
有些算法,只能处理所有的属性都是分类型的情况。这时候就需要对数值型的属性进行离散化。
在bank-data数据集中有3个变量是数值型的,分别是“age”,“income”和“children”。 其中“children”只有4个取值:0,1,2,3。这时我们在UltraEdit中直接修改ARFF文件,把 @attribute children numeric
改为 @attribute children {0,1,2,3} 就可以了。
在“Explorer”中重新打开“bank-data.arff”,看看选中“children”属性后,区域6那里显示的“Type”是不是变成“Nominal”了?
“age”和“income”的离散化我们需要借助WEKA中名为“Discretize”的Filter来完成。在区域2中点“Choose”,出现一棵“Filter树”,逐级找到“weka.filters.unsupervised.attribute.Discretize”,点击。若无法关闭这个树,在树之外的地方点击“Explorer”面板即可。
现在“Choose”旁边的文本框应该显示“Discretize -B 10 -M -0.1 -R first-last”。 点击这个文本框会弹出新窗口以修改离散化的参数。
图6WEKA中“Discretize”的Filter的离散化的参数设置
不打算对所有的属性离散化,只是针对对第1个和第4个属性,故把attributeIndices右边改成“1,4”。计划把这两个属性都分成3段,于是把“bins”改成“3”。其它框里不用更改,关于它们的意思可以点“More”查看。点“OK”回到“Explorer”,可以看到“age”和“income”已经被离散化成分类型的属性。若想放弃离散化可以点区域2的“Undo”。
如果对“"(-inf-34.333333]"”这样晦涩的标识不满,可以用UltraEdit打开保存后的ARFF文件,把所有的“'\'(-inf-34.333333]\''”替换成“0_34”。其它标识做类似地手动替换。 经过上述操作得到的数据集我们保存为bank-data-final.arff。
五、通过实验,要求同学实验中解决以下问题,并递交完整的实验报告
1、ARFF数据类型的格式如何,数据如何转换成ARFF数据类型?将转换后的文档bank-data-final.arff提交
2、为什么在数据预处理中,需要进行数据处理和分类数据的转换。
3、仔细观察WEKA Explorer 的主界面,解释1~8区域的对应的含义与作用。
4、访问如下站点,了解IBM和微软在其数据库产品中提供的数据挖掘功能。
[1] https://www.ibm.com/support/knowledgecenter/search/data%20mining
[2]http://msdn.microsoft.com/zh-cn/library/ms175595.aspx
最终提交要求:
一个实验报告和一个转换过的bank-data-final.arff文件,放到文件夹中压缩提交,压缩包命名为:学号+姓名
数据挖掘
(1)将原来的“bank-data.csv”文件转化为arff文件“bank-data.arff”。
步骤一:用weka打开“bank-data.csv”准备转换
步骤二:另存为转换成bank-data-.arff文件
(2)把“ID”属性去掉。
(3)把“Children”属性转换成数值型的值{0,1,2,3}。
步骤一:将上步骤中的文件重新命名为bank-data-id.arff,并用记事本打开
更改前
更改后
步骤二:在“Explorer”中重新打开“bank-data.arff”,看看选中“children”属性后,区域6那里显示的“Type” 变成“Nominal”,如下图可见
(4)使用“Discretize”的Filter把“age”和“income”的离散化,另存文件为bank_data_final.arff
在区域2中点“Choose”逐级找到“Discretize -B 10 -M -0.1 -R first-last”文件。
离散化改成12段
Age更改后
Income更改后
最后保存文件为bank_data_final0236.arff