实验指导书
数据挖掘技术
适用专业:信息与计算科学及相关专业
计算机与信息学院编
2011年5月
实验一
一、实验名称
WEKA的使用与数据准备 二、实验目的
熟悉数据挖掘的常用软件WEKA的安装和环境,理解weka的数据格式,掌
握数据格式的转换,理解数据预处理的必要性和基本方法。 三、实验平台
计算机、软件WEKA、UtraEdit
四、实验数据
bank-data.csv
(在教材配套光盘的\\CompanionCD\\Datafiles\\Chapter_7_AR 目录下) weather.arff
(WEKA安装目录的“data”子目录) 五、实验方法和步骤
1、实验准备
(1)访问WEKA网站http://www.cs.waikato.ac.nz/ml/weka,下载带JAVA虚拟机版本的WEKA,保存在U盘中。
(2)阅读课本第8章5.11-8.14小结的内容。
(3)将实验所需数据bank-data.csv 从光盘拷贝只U盘中。 2、了解weka的环境
(1)安装weka,了解weka的环境
(2)打WEKA自带的“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文件中。这也就是WEKA自带的“weather.arff”文件,在WEKA安装目录的“data”子目录下可以找到。
代码:
% 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,,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-------------------------数值型 其中 ①数值型属性可以是整数或者实数,但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文件,matlab环境下的矩阵。(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)把一个matlab环境下的矩阵存成CSV格式 在Matlab中的二维表格是一个矩阵,通过这条命令把一个矩阵存成CSV格式。 csvwrite('filename',matrixname) Matllab给出的CSV文件往往没有属性名(Excel给出的也有可能没有)。而WEKA必须从CSV文件的第一行读取属性名,否则就会把第一行的各属性值读成变量名。因此对于Matllab给出的CSV文件需要用UltraEdit打开,手工添加一行属性名。注意属性名的个数要跟数据属性的个数一致,仍用逗号隔开。 (3)将CSV转换为ARFF 将CSV转换为ARFF最迅捷的办法是使用WEKA所带的命令行工具。 运行WEKA的主程序,出现GUI后可以点击下方按钮进入相应的模块。点击进入“Simple CLI”模块提供的命令行功能。在新窗口的最下方(上方是不能写字的)输入框写上 java weka.core.converters.CSVLoader filename.csv > filename.arff 即可完成转换。 (4)使用“Arff Viewer”模块完成CSV文件转为Arff文件 在WEKA 3.5中提供了一个“Arff Viewer”模块,可以用它打开一个CSV文件将进行浏览,然后另存为ARFF文件。 图4 Arff Viewer”模块 图4 Arff Viewer”模块选择文件类型 进入“Exploer”模块,从上方的按钮中打开CSV文件然后另存为ARFF文件。 4、“Exploer”界面简介 图5 “Exploer”界面 图5显示的是使用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上方的下拉框中选个不同的分类属性就可以了。下拉框里选上“No Class”或者一个数值属性会变成黑白的直方图。 区域8是状态栏,可以查看Log以判断是否有错。右边的weka鸟在动的话说明WEKA正在执行挖掘任务。右键点击状态栏还可以执行JAVA内存的垃圾回收。 5、bank-data数据的预处理 bank-data数据各属性的含义如下: id age sex region income married children car save_acct current_acct mortgage pep a unique identification number age of customer in years (numeric) MALE / FEMALE inner_city/rural/suburban/town income of customerr (numeric) is the customer married (YES/NO) number of children (numeric) does the customer own a car (YES/NO) does the customer have a saving account (YES/NO) does the customer have a current account (YES/NO) does the customer have a mortgage (YES/NO) did the customer buy a PEP after the last mailing (YES/NO) 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个属性(见区域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。 五、通过实验,要求同学实验中解决以下问题,并递交完整的实验报告 1、ARFF数据类型的格式如何,数据如何转换成ARFF数据类型? 2、为什么在数据预处理中,需要进行数据数据和分类数据的转换。 3、仔细观察WEKA Explorer 的主界面,解释1~8区域的对应的含义与作用。 4、访问如下站点,了解IBM和微软在其数据库产品中提供的数据挖掘功能。 [1]http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.dwe.tut.mining.doc/tutmining_assocmodel.html [2]http://msdn.microsoft.com/zh-cn/library/ms175595.aspx 实验二 一、实验名称 基于关联规则的数据挖掘 二、实验目的 通过一个已有的训练数据集,观察训练集中的实例,进行关联数据挖掘,更好地理解和掌握关联规则算法的基本原理,建立相应的预测模型,然后对新的未知实例进行预测,通过预测的准确程度来衡量所建立模型的好坏。 三、实验要求 1、熟悉Weka平台 2、掌握关联规则算法 3、对数据进行预处理,利用Weka和不同参数设置进行关联分析,对比结果,得出结论,对问题进行总结。 四、实验平台 计算机、软件WEKA、UtraEdit 五、实验数据 1、使用银行对资产进行评估的数据bank-data.arf,数据里有12个属性,分别是id,age,sex,region,income,married,children, car, save_act, current_act, mortgage,pep.共600个实例。 2、本测试集中将pep属性作为分类的目标类别,因此将其设为缺失值.缺失值用?表示。 六、实验方法和步骤 1、打开WEKA界面选择Explorer进行实验。 2、选择Explorer选项,选择Open file打开bank-data.arff数据,打开 可以看见数据中的属性,选择属性从右边查看取值范围。 3、进行数据过滤,选择Filter中的Discretize方法,点击Apply,先对ARFF文件进行离散化:用UltraEdit对其进行编辑:@attribute children numeric改为: @attribute children {0,1,2,3} 然后用discretize算法对age和income离散化,并删掉id项因为它对关联规则分析无影响,保存文件。 4、选择Associate项中的Apriori算法分析进行关联数据挖掘,并进行参数 调整。记录并分析实验结果。 六、实验指导 1、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则不然。 2、参数设置 现在我们计划挖掘出支持度在10%到100%之间,并且lift值超过1.5且lift值排在前100位的那些关联规则。我们把“lowerBoundMinSupport”和“upperBoundMinSupport”分别设为0.1和1,“metricType”设为lift,“minMetric”设为1.5,“numRules”设为100。其他选项保持默认即可。“OK” 之后在“Explorer”中点击“Start”开始运行算法,在右边窗口显示数据集摘要和挖掘结果。 下面是某次实验中挖掘出来的lift排前5的规则。 Best rules found: (1).age=52_max save_act=YES current_act=YES 113 ==> income=43759_max 61 conf:(0.54) < lift:(4.05)> lev:(0.08) [45] conv:(1.85) (2). income=43759_max 80 ==> age=52_max save_act=YES current_act=YES 61 conf:(0.76) < lift:(4.05)> lev:(0.08) [45] conv:(3.25) (3). income=43759_max current_act=YES 63 ==> age=52_max save_act=YES 61 conf:(0.97) < lift:(3.85)> lev:(0.08 )[45] conv:(15.72) (4). age=52_max save_act=YES 151 ==> income=43759_max current_act=YES 61 conf:(0.4) < lift:(3.85)> lev:(0.08) [45] conv:(1.49) (5). age=52_max save_act=YES 151 ==> income=43759_max 76 conf:(0.5) < lift:(3.77)> lev:(0.09) [55] conv:(1.72) 对于挖掘出的每条规则,WEKA列出了它们关联程度的四项指标。 3、命令行方式 我们也可以利用命令行来完成挖掘任务,在“Simlpe CLI”模块中输入如下格式的命令: Java weka.associations.Apriori options -t directory-path\\bank-data-final.arff 即可完成Apriori算法。注意,“-t”参数后的文件路径中不能含有空格。 在前面我们使用的option为 -N 100 -T 1 -C 1.5 -D 0.05 -U 1.0 -M 0.1 -S -1.0 命令行中使用这些参数得到的结果和前面利用GUI得到的一样。 我们还可以加上“- I”参数,得到不同项数的频繁项集。我用的命令如下: java weka.associations.Apriori -N 100 -T 1 -C 1.5 -D 0.05 -U 1.0 -M 0.1 -S -1.0 -I -t d:\\weka\\bank-data-final.arff 七、通过实验,要求同学在关联规则数据挖掘实验中解决以下问题,并递交完整的实验报告 1. 对于非xls格式的数据如何转换成ARFF数据类型?请给出你了解到的几种数据类型到ARFF的转换方式? 2. 在算法出来的lift排前1的规则中,如: 1. age=52_max save_act=YES current_act=YES 113 ==> income=43759_max 61 conf:(0.54) < lift:(4.05)> lev:(0.08) [45] conv:(1.85) 请说明 其中113、 61、conf:(0.54)都表示什么含义? 3. 请问:通过在左下方“Result list”列出的结果上右击,点“Visualize cluster assignments”。弹出的窗口是否能给出实例完成后的可视化结果,如果有,请截图,并在实验报告中给出详解. 实验三 一、实验名称: 分类与回归方法数据挖掘 二、实验目的: 掌握基于决策树的归纳分类或贝叶斯分类、基于回归的数据挖掘方法 三、实验要求 1、熟悉Weka平台 2、掌握C4.5决策树算法或Naïve Bayes、线性回归算法 3、对数据进行预处理,利用Weka和不同参数设置进行分类分析,对比结果,得出结论,对问题进行总结。 四、实验平台 计算机、软件WEKA、UtraEdit 五、实验数据 1、使用银行对资产进行评估的数据bank-data.arf,数据里有12个属性,分别是id,age,sex,region,income,married,children, car, save_act, current_act, mortgage,pep.共600个实例。 2、将含有600个实例的“bank-data.csv”文件中取出300个实例用做训练集,在另外300个实例中取50个作为待预测的实例。 3、本测试集中将pep属性作为分类的目标类别,因此将其设为缺失值.缺失值用?表示。 4、经过了这些处理的训练集数据可在[1]下载;待预测集数据在[2]下载,也可自己人工制作。 [1]http://maya.cs.depaul.edu/~classes/ect584/WEKA/classify/bank.arff [2]http://maya.cs.depaul.edu/~classes/ect584/WEKA/classify/bank-new.arff 六、实验方法、步骤和指导 1. 背景知识 WEKA把分类(Classification)和回归(Regression)都放在“Classify”选项卡中,这是有原因的。 在这两个任务中,都有一个目标属性(输出变量)。我们希望根据一个样本(WEKA中称作实例)的一组特征(输入变量),对目标进行预测。为了实现这一目的,我们需要有一个训练数据集,这个数据集中每个实例的输入和输出都是已 知的。观察训练集中的实例,可以建立起预测的模型。有了这个模型,我们就可以新的输出未知的实例进行预测了。衡量模型的好坏就在于预测的准确程度。 在WEKA中,待预测的目标(输出)被称作Class属性,这应该是来自分类任务的“类”。一般的,若Class属性是分类型时我们的任务才叫分类,Class属性是数值型时我们的任务叫回归。 2. 实验方法及步骤 这一节中,使用C4.5决策树算法或Naïve Bayes算法对bank-data建立起分类模型。 原来的“bank-data.csv”文件,“ID”属性肯定是不需要的。由于C4.5算法可以处理数值型的属性,我们不用像前面用关联规则那样把每个变量都离散化成分类型。尽管如此,我们还是把“Children”属性转换成分类型的两个值“YES”和“NO”。另外,我们的训练集仅取原来数据集实例的一半;而从另外一半中抽出若干条作为待预测的实例,它们的“pep”属性都设为缺失值。 1、数据准备 (1)将原来的“bank-data.csv”文件转化为arff文件“bank-data.csv.arff”。 (2)“ID”属性不需要的去掉。 (3)把“Children”属性转换成分类型的两个值“YES”和“NO”。 (4)将“bank-data.csv.arff”文件的600条数据中前300条数据作为训练数据集,并保存为文件。 (5)从后300条数据里抽取50条数据作为测试数据集,它们的“pep”属性都设为缺失值,并保存为文件。 2、训练过程 (1)用“Explorer”打开训练集“bank.arff”,观察一下它是不是按照前面的要求处理好了。 (2)切换到“Classify”选项卡,点击“Choose”按钮后可以看到很多分类或者回归的算法分门别类的列在一个树型框里。3.5版的WEKA中,树型框下方有一个“Filter...”按钮,点击可以根据数据集的特性过滤掉不合适的算法。我们数据集的输入属性中有“Binary”型(即只有两个类的分类型)和数值型的属性,而Class变量是“Binary”的;于是我们勾选“Binary attributes”“Numeric attributes”和“Binary class”。点“OK”后回到树形图,可以发现一些算法名称变红了,说明它们不能用。选择“trees”下的“J48”,这就是我们需要的C4.5算法。 (3)点击“Choose”右边的文本框,弹出新窗口为该算法设置各种参数。点“More”查看参数说明,点“Capabilities”是查看算法适用范围。这里我们把参数保持默认。 (4)现在来看左中的“Test Option”。我们没有专门设置检验数据集,为了保证生成的模型的准确性而不至于出现过拟合(overfitting)的现象,有必要采用10折交叉验证(10-fold cross validation)来选择和评估模型。若不明白交叉验证的含义可以Google一下。 (5)查看建模结果 OK,选上“Cross-validation”并在“Folds”框填上“10”。点“Start”按钮开始让算法生成决策树模型。很快,用文本表示的一棵决策树,以及对这个决策树的误差分析等等结果出现在右边的“Classifier output”中。同时左下的“Results list”出现了一个项目显示刚才的时间和算法名称。如果换一个模型或者换个参数,重新“Start”一次,则“Results list”又会多出一项。 “J48”算法交叉验证的结果之一为 Correctly Classified Instances 206 68.6667 % 也就是说这个模型的准确度只有69%左右。需要对原属性进行处理,或者修改算法的参数来提高准确度。但这里不管它,继续用这个模型。 (6)右键点击“Results list”刚才出现的那一项,弹出菜单中选择“Visualize tree”,新窗口里可以看到图形模式的决策树。建议把这个新窗口最大化,然后点右键,选“Fit to screen”,可以把这个树看清楚些。看完后截图或者关掉 “Confusion Matrix”的含义。 === Confusion Matrix === a b <-- classified as 74 | a = YES 30 132 | b = NO 这个矩阵是说,原本“pep”是“YES”的实例,有74个被正确的预测为“YES”,有个错误的预测成了“NO”;原本“pep”是“NO”的实例,有30个被错误的预测为“YES”,有132个正确的预测成了“NO”。74++30+132 = 300是实例总数,而(74+132)/300 = 0.68667正好是正确分类的实例所占比例。这个矩阵对角线上的数字越大,说明预测得越好。 (7)模型应用 要用生成的模型对那些待预测的数据集进行预测了,注意待预测数据集和训练用数据集各个属性的设置必须是一致的。WEKA中并没有直接提供把模型应用到带预测数据集上的方法,我们要采取间接的办法。 在“Test Opion”中选择“Supplied test set”,并且“Set”成“bank-new.arff”文件。重新“Start”一次。注意这次生成的模型没有通过交叉验证来选择,“Classifier output”给出的误差分析也没有多少意义。这也是间接作预测带来的缺陷吧。 现在,右键点击“Result list”中刚产生的那一项,选择“Visualize classifier errors”。我们不去管新窗口中的图有什么含义,点“Save”按钮,把结果保存成“bank-predicted.arff”。这个ARFF文件中就有我们需要的预测结果。在“Explorer”的“Preprocess”选项卡中打开这个新文件,可以看到多了两个属性“Instance_number”和“predictedpep”。“Instance_number”是指一个实例在原“bank-new.arff”文件中的位置,“predictedpep”就是模型预测的结果。点“Edit”按钮或者在“ArffViewer”模块中打开可以查看这个数据集的内容。比如,对实例0的pep预测值为“YES”,对实例4的预测值为“NO”。 3、使用命令行(推荐) 虽然使用图形界面查看结果和设置参数很方便,但是最直接最灵活的建模及应用的办法仍是使用命令行。 打开“Simple CLI”模块,像上面那样使用“J48”算法的命令格式为: java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-path\\bank.arff -d directory-path \\bank.model 其中参数“ -C 0.25”和“-M 2”是和图形界面中所设的一样的。“-t ”后面跟着的是训练数据集的完整路径(包括目录和文件名),“-d ”后面跟着的是保存模型的完整路径。注意!这里我们可以把模型保存下来。 输入上述命令后,所得到树模型和误差分析会在“Simple CLI”上方显示,可以复制下来保存在文本文件里。误差是把模型应用到训练集上给出的。 把这个模型应用到“bank-new.arff”所用命令的格式为: java weka.classifiers.trees.J48 -p 9 -l directory-path\\bank.model -T directory-path \\bank-new.arff 其中“-p 9”说的是模型中的Class属性是第9个(也就是“pep”),“-l”后面是模型的完整路径,“-T”后面是待预测数据集的完整路径。 输入上述命令后,在“Simple CLI”上方会有这样一些结果: 0 YES 0.75 ? 1 NO 0.7272727272727273 ? 2 YES 0.95 ? 3 YES 0.88135593220338 ? 4 NO 0.84210526315747 ? ... 这里的第一列就是提到过的“Instance_number”,第二列就是刚才的“predictedpep”,第四列则是“bank-new.arff”中原来的“pep”值(这里都是“?”缺失 值)。第三列对预测结果的置信度(confidence )。比如说对于实例0,我们有75%的把握说它的“pep”的值会是“YES”,对实例4我们有84.2%的把握说它的“pep”值会是“NO”。 使用命令行至少有两个好处。一个是可以把模型保存下来,这样有新的待预测数据出现时,不用每次重新建模,直接应用保存好的模型即可。另一个是对预测结果给出了置信度,我们可以有选择的采纳预测结果,例如,只考虑那些置信度在85%以上的结果。 可惜,命令行仍不能保存交叉验证等方式选择过的模型,也不能将它们应用到待预测数据上。要实现这一目的,须用到“KnowledgeFlow”模块的“ PredictionAppender” 七、通过实验,要求同学在实验中解决以下问题,并递交完整的实验报告 1、在数据预处理中,通过转换与否的实验比较,判断是否一定要把“Children”属性转换成分类型的两个值“YES” “NO”。 2、 在算法选择时,点击“Choose”按钮后可以看到哪些分类的算法分门别类的列在一个树型框里? 将些数据截图,在实验报告中进行详解。 3、点击“Choose”右边的文本框,弹出新窗口为该算法设置各种参数。点“More”查看参数说明,点“Capabilities”查看算法适用范围。请在实验报告中详解的参数设置情况。 4、请介绍你建立好的模型以及对该模型的误差分析等结果,如:出现在“Classifier output”中的模型准确度等,将这些数据截图, 在实验报告中进行详解。 5、如果你的模型准确度不高,你是怎样通过修改算法的参数来提高准确度的? 6、通过点击“Results list”,并选择可视化,在图形模式中打开你的模型,并将它截图,在实验报告中显示你的实验结果。 7、使用类似方法,完成基于Naïve Bayes算法对bankdata数据分类数据挖掘实验。 实验四 一、实验名称: 基于聚类分析的数据挖掘 二、实验目的: 通过一个已有的训练数据集,观察训练集中的实例,进行聚类数据挖掘,更好地理解和掌握聚类分析算法基本原理,建立相应的预测模型,然后对新的未知实例进行预测,预测的准确程度来衡量所建立模型的好坏。 三、实验要求 1、熟悉Weka平台 2、掌握聚类分析算法 3、对数据进行预处理,利用Weka和不同参数设置进行聚类分析,对比结果,得出结论,对问题进行总结。 三、实验平台 计算机、软件WEKA、UtraEdit 四、实验数据 1、使用银行对资产进行评估的数据bank-data.arf,数据里有12个属性,分别是id,age,sex,region,income,married,children, car, save_act, current_act, mortgage,pep.共600个实例。 2、本测试集中将pep属性作为分类的目标类别,因此将其设为缺失值.缺失值用?表示。 五、实验方法和步骤 1、首先对于原始数据做预处理。把“bank-data.xls”格式数据转换为“bank-data.csv”,并删去属性“id”,保存为ARFF格式后,修改属性“children”为分类型。这样得到的数据文件为“bank-data.arff”,含600条实例。 具体操作如下。 (1)将xls格式文件转化为csv格式文件。打开bank-data.xls,另存为csv格式的文件,并命名为bank-data,接着将CSV文件,转换为ARFF格式文件bank-data. arff。 (2)删去属性“id”,保存为ARFF格式;用UltraEdit打开bank-data. arff文件, 修改属性“children”为分类型. 把@attribute children numeric改为@attribute children {0,1,2,3},然后保存即可 2、用Weka打开bank-data.arff文件,进行相应设置后开始分析。 (1)用“Explorer”打开刚才得到的“bank-data.arff”,并切换到“Cluster”。点“Choose”按钮选择“SimpleKMeans”,这是WEKA中实现K均值的算法。点击旁边的文本框,修改“numClusters”为6,说明把这600条实例聚成6类,即K=6。下面的“seed”参数是要设置一个随机种子,依此产生一个随机数,用来得到K均值算法中第一次给出的K个簇中心的位置。设它的值为10或其他数值。 (2)选中“Cluster Mode”的“Use training set”,点击“Start”按钮,观察右边“Clusterer output”给出的聚类结果。也可以在左下角“Result list”中这次产生的结果上点右键,“View in separate window”在新窗口中浏览结果。记录并分析实验结果。 六、实验指导 聚类分析中的“类”(cluster)和前面分类的“类”(class)是不同的,对cluster更加准确的翻译应该是“簇”。聚类的任务是把所有的实例分配到若干的簇,使得同一个簇的实例聚集在一个簇中心的周围,它们之间距离的比较近;而不同簇实例之间的距离比较远。对于由数值型属性刻画的实例来说,这个距离通常指欧氏距离。 对前面的“bank data”作聚类分析,使用最常见的K均值(K-means)算法。下面简单描述一下K均值聚类的步骤。 K均值算法首先随机的指定K个簇中心。然后:1)将每个实例分配到距它最近的簇中心,得到K个簇;2)计分别计算各簇中所有实例的均值,把它们作为各簇新的簇中心。重复1)和2),直到K个簇中心的位置都固定,簇的分配也固定。 上述K均值算法只能处理数值型的属性,遇到分类型的属性时要把它变为若干个取值0和1的属性。WEKA将自动实施这个分类型到数值型的变换,而且WEKA会自动对数值型的数据作标准化。因此,对于原始数据“bank-data.csv”,我们所做的预处理只是删去属性“id”,保存为ARFF格式后,修改属性“children”为分类型。这样得到的数据文件为“bank.arff”,含600条实例。 (1)注意实验结果中有这么一行:Within cluster sum of squared errors: 1604.7416693522332 这是评价聚类好坏的标准,数值越小说明同一簇实例之间的距离越小。也许你得到的数值会不一样;实际上如果把“seed”参数改一下,得到的这个数 值就可能会不一样。我们应该多尝试几个seed,并采纳这个数值最小的那个结果。例如我们让“seed”取100,就得到 Within cluster sum of squared errors: 1555.6241507629218 , 这样就选择后面这个。当然再尝试几个seed,这个数值可能会更小。 (2)接下来“Cluster centroids:”之后列出了各个簇中心的位置。对于数值型的属性,簇中心就是它的均值(Mean);分类型的就是它的众数(Mode), 也就是说这个属性上取值为众数值的实例最多。对于数值型的属性,还给出了它在各个簇里的标准差(Std Devs) (3)最后的“Clustered Instances”是各个簇中实例的数目及百分比。 (4)观察可视化的聚类结果,我们在左下方“Result list”列出的结果上右击,点“Visualize cluster assignments”。弹出的窗口给出了各实例的散点图。最上方的两个框是选择横坐标和纵坐标,它们分别代表实例的位置和年龄属性.第二行的“color”是散点图着色的依据,默认是根据不同的簇“Cluster”给实例标上不同的颜色。 (5)可以在这里点“Save”把聚类结果保存成ARFF文件。在这个新的ARFF文件中,“instance_number”属性表示某实例的编号,“Cluster”属性表示聚类算法给出的该实例所在的簇。 七、通过实验,要求同学在聚类数据挖掘获取实验中解决以下问题,并递交完整的实验报告 1. 在Weka中实现K均值聚类的数据预处理中: (1)为什么要将children属性变成分类型? (2)Weka将自动实施这个分类型到数值型的变换是指将这个分类型的属性变为若干个取值0和1的属性,将这个变化结果截图于实验报告中,并进行解释。 2. 在“Cluster Mode”的“Use training set”,点击“Start”按钮,将在右边“Clusterer output”给出的聚类结果以及在左下角“Result list”中产生的结果,请截图,并在实验报告中进行详解。 3. 多尝试几个seed,给出你建立的模型结果的分析情况分类型的簇中心是它的众数(Mode), 给出在你实验中的一个众数(Mode)数据,并加以解释。 实验报告格式 一、实验名称 二、实验目的 三、实验平台 四、实验数据 五、实验方法和步骤 六、实验结果分析 课程案例用商业数据集说明 LoadRaw 贷款申请数据集 信息等年龄 Age 24 20 20 33 30 55 28 收入 Income 55557 17152 85104 40921 76183 80149 26169 资产 Assets 27040 11090 0 91111 101162 511937 47355 债务 Debts 48191 20455 14361 90076 114601 21923 49341 贷款量 Want 1500 400 4500 2900 1000 1000 3100 风险 credit red green green amber green red green 级 Risk high high high medium high low high 1 1 1 0 归还贷款结果 On-time 1 1 1 JobRaw 求职数据集 年龄 Age 20 27 28 28 30 21 出生地 State AZ TX CO MA CA TX 学历 Degree Cert Cert MS UG MS Cert 专业 Major none none other IS Csci none 经验 Experience 0 5 6 6 8 0 结果 Outcome minimal minimal minimal adequate adequate minimal FraudRaw 保险欺诈数据集 有记录的罚单年龄 Age 59 35 39 18 24 33 性别 Gender 0 0 1 1 1 1 索赔数额 数量 Claim 1700 2400 1700 3000 1600 1600 tickets 0 0 0 0 0 0 索赔先例 prior claims 0 0 0 0 0 0 代理人 结果 atty none none none none none none outcome 0 0 0 0 0 0 支出数据集 (已经经过预处理) 年龄 性别 婚否 子女数量 收入 当前工作年限 本社区居住年限 受教育年数 驾驶执是否有己的住所 信用卡数量 去花费年在食注品上销的比信例 用卡的数量 Age Gender MaDepents Income YrJob YrTown YrEd DrivLic 1 0 0.5 1 0 1 1 1 1 0 0 0 0.2 0 0.2 0 0.40026983773 0.2562307 0.20713204907 0.29536259129 0.28698547391 0.146013599 0.20770305582 0.25 0.2 0.35 0.65 1 0.3 0.75 0 0 0 0 0.6 0.125 0 0 1 1 0 0 0 1 1 1 0 0.1 1 0.1 0.4 0.9 0.2 1 0.88 0 0.06 0 0.56 0 0.72 1 0.14 1 0.68 1 OwnHome CredC Churn 0 1 0 0 1 0 1 0.031 0.044 0.000 0.073 0.037 0.140 0.052 0.009 0.032 0.080 0.002 0.019 0.017 0.049 0.132 0.210 0.247 0.248 0.237 0.374 0.201 0.031 0.000 0.042 0.069 0.081 0.081 0.098 0.059 0.079 0.067 0.197 0.091 0.050 0.099 0.066 0.049 0.119 0.062 0.146 0.091 0.106 0.035 0.116 0.050 0.072 0.000 0.165 0.076 ProGroc ProRest ProHous ProUtil ProAuto ProCloth ProEnt rital end花费餐饮品上的比例 花费在住房上的比例 花费在公共事业上的比例 花费在汽车上的比例 花费在服装上的比例 花费在娱乐上的比例 照 自0.92 0 0.125 1 0 0.75 1 1 0.72 0.125 1 课程项目 Project 1 课程成绩数据挖掘(Course Achievement Data Mining) 目标:通过对一个专业的所有学生所学课程所取得的各科成绩进行数据挖掘。拟解决下述问题 (1)各门课程之间是否有影响关系? (2)造成学生留级、退学的主要课程有哪些? (3)什么类型的学生最有可能留级或退学? Project 2生活方式与成绩绩点数据挖掘(Lifestyle and GPA Data Mining ) 目标:研究表明大学生的生活方式对学习成绩有一定的影响。通过调查表格收集数据,使用数据挖掘方法分析数据拟解决下述问题 (1)、具有高的成绩绩点的学生生活方式是什么? (2)、什么样的生活方式会导致低的成绩绩点? (3)、影响成绩绩点的最主要因素是什么? 课程项目报告格式 1 问题背景及描述 1.1问题背景及拟解决的问题 1.2数据的采集与说明 2 设计思路与方案概述 2.1采用的工具介绍 2.2拟采用方案(算法的基本原理) 3. 实验过程及实验结果分析 3.1数据预处理方法 3.2算法参数设置 3.3实验结果 3.4对实验结果的分析 4 讨论与思考
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务