WEKA汉化教程.docx
《WEKA汉化教程.docx》由会员分享,可在线阅读,更多相关《WEKA汉化教程.docx(22页珍藏版)》请在冰豆网上搜索。
WEKA汉化教程
WEKA汉化教程
图1新窗口打开
这里我们要介绍一下WEKA中的术语。
表格里的一个横行称作一个实例(Instance),相当于统计学中的一个样本,或者数据库中的一条记录。
竖行称作一个属性(Attrbute),相当于统计学中的一个变量,或者数据库中的一个字段。
这样一个表格,或者叫数据集,在WEKA看来,呈现了属性之间的一种关系(Relation)。
图1中一共有14个实例,5个属性,关系名称为“weather”。
WEKA存储数据的格式是ARFF(Attribute-RelationFileFormat)文件,这是一种ASCII文本文件。
图1所示的二维表格存储在如下的ARFF文件中。
这也就是WEKA自带的“weather.arff”文件,在WEKA安装目录的“data”子目录下可以找到。
代码:
%ARFFfilefortheweatherdatawithsomenumricfeatures
%
@relationweather
@attributeoutlook{sunny,overcast,rainy}
@attributetemperaturereal
@attributehumidityreal
@attributewindy{TRUE,FALSE}
@attributeplay{yes,no}
@data
%
%14instances
%
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文件可以分为两个部分。
第一部分给出了头信息(Headinformation),包括了对关系的声明和对属性的声明。
第二部分给出了数据信息(Datainformation),即数据集中给出的数据。
从“@data”标记开始,后面的就是数据信息了。
关系声明
关系名称在ARFF文件的第一个有效行来定义,格式为
@relation
是一个字符串。
如果这个字符串包含空格,它必须加上引号(指英文标点的单引号或双引号)。
属性声明
属性声明用一列以“@attribute”开头的语句表示。
数据集中的每一个属性都有它对应的“@attribute”语句,来定义它的属性名称和数据类型。
这些声明语句的顺序很重要。
首先它表明了该项属性在数据部分的位置。
例如,“humidity”是第三个被声明的属性,这说明数据部分那些被逗号分开的列中,第三列数据85908696...是相应的“humidity”值。
其次,最后一个声明的属性被称作class属性,在分类或回归任务中,它是默认的目标变量。
属性声明的格式为
@attribute
其中是必须以字母开头的字符串。
和关系名称一样,如果这个字符串包含空格,它必须加上引号。
WEKA支持的有四种,分别是
numeric-------------------------数值型
-----分类(nominal)型
string----------------------------字符串型
date[]--------日期和时间型
其中和将在下面说明。
还可以使用两个类型“integer”和“real”,但是WEKA把它们都当作“numeric”看待。
注意“integer”,“real”,“numeric”,“date”,“string”这些关键字是区分大小写的,而“relation”“attribute”和“date”则不区分。
数值属性
数值型属性可以是整数或者实数,但WEKA把它们都当作实数看待。
分类属性
分类属性由列出一系列可能的类别名称并放在花括号中:
{,,,...}。
数据集中该属性的值只能是其中一种类别。
例如如下的属性声明说明“outlook”属性有三种类别:
“sunny”,“overcast”和“rainy”。
而数据集中每个实例对应的“outlook”值必是这三者之一。
@attributeoutlook{sunny,overcast,rainy}
如果类别名称带有空格,仍需要将之放入引号中。
字符串属性
字符串属性中可以包含任意的文本。
这种类型的属性在文本挖掘中非常有用。
示例:
@ATTRIBUTELCCstring
日期和时间属性
日期和时间属性统一用“date”类型表示,它的格式是
@attributedate[]
其中是这个属性的名称,是一个字符串,来规定该怎样解析和显示日期或时间的格式,默认的字符串是ISO-8601所给的日期时间组合格式“yyyy-MM-ddTHH:
mm:
ss”。
数据信息部分表达日期的字符串必须符合声明中规定的格式要求(下文有例子)。
数据信息
数据信息中“@data”标记独占一行,剩下的是各个实例的数据。
每个实例占一行。
实例的各属性值用逗号“,”隔开。
如果某个属性的值是缺失值(missingvalue),用问号“?
”表示,且这个问号不能省略。
例如:
@data
sunny,85,85,FALSE,no
?
78,90,?
yes
字符串属性和分类属性的值是区分大小写的。
若值中含有空格,必须被引号括起来。
例如:
@relationLCCvsLCSH
@attributeLCCstring
@attributeLCSHstring
@data
AG5,'Encyclopediasanddictionaries.;Twentiethcentury.'
AS262,'Science--SovietUnion--History.'
日期属性的值必须与属性声明中给定的相一致。
例如:
@RELATIONTimestamps
@ATTRIBUTEtimestampDATE"yyyy-MM-ddHH:
mm:
ss"
@DATA
"2001-04-0312:
12:
12"
"2001-05-0312:
59:
55"
稀疏数据
有的时候数据集中含有大量的0值(比如购物篮分析),这个时候用稀疏格式的数据存贮更加省空间。
稀疏格式是针对数据信息中某个实例的表示而言,不需要修改ARFF文件的其它部分。
看如下的数据:
@data
0,X,0,Y,"classA"
0,0,W,0,"classB"
用稀疏格式表达的话就是
@data
{1X,3Y,4"classA"}
{2W,4"classB"}
每个实例用花括号括起来。
实例中每一个非0的属性值用<空格>表示。
是属性的序号,从0开始计;是属性值。
属性值之间仍用逗号隔开。
注意在稀疏格式中没有注明的属性值不是缺失值,而是0值。
若要表示缺失值必须显式的用问号表示出来。
Relational型属性
在WEKA3.5版中增加了一种属性类型叫做Relational,有了这种类型我们可以像关系型数据库那样处理多个维度了。
但是这种类型目前还不见广泛应用,暂不作介绍。
-----整理自http:
//www.cs.waikato.ac.nz/~ml/weka/arff.html
-和
3、数据准备
使用WEKA作数据挖掘,面临的第一个问题往往是我们的数据不是ARFF格式的。
幸好,WEKA还提供了对CSV文件的支持,而这种格式是被很多其他软件所支持的。
此外,WEKA还提供了通过JDBC访问数据库的功能。
在这一节里,我们先以Excel和Matlab为例,说明如何获得CSV文件。
然后我们将知道CSV文件如何转化成ARFF文件,毕竟后者才是WEKA支持得最好的文件格式。
面对一个ARFF文件,我们仍有一些预处理要做,才能进行挖掘任务。
.*->.csv
我们给出一个CSV文件的例子(bank-data.csv)。
用UltraEdit打开它可以看到,这种格式也是一种逗号分割数据的文本文件,储存了一个二维表格。
Excel的XLS文件可以让多个二维表格放到不同的工作表(Sheet)中,我们只能把每个工作表存成不同的CSV文件。
打开一个XLS文件并切换到需要转换的工作表,另存为CSV类型,点“确定”、“是”忽略提示即可完成操作。
在Matlab中的二维表格是一个矩阵,我们通过这条命令把一个矩阵存成CSV格式。
csvwrite('filename',matrixname)
需要注意的是,Matllab给出的CSV文件往往没有属性名(Excel给出的也有可能没有)。
而WEKA必须从CSV文件的第一行读取属性名,否则就会把第一行的各属性值读成变量名。
因此我们对于Matllab给出的CSV文件需要用UltraEdit打开,手工添加一行属性名。
注意属性名的个数要跟数据属性的个数一致,仍用逗号隔开。
.csv->.arff
将CSV转换为ARFF最迅捷的办法是使用WEKA所带的命令行工具。
运行WEKA的主程序,出现GUI后可以点击下方按钮进入相应的模块。
我们点击进入“SimpleCLI”模块提供的命令行功能。
在新窗口的最下方(上方是不能写字的)输入框写上
javaweka.core.converters.CSVLoaderfilename.csv>filename.arff
即可完成转换。
在WEKA3.5中提供了一个“ArffViewer”模块,我们可以用它打开一个CSV文件将进行浏览,然后另存为ARFF文件。
进入“Exploer”模块,从上方的按钮中打开CSV文件然后另存为ARFF文件亦可。
“Exploer”界面
我们应该注意到,“Exploer”还提供了很多功能,实际上可以说这是WEKA使用最多的模块。
现在我们先来熟悉它的界面,然后利用它对数据进行预处理。
图2新窗口打开
图2显示的是使用3.5版"Exploer"打开"bank-data.csv"的情况。
我们根据不同的功能把这个界面分成8个区域。
区域1的几个选项卡是用来切换不同的挖掘任务面板。
这一节用到的只有“Preprocess”,其他面板的功能将在以后介绍。
区域2是一些常用按钮。
包括打开数据,保存及编辑功能。
我们在这里把"bank-data.csv"另存为"bank-data.arff"。
在区域3中“Choose”某个“Filter”,可以实现筛选数据或者对数据进行某种变换。
数据预处理主要就利用它来实现。
区域4展示了数据集的一些基本情况。
区域5中列出了数据集的所有属性。
勾选一些属性并“Remove”就可以删除它们,删除后还可以利用区域2的“Undo”按钮找回。
区域5上方的一排按钮是用来实现快速勾选的。
在区域5中选中某个属性,则区域6中有关于这个属性的摘要。
注意对于数值属性和分类属性,摘要的方式是不一样的。
图中显示的是对数值属性“income”的摘要。
区域7是区域5中选中属性的直方图。
若数据集的最后一个属性(我们说过这是分类或回归任务的默认目标变量)是分类变量(这里的“pep”正好是),直方图中的每个长方形就会按照该变量的比例分成不同颜色的段。
要想换个分段的依据,在区域7上方的下拉框中选个不同的分类属性就可以了。
下拉框里选上“NoClass”或者一个数值属性会变成黑白的直方图。
区域8是状态栏,可以查看Log以判断是否有错。
右边的weka鸟在动的话说明WEKA正在执行挖掘任务。
右键点击状态栏还可以执行JAVA内存的垃圾回收。
预处理
bank-data数据各属性的含义如下:
idauniqueidentificationnumber
ageageofcustomerinyears(numeric)
sexMALE/FEMALE
regioninner_city/rural/suburban/town
incomeincomeofcustomer(numeric)
marriedisthecustomermarried(YES/NO)
childrennumberofchildren(numeric)
cardoesthecustomerownacar(YES/NO)
save_acctdoesthecustomerhaveasavingaccount(YES/NO)
current_acctdoesthecustomerhaveacurrentaccount(YES/NO)
mortgagedoesthecustomerhaveamortgage(YES/NO)
pepdidthecustomerbuyaPEP(PersonalEquityPlan)afterthelastmailing(YES/NO)
通常对于数据挖掘任务来说,ID这样的信息是无用的,我们将之删除。
在区域5勾选属性“id”,并点击“Remove”。
将新的数据集保存一次,并用UltraEdit打开这个ARFF文件。
我们发现,在属性声明部分,WEKA已经为每个属性选好了合适的类型。
我们知道,有些算法,只能处理所有的属性都是分类型的情况。
这时候我们就需要对数值型的属性进行离散化。
在这个数据集中有3个变量是数值型的,分别是“age”,“income”和“children”。
其中“children”只有4个取值:
0,1,2,3。
这时我们在UltraEdit中直接修改ARFF文件,把
@attributechildrennumeric
改为
@attributechildren{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-B10-M-0.1-Rfirst-last”。
点击这个文本框会弹出新窗口以修改离散化的参数。
我们不打算对所有的属性离散化,只是针对对第1个和第4个属性(见区域5属性名左边的数字),故把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。
----整理自http:
//maya.cs.depaul.edu/~classes/ect584/WEKA/preprocess.html
4.关联规则(购物篮分析)
注意:
目前,WEKA的关联规则分析功能仅能用来作示范,不适合用来挖掘大型数据集。
我们打算对前面的“bank-data”数据作关联规则的分析。
用“Explorer”打开“bank-data-final.arff”后,切换到“Associate”选项卡。
默认关联规则分析是用Apriori算法,我们就用这个算法,但是点“Choose”右边的文本框修改默认的参数,弹出的窗口中点“More”可以看到各参数的说明。
背景知识
首先我们来温习一下Apriori的有关知识。
对于一条关联规则L->R,我们常用支持度(Support)和置信度(Confidence)来衡量它的重要性。
规则的支持度是用来估计在一个购物篮中同时观察到L和R的概率P(L,R),而规则的置信度是估计购物栏中出现了L时也出会现R的条件概率P(R|L)。
关联规则的目标一般是产生支持度和置信度都较高的规则。
有几个类似的度量代替置信度来衡量规则的关联程度,它们分别是
Lift(提升度?
):
P(L,R)/(P(L)P(R))
Lift=1时表示L和R独立。
这个数越大,越表明L和R存在在一个购物篮中不是偶然现象。
Leverage(不知道怎么翻译):
P(L,R)-P(L)P(R)
它和Lift的含义差不多。
Leverage=0时L和R独立,Leverage越大L和R的关系越密切。
Conviction(更不知道译了):
P(L)P(!
R)/P(L,!
R)(!
R表示R没有发生)
Conviction也是用来衡量L和R的独立性。
从它和lift的关系(对R取反,代入Lift公式后求倒数)可以看出,我们也希望这个值越大越好。
值得注意的是,用Lift和Leverage作标准时,L和R是对称的,Confidence和Conviction则不然。
参数设置
现在我们计划挖掘出支持度在10%到100%之间,并且lift值超过1.5且lift值排在前100位的那些关联规则。
我们把“lowerBoundMinSupport”和“upperBoundMinSupport”分别设为0.1和1,“metricType”设为lift,“minMetric”设为1.5,“numRules”设为100。
其他选项保持默认即可。
“OK”之后在“Explorer”中点击“Start”开始运行算法,在右边窗口显示数据集摘要和挖掘结果。
下面是挖掘出来的lift排前5的规则。
Bestrulesfound:
(1).age=52_maxsave_act=YEScurrent_act=YES113==>income=43759_max61conf:
(0.54)(4.05)>lev:
(0.0
[45]conv:
(1.85)
(2).income=43759_max80==>age=52_maxsave_act=YEScurrent_act=YES61conf:
(0.76)(4.05)>lev:
(0.0
[45]conv:
(3.25)
(3).income=43759_maxcurrent_act=YES63==>age=52_maxsave_act=YES61conf:
(0.97)(3.85)>lev:
(0.0
[45]conv:
(15.72)
(4).age=52_maxsave_act=YES151==>income=43759_maxcurrent_act=YES61conf:
(0.4)(3.85)>lev:
(0.0
[45]conv:
(1.49)
(5).age=52_maxsave_act=YES151==>income=43759_max76conf:
(0.5)(3.77)>lev:
(0.09)[55]conv:
(1.72)
对于挖掘出的每条规则,WEKA列出了它们关联程度的四项指标。
命令行方式
我们也可以利用命令行来完成挖掘任务,在“SimlpeCLI”模块中输入如下格式的命令:
Javaweka.associations.Apriorioptions-tdirectory-path\bank-data-final.arff
即可完成Apriori算法。
注意,“-t”参数后的文件路径中不能含有空格。
在前面我们使用的option为
-N100-T1-C1.5-D0.05-U1.0-M0.1-S-1.0命令行中使用这些参数得到的结果和前面利用GUI得到的一样。
我们还可以加上“-I”参数,得到不同项数的频繁项集。
我用的命令如下:
javaweka.associations.Apriori-N100-T1-C1.5-D0.05-U1.0-M0.1-S-1.0-I-td:
\weka\bank-data-final.arff
挖掘结果在上方显示,应是这个文件的样子。
----整理自http:
//maya.cs.depaul.edu/~classes/ect584/WEKA/associate.html
5.分类与回归
背景知识
WEKA把分类(Classification)和回归(Regression)都放在“Classify”选项卡中,这是有原因的。
在这两个任务中,都有一个目标属性(输出变量)。
我们希望根据一个样本(WEKA中称作实例)的一组特征(输入变量),对目标进行预测。
为了实现这一目的,我们需要有一个训练数据集,这