【转】主要空间数据挖掘方法
Source: http://jerry429.bokee.com/2993629.html
张新长 马林兵等,《地理信息系统数据库》[M],科学出版社,2005年2月 第二章第二节
空间数据
空间数据挖掘是多学科和多种技术交叉综合的新领域,其挖掘方法以人工智能、专家系统、机器学习、数据库和统计等成熟技术为基础。下面介绍近年来出现的主要空间数据挖掘方法。
1、空间分析方法
利用GIS的各种空间分析模型和空间操作对GIS数据库中的数据进行深加工,从而产生新的信息和知识。常用的空间分析方法有综合属性数据分析、拓扑分析、缓冲区分析、距离分析、叠置分析、地形分析、趋势面分析、预测分析等,可发现目标在空间上的相连、相邻和共生等关联规则,或发现目标之间的最短路径、最优路径等辅助决策知识。
2、统计分析方法
统计分析一直是分析空间数据的常用方法,着重于空间物体和现象的非空间特性分析。统计方法有较强的理论基础,拥有大量成熟的算法。统计方法难以处理字符型数据,需要有领域知识和统计知识,一般由具有统计经验的领域专家来完成。
3、归纳学习方法
归纳学习方法是从大量的经验数据中归纳制取一般的规则和模式,其大部分算法来源于机器学习领域,归纳学习的算法很多,如Michaski等的 AQ11,AQ15,洪家荣等的AE1,AE9,Hunt的CLS,Quinlan的ID3,C5.0等,其中最著名的是Quinlan提出的C5.0决策树算法。
4、聚类与分类方法
聚类和分类方法按一定的距离或相似性系统将数据分成一系列相互区分的组。常用的经典聚类方法有Kmean,Kmeriod,ISO DATA等。分类和聚类都是对目标进行空间划分,划分的标准是类内差别最小,类间差别最大。分类和聚类的区别在于分类事先知道类别数和种类的典型特征,而聚类则事先不知道。
5、探测性的数据分析方法
李德仁、邸凯昌等提出了探测性的数据分析(简称EDA)。EDA采用动态统计图形和动态链接窗口技术将数据及统计特征显示出来,可发现数据中非直观的数据特征及异常数据。 EDA与空间分析相结合,构成探测性空间分析(exploratory spatial analysis,简称ESA)。EDA和ESA技术在数据挖掘中用于选取与问题领域相关的数据子集,并可初步发现隐含在数据中的某些特征和规律。
6、粗集方法
粗集理论是波兰华沙大学Z.Pawlak教授在1982年提出的一种智能数据决策分析工具,被广泛研究并应用于不精确、不确定、不完全的信息的分类分析和知识获取。粗集理论为空间数据的属性分析和知识发现开辟了一条新途径,可用于GIS数据库属性表的一致性分析、属性的重要性、属性依赖、属性表简化、最小决策和分类算法生成等。粗集理论与其他知识发现算法相结合可以在GIS数据库中数据不确定的情况下获取多种知识。
7、空间特征和趋势探测方法
这是Ester等人在第4届KDD国际研讨会(1998)上提出的基于领域图(neighborhoodgraphs)和邻域路径 (neighborhoodpath)概念的挖掘算法。Ester等将一个空间特征定义为GIS数据库中具有空间/非空间性质的目标对象集,并以非空间属性值出现的相对频率和不同空间对象出现的相对频率(目标对象集相对于整个数据库)作为感兴趣的性质,从空间目标集合经过它的相邻扩展后的一个开始点出发,发现一个或多个非空间性质的变化规律。这种算法的效率在很大程度上取决于其处理相邻关系的能力。
8、数字地图图像分析和模式识别方法
GIS数据库(数据仓库)中含有大量的图形图像数据,一些图像分析和模式识别方法可直接用于挖掘数据和发现知识,或作为其他挖掘方法的预处理方法。用于图像分析和模式识别的方法主要有:决策树(desicion tree)方法、神经元网络(artificial neural net work)方法、数学形态学方法、图论方法。
9、可视化方法
可视化数据分析技术拓宽了传统的图表功能,使用户对数据的剖析更清楚。例如把数据库中的多维数据变成多种图形,这对提示数据的状况、内在本 质及规律性起到了很强的作用。当显示SDM发现的结果时,将地图同时显示作为背景。一方面能够显示其知识特征的分布规律;另一方面也可对挖掘出的结果进行 可视化解释,从而达到最佳的分析效果。可视化技术使用户看到数据处理的全过程、监测并控制数据分析过程。为了发现某类知识,常要综合运用这些方法。数据挖 掘方法还要与常规的数据库技术充分结合,数据挖掘利用的技术越多,得出的结果精确性就越高。
空间数据库中的知识
基于GIS与遥感应用,一般认为(Li D R. et al., 1994,1997; 邸凯昌等,1996,1997;Han J., 1996; Koperski K. et al, 1996), 可以从空间数据库中发现的知识有以下8种:
(1)普遍的几何知识(general geometric knowledge)
所谓普遍的几何知识,是指关于目标的数量、大小、形态特征等的普遍性知识,如点状目标的位置、大小等,线状目标的长度、大小和方向等,面状目标的周长、面积、几何中心等。可以通过计算或统计得出GIS中空间目标某种几何特征量的最小值、最大值、均值、方差、中数等,还可以统计出有关特征量的直方图等。
(2)空间分布规律(spatial distribution regularities)
空间分布规律是指目标在地理空间中垂直向、水平向以及垂直与水平联合的分布规律。垂 直分布是指空间目标沿地理调和的分布,如植被覆盖与生物多样性的海拔变化,作物生长的坡度变化等;水平分布是指地物沿地理区域的平面分布,如水稻亩产的区 域分异性,基础设施的城乡差异等;垂直与水平的联合分布是指目标的高程和区域方面的同时变化,如风土人情的流域差异性、气候特征的地理分异性等。
(3)空间关联规则(spatial association rules)
空间关联规则是指空间目标的相邻、相连、共生、包含等关系,如道路与河流的相连,国家与国家的相邻等。
(4)空间分类(聚类)规则(spatial classification/clustering rules)
空间分类规则是根据目标的空间或非空间特征进行类别划分的规则;而空间聚类规则是根据目标的聚散程度进行类别划分的规则,可用于GIS的空间概括和空间综合。空间分类和空间的共同之处是:都是对目标空间的再划分,划分的标准是类内差别最小而类间差别最大;不同之处是:分类是有导师的 (supervised)而聚类是无导师的,即分类是事先知道类别数和各类的典型特征,而聚类则事先不知道。
以遥感图像分析为例,一般性遥感图像处理是针对一幅图像或一个试验区的多幅图像进行处理和分析,找出某种结论性的东西;而遥感数据挖掘则强调对大量数据的处理、分析和对比,进而找出共性和特性,总结出规律和规则,而这些规律和规则在后续的图像分析中具有指导作用。
(5)空间特征规则(spatial characteristic rules)
空间特征规则是指某类或某几类空间目标的几何与属性的普遍特征,是对共性的描述。比如:“高速公路一般都比较直”、“高速公路一般6车道”是两条描述高速公路普遍特征的空间特征规则。普遍的几何知识属于空间特征规则的一类,将它分离出来单独作为一类知识是由于它在遥感影像解译中有十分重要的作用。
(6)空间区分规则(spatial discriminate rules)
空间区分规则特征是指两类或多类目标间几何或属性的不同特征,是对个性的描述。“高速公路一般比较直,高等级公路一般稍弯一些”、“高速公路一般6车道,高等级公路一般4车道”是两条描绘高速公路与高等级公路特征差别的区分规则。它不同于空间分类规则;分类规则是对空间目标进行明确分类,强调的是分类精度,为了保持分类精度,一般在较低的层次进行分类;而区分规则是对已知类别对象的对比,一般是比较高层次上的描述。
(7)空间演化规则(spatial evolution rules)
空间演化规则是指空间目标的几何、属性特征随时间而变化的规律。这一规律的发现必须基于时空数据库或同一区域的多个时相的数据。
(8)面向对象的知识(object oriented knowledge)
它是关于某类复杂对象的子类构成及其普遍特征的知识。比如对于一个小区对象,由住宅楼、服务楼、幼儿园、绿地、健身区等子类对象构成,相互之间的空间穿插和均衡布局等构成该小区的总体特征。
#################################################################################################
空间数据挖掘:变数据为知识
中国科学院计算技术研究所 刘毅勇 何雄 李金山 廖浩均 孟亮 邓柱中
空间数据挖掘是指从空间数据库中抽取没有清楚表现出来的隐含的知识和空间关系,并发现其中有用的特征和模式的理论、方法和技术。空间数据挖掘和知识发现的过程大致可分为以下多个步骤:数据准备、数据选择、数据预处理、数据缩减或者数据变换、确定数据挖掘目标、确定知识发现算法、数据挖掘、模式解释、知识评价等,而数据挖掘只是其中的一个关键步骤。但是为了简便,人们常常用空间数据挖掘来代替空间数据挖掘和知识发现。
常用的空间数据挖掘方法主要有:
1. 基于概率论的方法。
这是一种通过计算不确定性属性的概率来挖掘空间知识的方法,所发现的知识通常被表示成给定条件下某一假设为真的条件概率。在用误差矩阵描述遥感分类结果的不确定性时,可以用这种条件概率作为背景知识来表示不确定性的置信度。
2. 空间分析方法。
指采用综合属性数据分析、拓扑分析、缓冲区分析、密度分析、距离分析、叠置分析、网络分析、地形分析、趋势面分析、预测分析等在内 的分析模型和方法,用以发现目标在空间上的相连、相邻和共生等关联规则,或挖掘出目标之间的最短路径、最优路径等知识。目前常用的空间分析方法包括探测性 的数据分析、空间相邻关系挖掘算法、探测性空间分析方法、探测性归纳学习方法、图像分析方法等。
3. 统计分析方法。
指利用空间对象的有限信息和/或不确定性信息进行统计分析,进而评估、预测空间对象属性的特征、统计规律等知识的方法。它主要运用空间自协方差结构、变异函数或与其相关的自协变量或局部变量值的相似程度实现包含不确定性的空间数据挖掘。
4. 归纳学习方法。
即在一定的知识背景下,对数据进行概括和综合,在空间数据库(数据仓库)中搜索和挖掘一般的规则和模式的方法。归纳学习的算法很多,如由Quinlan提出的著名的C5.0决策树算法、Han Jiawei教授等提出的面向属性的归纳方法、裴健等人提出的基于空间属性的归纳方法等。
5. 空间关联规则挖掘方法。
即在空间数据库(数据仓库)中搜索和挖掘空间对象(及其属性)之间的关联关系的算法。最著名的关联规则挖掘算法是Agrawal提出的Apriori算法;此外还有程继华等提出的多层次关联规则的挖掘算法、许龙飞等提出的广义关联规则模型挖掘方法等。
6. 聚类分析方法。
即根据实体的特征对其进行聚类或分类,进而发现数据集的整个空间分布规律和典型模式的方法。常用的聚类方法有K-mean, K-medoids方法、Ester等提出的基于R—树的数据聚焦法及发现聚合亲近关系和公共特征的算法、周成虎等提出的基于信息熵的时空数据分割聚类模 型等。
7. 神经网络方法。
即通过大量神经元构成的网络来实现自适应非线性动态系统,并使其具有分布存储、联想记忆、大规模并行处理、自学习、自组织、自适应等功能的方法;在空间数据挖掘中可用来进行分类和聚类知识以及特征的挖掘。
8. 决策树方法。
即根据不同的特征,以树型结构表示分类或决策集合,进而产生规则和发现规律的方法。采用决策树方法进行空间数据挖掘的基本步骤如 下:首先利用训练空间实体集生成测试函数;其次根据不同取值建立决策树的分支,并在每个分支子集中重复建立下层结点和分支,形成决策树;然后对决策树进行 剪枝处理,把决策树转化为据以对新实体进行分类的规则。
9. 粗集理论。
一种由上近似集和下近似集来构成粗集,进而以此为基础来处理不精确、不确定和不完备信息的智能数据决策分析工具,较适于基于属性不确定性的空间数据挖掘。
10. 基于模糊集合论的方法。
这是一系列利用模糊集合理论描述带有不确定性的研究对象,对实际问题进行分析和处理的方法。基于模糊集合论的方法在遥感图像的模糊分类、GIS模糊查询、空间数据不确定性表达和处理等方面得到了广泛应用。
11. 空间特征和趋势探侧方法。
这是一种基于邻域图和邻域路径概念的空间数据挖掘算法,它通过不同类型属性或对象出现的相对频率的差异来提取空间规则。
12. 基于云理论的方法。
云理论是一种分析不确定信息的新理论,由云模型、不确定性推理和云变换三部分构成。基于云理论的空间数据挖掘方法把定性分析和定量计算结合起来,处理空间对象中融随机性和模糊性为一体的不确定性属性;可用于空间关联规则的挖掘、空间数据库的不确定性查询等。
13. 基于证据理论的方法。
证据理论是一种通过可信度函数(度量已有证据对假设支持的最低程度)和可能函数(衡量根据已有证据不能否定假设的最高程度)来处理不确定性信息的理论,可用于具有不确定属性的空间数据挖掘。
14. 遗传算法。
这是一种模拟生物进化过程的算法,可对问题的解空间进行高效并行的全局搜索,能在搜索过程中自动获取和积累有关搜索空间的知识,并 可通过自适应机制控制搜索过程以求得最优解。空间数据挖掘中的许多问题,如分类、聚类、预测等知识的获取,均可以用遗传算法来求解。这种方法曾被应用于遥 感影像数据中的特征发现。
15. 数据可视化方法。
这是一种通过可视化技术将空间数据显示出来,帮助人们利用视觉分析来寻找数据中的结构、特征、模式、趋势、异常现象或相关关系等空间知识的方法。为了确保这种方法行之有效,必须构建功能强大的可视化工具和辅助分析工具。
16. 计算几何方法。
这是一种利用计算机程序来计算平面点集的Voronoi图,进而发现空间知识的方法。利用Voronoi图可以解决空间拓扑关系、数据的多尺度表达、自动综合、空间聚类、空间目标的势力范围、公共设施的选址、确定最短路径等问题。
17. 空间在线数据挖掘。
这是一种基于网络的验证型空间来进行数据挖掘和分析的工具。它以多维视图为基础,强调执行效率和对用户命令的及时响应,一般以空间 数据仓库为直接数据源。这种方法通过数据分析与报表模块的查询和分析工具(如OLAP、决策分析、数据挖掘等)完成对信息和知识的提取,以满足决策的需 要。
由 C6H5NO2 » 2006年 11月 22日 18:04
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后可以点击下方按钮进入相应的模块。我们点击进入“Simple CLI”模块提供的命令行功能。在新窗口的最下方(上方是不能写字的)输入框写上
java weka.core.converters.CSVLoader filename.csv > filename.arff
即可完成转换。
在WEKA 3.5中提供了一个“Arff Viewer”模块,我们可以用它打开一个CSV文件将进行浏览,然后另存为ARFF文件。
进入“Exploer”模块,从上方的按钮中打开CSV文件然后另存为ARFF文件亦可。
“Exploer”界面
我们应该注意到,“Exploer”还提供了很多功能,实际上可以说这是WEKA使用最多的模块。现在我们先来熟悉它的界面,然后利用它对数据进行预处理。
f2.jpg (97.14 KiB) 被浏览 18389 次
图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上方的下拉框中选个不同的分类属性就可以了。下拉框里选上“No Class”或者一个数值属性会变成黑白的直方图。
区域8是状态栏,可以查看Log以判断是否有错。右边的weka鸟在动的话说明WEKA正在执行挖掘任务。右键点击状态栏还可以执行JAVA内存的垃圾回收。
预处理
bank-data数据各属性的含义如下:
id a unique identification number
age age of customer in years (numeric)
sex MALE / FEMALE
region inner_city/rural/suburban/town
income income of customer (numeric)
married is the customer married (YES/NO)
children number of children (numeric)
car does the customer own a car (YES/NO)
save_acct does the customer have a saving account (YES/NO)
current_acct does the customer have a current account (YES/NO)
mortgage does the customer have a mortgage (YES/NO)
pep did the customer buy a PEP (Personal Equity Plan) after the last mailing (YES/NO)
通常对于数据挖掘任务来说,ID这样的信息是无用的,我们将之删除。在区域5勾选属性“id”,并点击“Remove”。将新的数据集保存一次,并用UltraEdit打开这个ARFF文件。我们发现,在属性声明部分,WEKA已经为每个属性选好了合适的类型。
我们知道,有些算法,只能处理所有的属性都是分类型的情况。这时候我们就需要对数值型的属性进行离散化。在这个数据集中有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”。 点击这个文本框会弹出新窗口以修改离散化的参数。
我们不打算对所有的属性离散化,只是针对对第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。
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的规则。
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列出了它们关联程度的四项指标。
命令行方式
我们也可以利用命令行来完成挖掘任务,在“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
挖掘结果在上方显示,应是这个文件的样子。
5. 分类与回归
背景知识
WEKA把分类(Classification)和回归(Regression)都放在“Classify”选项卡中,这是有原因的。
在这两个任务中,都有一个目标属性(输出变量)。我们希望根据一个样本(WEKA中称作实例)的一组特征(输入变量),对目标进行预测。为了实现这一目的,我们需要有一个训练数据集,这个数据集中每个实例的输入和输出都是已知的。观察训练集中的实例,可以建立起预测的模型。有了这个模型,我们就可以新的输出未知的实例进行预测了。衡量模型的好坏就在于预测的准确程度。
在WEKA中,待预测的目标(输出)被称作Class属性,这应该是来自分类任务的“类”。一般的,若Class属性是分类型时我们的任务才叫分类,Class属性是数值型时我们的任务叫回归。
选择算法
这一节中,我们使用C4.5决策树算法对bank-data建立起分类模型。
我们来看原来的“bank-data.csv”文件。“ID”属性肯定是不需要的。由于C4.5算法可以处理数值型的属性,我们不用像前面用关联规则那样把每个变量都离散化成分类型。尽管如此,我们还是把“Children”属性转换成分类型的两个值“YES”和“NO”。另外,我们的训练集仅取原来数据集实例的一半;而从另外一半中抽出若干条作为待预测的实例,它们的“pep”属性都设为缺失值。经过了这些处理的训练集数据在这里下载;待预测集数据在这里下载。
我们用“Explorer”打开训练集“bank.arff”,观察一下它是不是按照前面的要求处理好了。切换到“Classify”选项卡,点击“Choose”按钮后可以看到很多分类或者回归的算法分门别类的列在一个树型框里。3.5版的WEKA中,树型框下方有一个“Filter...”按钮,点击可以根据数据集的特性过滤掉不合适的算法。我们数据集的输入属性中有“Binary”型(即只有两个类的分类型)和数值型的属性,而Class变量是“Binary”的;于是我们勾选“Binary attributes”“Numeric attributes”和“Binary class”。点“OK”后回到树形图,可以发现一些算法名称变红了,说明它们不能用。选择“trees”下的“J48”,这就是我们需要的C4.5算法,还好它没有变红。
点击“Choose”右边的文本框,弹出新窗口为该算法设置各种参数。点“More”查看参数说明,点“Capabilities”是查看算法适用范围。这里我们把参数保持默认。
现在来看左中的“Test Option”。我们没有专门设置检验数据集,为了保证生成的模型的准确性而不至于出现过拟合(overfitting)的现象,我们有必要采用10折交叉验证(10-fold cross validation)来选择和评估模型。若不明白交叉验证的含义可以Google一下。
建模结果
OK,选上“Cross-validation”并在“Folds”框填上“10”。点“Start”按钮开始让算法生成决策树模型。很快,用文本表示的一棵决策树,以及对这个决策树的误差分析等等结果出现在右边的“Classifier output”中。同时左下的“Results list”出现了一个项目显示刚才的时间和算法名称。如果换一个模型或者换个参数,重新“Start”一次,则“Results list”又会多出一项。
我们看到“J48”算法交叉验证的结果之一为
Correctly Classified Instances 206 68.6667 %
也就是说这个模型的准确度只有69%左右。也许我们需要对原属性进行处理,或者修改算法的参数来提高准确度。但这里我们不管它,继续用这个模型。
右键点击“Results list”刚才出现的那一项,弹出菜单中选择“Visualize tree”,新窗口里可以看到图形模式的决策树。建议把这个新窗口最大化,然后点右键,选“Fit to screen”,可以把这个树看清楚些。看完后截图或者关掉:P
这里我们解释一下“Confusion Matrix”的含义。
=== Confusion Matrix ===
a b <-- classified as
74 64 | a = YES
30 132 | b = NO
这个矩阵是说,原本“pep”是“YES”的实例,有74个被正确的预测为“YES”,有64个错误的预测成了“NO”;原本“pep”是“NO”的实例,有30个被错误的预测为“YES”,有132个正确的预测成了“NO”。74+64+30+132 = 300是实例总数,而(74+132)/300 = 0.68667正好是正确分类的实例所占比例。这个矩阵对角线上的数字越大,说明预测得越好。
模型应用
现在我们要用生成的模型对那些待预测的数据集进行预测了。注意待预测数据集和训练用数据集各个属性的设置必须是一致的。即使你没有待预测数据集的Class属性的值,你也要添加这个属性,可以将该属性在各实例上的值均设成缺失值。
在“Test Opion”中选择“Supplied test set”,并且“Set”成你要应用模型的数据集,这里是“bank-new.arff”文件。
现在,右键点击“Result list”中刚产生的那一项,选择“Re-evaluate model on current test set”。右边显示结果的区域中会增加一些内容,告诉你该模型应用在这个数据集上表现将如何。如果你的Class属性都是些缺失值,那这些内容是无意义的,我们关注的是模型在新数据集上的预测值。
现在点击右键菜单中的“Visualize classifier errors”,将弹出一个新窗口显示一些有关预测误差的散点图。点击这个新窗口中的“Save”按钮,保存一个Arff文件。打开这个文件可以看到在倒数第二个位置多了一个属性(predictedpep),这个属性上的值就是模型对每个实例的预测值。
使用命令行(推荐)
虽然使用图形界面查看结果和设置参数很方便,但是最直接最灵活的建模及应用的办法仍是使用命令行。
打开“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”说的是模型中的待预测属性的真实值存在第9个(也就是“pep”)属性中,这里它们全部未知因此全部用缺失值代替。“-l”后面是模型的完整路径。“-T”后面是待预测数据集的完整路径。
输入上述命令后,在“Simple CLI”上方会有这样一些结果:
0 YES 0.75 ?
1 NO 0.7272727272727273 ?
2 YES 0.95 ?
3 YES 0.8813559322033898 ?
4 NO 0.8421052631578947 ?
...
这里的第一列就是我们提到过的“Instance_number”,第二列就是刚才的“predictedpep”,第四列则是“bank-new.arff”中原来的“pep”值(这里都是“?”缺失值)。第三列对预测结果的置信度(confidence )。比如说对于实例0,我们有75%的把握说它的“pep”的值会是“YES”,对实例4我们有84.2%的把握说它的“pep”值会是“NO”。
我们看到,使用命令行至少有两个好处。一个是可以把模型保存下来,这样有新的待预测数据出现时,不用每次重新建模,直接应用保存好的模型即可。另一个是对预测结果给出了置信度,我们可以有选择的采纳预测结果,例如,只考虑那些置信度在85%以上的结果。
----整理自http://maya.cs.depaul.edu/~classes/ect584/WEKA/classify.html
6. 聚类分析
原理与实现
聚类分析中的“类”(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条实例。
用“Explorer”打开刚才得到的“bank.arff”,并切换到“Cluster”。点“Choose”按钮选择“SimpleKMeans”,这是WEKA中实现K均值的算法。点击旁边的文本框,修改“numClusters”为6,说明我们希望把这600条实例聚成6类,即K=6。下面的“seed”参数是要设置一个随机种子,依此产生一个随机数,用来得到K均值算法中第一次给出的K个簇中心的位置。我们不妨暂时让它就为10。
选中“Cluster Mode”的“Use training set”,点击“Start”按钮,观察右边“Clusterer output”给出的聚类结果。也可以在左下角“Result list”中这次产生的结果上点右键,“View in separate window”在新窗口中浏览结果。
结果解释
首先我们注意到结果中有这么一行:
Within cluster sum of squared errors: 1604.7416693522332
这是评价聚类好坏的标准,数值越小说明同一簇实例之间的距离越小。也许你得到的数值会不一样;实际上如果把“seed”参数改一下,得到的这个数值就可能会不一样。我们应该多尝试几个seed,并采纳这个数值最小的那个结果。例如我让“seed”取100,就得到
Within cluster sum of squared errors: 1555.6241507629218
我该取后面这个。当然再尝试几个seed,这个数值可能会更小。
接下来“Cluster centroids:”之后列出了各个簇中心的位置。对于数值型的属性,簇中心就是它的均值(Mean);分类型的就是它的众数(Mode), 也就是说这个属性上取值为众数值的实例最多。对于数值型的属性,还给出了它在各个簇里的标准差(Std Devs)。
最后的“Clustered Instances”是各个簇中实例的数目及百分比。
为了观察可视化的聚类结果,我们在左下方“Result list”列出的结果上右击,点“Visualize cluster assignments”。弹出的窗口给出了各实例的散点图。最上方的两个框是选择横坐标和纵坐标,第二行的“color”是散点图着色的依据,默认是根据不同的簇“Cluster”给实例标上不同的颜色。
可以在这里点“Save”把聚类结果保存成ARFF文件。在这个新的ARFF文件中,“instance_number”属性表示某实例的编号,“Cluster”属性表示聚类算法给出的该实例所在的簇。
---整理自 http://maya.cs.depaul.edu/~classes/ect584/WEKA/k-means.html