1、简介和回归简介什么是 数据挖掘 ?您会不时地问自己这个问题,因为这个主题越来越得到技术界的关注。您可能听说过像 Google 和 Yahoo! 这样的公司都在生成有关其所有用户的数十亿的数据点,您不禁疑惑,“它们要所有这些信息干什么?” 您可能还会惊奇地发现 Walmart 是最为先进的进行数据挖掘并将结果应用于业务的公司之一。现在世界上几乎所有的公司都在使用数据挖掘,并且目前尚未使用数据挖掘的公司在不久的将来就会发现自己处于极大的劣势。那么,您如何能让您和您的公司跟上数据挖掘的大潮呢?我们希望能够回答您所有关于数据挖掘的初级问题。我们也希望将一种免费的开源软件 Waikato Environ
2、ment for Knowledge Analysis (WEKA) 介绍给您,您可以使用该软件来挖掘数据并将您对您用户、客户和业务的认知转变为有用的信息以提高收入。您会发现要想出色地完成挖掘数据的任务并不像您想象地那么困难。此外,本文还会介绍数据挖掘的第一种技术: 回归 ,意思是根据现有的数据预测未来数据的值。 它可能是挖掘数据最为简单的一种方式,您甚至以前曾经用您喜爱的某个流行的电子数据表软件进行过这种初级的数据挖掘(虽然 WEKA 可以做更为复杂的计算)。本系列后续的文章将会涉及挖掘数据的其他方法,包括群集、最近的邻居以及分类树。(如果您还不太知道这些术语是何意思,没关系。我们将在这个系
3、列一一介绍。)回页首什么是数据挖掘?数据挖掘,就其核心而言,是指将大量数据转变为有实际意义的模式和规则。并且,它还可以分为两种类型:直接的和间接的。在 直接的 数据挖掘中,您会尝试预测一个特定的数据点 比如,以给定的一个房子的售价来预测邻近地区内的其他房子的售价。在 间接的 数据挖掘中,您会尝试创建数据组或找到现有数据内的模式 比如,创建 “中产阶级妇女”的人群。实际上,每次的美国人口统计都是在进行数据挖掘,政府想要收集每个国民的数据并将它转变为有用信息。现代的数据挖掘开始于 20 世纪 90 年代,那时候计算的强大以及计算和存储的成本均到达了一种很高的程度,各公司开始可以自己进行计算和存储,
4、而无需再借助外界的计算帮助。此外,术语数据挖掘是全方位的,可指代诸多查看和转换数据的技术和过程。因为本系列只触及能用数据挖掘实现的功能的一些皮毛。数据挖掘的专家往往是数据统计方面的博士,并在此领域有 10-30 年的研究经验。这会为您留下一种印象,即只有大公司才能负担得起数据挖掘。我们希望能够清除有关数据挖掘的这些误解并希望弄清楚一点:数据挖掘既不像对一系列数据运行一个电子数据表函数那么简单,也不像有人想的那样难到靠自己根本无法实现。这是 80/20 范型的一个很好的例子 甚至更进一步可以是 90/10 范型。您用所谓的数据挖掘专家的 10% 的专业知识就能创建具有 90% 效力的数据挖掘模型
5、。而为了补上模型剩下的 10% 的效力并创建一个完美的模型将需要 90% 额外的时间,甚至长达 20 年。所以除非您立志以数据挖掘为职业方向,否则“足够好”就可以了。从另一个方面看,利用数据挖掘所达到的“足够好”总要比您现在所采用的其他技术要好。数据挖掘的最终目标就是要创建一个模型,这个模型可改进您解读现有数据和将来数据的方式。由于现在已经有很多数据挖掘技术,因此创建一个好的模型的最主要的步骤是决定要使用哪种技术。而这则极大地依赖于实践和经验以及有效的指导。这之后,需要对模型进行优化以让它更令人满意。在阅读了本系列的文章后 ,您应该能够自己根据自己的数据集正确决定要使用的技术,然后采取必要的步
6、骤对它进行优化。您将能够为您自己的数据创建一个足够好的模型 。回页首WEKA数据挖掘绝非大公司的专有,也不是多昂贵的软件。实际上,有一种软件可以实现那些价格不菲的软件所能实现的全部功能 这个软件就是 WEKA(参见 参考资料)。WEKA 诞生于 University of Waikato(新西兰)并在 1997 年首次以其现代的格式实现。它使用了 GNU General Public License (GPL)。该软件以 Java 语言编写并包含了一个 GUI 来与数据文件交互并生成可视结果(比如表和曲线)。它还有一个通用 API,所以您可以像嵌入其他的库一样将 WEKA 嵌入到您自己的应用程
7、序以完成诸如服务器端自动数据挖掘这样的任务。我们继续并安装 WEKA。因为它基于 Java,所以如果您在计算机上没有安装 JRE,那么请下载一个包含 JRE 的 WEKA 版本。图 1. WEKA 的开始屏在启动 WEKA 时,会弹出 GUI 选择器,让您选择使用 WEKA 和数据的四种方式。对于本文章系列中的例子,我们只选择了 Explorer 选项。对于我们要在这些系列文章中所需实现的功能,这已经足够。图 2. WEKA Explorer在熟悉了如何安装和启动 WEKA 后,让我们来看看我们的第一个数据挖掘技术:回归。回页首回归回归是最为简单易用的一种技术,但可能也是最不强大(这二者总是相
8、伴而来,很有趣吧)。此模型可以简单到只有一个输入变量和一个输出变量(在 Excel 中称为 Scatter 图形,或 OpenOffice.org 内的 XYDiagram)。当然,也可以远比此复杂,可以包括很多输入变量。实际上,所有回归模型均符合同一个通用模式。多个自变量综合在一起可以生成一个结果 一个因变量。然后用回归模型根据给定的这些自变量的值预测一个未知的因变量的结果。每个人都可能使用过或看到过回归模型,甚至曾在头脑里创建过一个回归模型。人们能立即想到的一个例子就是给房子定价。房子的价格(因变量)是很多自变量 房子的面积、占地的大小、厨房是否有花岗石以及卫生间是否刚重装过等的结果。所以
9、,不管是购买过一个房子还是销售过一个房子,您都可能会创建一个回归模型来为房子定价。这个模型建立在邻近地区内的其他有可比性的房子的售价的基础上(模型),然后再把您自己房子的值放入此模型来产生一个预期价格。让我们继续以这个房屋定价的回归模型为例,创建一些真实的数据。在我的邻近地区有一些房子出售,我试图找到我自己房子的合理价格。我还需要拿此模型的输出申报财产税。表 1. 回归模型的房屋值房子面积(平方英尺) 占地的大小 卧室 花岗岩 卫生间重装? 销售价格3529 9191 6 0 0 $205,0003247 10061 5 1 1 $224,9004032 10150 5 0 1 $197,90
10、02397 14156 4 1 0 $189,9002200 9600 4 0 1 $195,0003536 19994 6 1 1 $325,0002983 9365 5 0 1 $230,0003198 9669 5 1 1 ?好的消息是(也可能是坏消息,取决于您自己的看法)上述对回归模型的简单介绍只触及了一些皮毛,这种触及甚至都不会被真正地注意到。关于回归模型有大学的课程可以选择,那会教授给您有关回归模型的更多信息,甚至多过您想要知道的。但我们的简介让您充分熟悉了这个概念,已足够应付本文中 WEKA 试用。如果对回归模型以及其中的数据统计的细节有更深的兴趣,您可以用自己喜爱的搜索引擎搜索
11、如下的术语:least squares、homoscedasticity、normal distribution、White tests、Lilliefors tests、R-squared 和 p-values。回页首为 WEKA 构建数据集为了将数据加载到 WEKA,我们必须将数据放入一个我们能够理解的格式。WEKA 建议的加载数据的格式是 Attribute-Relation File Format (ARFF),您可以在其中定义所加载数据的类型,然后再提供数据本身。在这个文件内,我们定义了每列以及每列所含内容。对于回归模型,只能有NUMERIC 或 DATE 列。最后,以逗号分割的格式
12、提供每行数据。我们为 WEKA 使用的 ARFF 文件如下所示。请注意在数据行内,并未包含我的房子。因为我们在创建模型,我房子的价格还不知道,所以我们还不能输入我的房子。清单 1. WEKA 文件格式RELATION houseATTRIBUTE houseSize NUMERICATTRIBUTE lotSize NUMERICATTRIBUTE bedrooms NUMERICATTRIBUTE granite NUMERICATTRIBUTE bathroom NUMERICATTRIBUTE sellingPrice NUMERICDATA3529,9191,6,0,0,205000
13、3247,10061,5,1,1,224900 4032,10150,5,0,1,197900 2397,14156,4,1,0,189900 2200,9600,4,0,1,195000 3536,19994,6,1,1,325000 2983,9365,5,0,1,230000回页首将数据载入 WEKA数据创建完成后,就可以开始创建我们的回归模型了。启动 WEKA,然后选择 Explorer。将会出现 Explorer 屏幕,其中 Preprocess 选项卡被选中。选择 Open File 按钮并选择在上一节中创建的 ARFF 文件。在选择了文件后,WEKA Explorer 应该类似于
14、图 3 中所示的这个屏幕快照。图 3. 房屋数据加载后的 WEKA在这个视图中,WEKA 允许您查阅正在处理的数据。在 Explorer 窗口的左边,给出了您数据的所有列(Attributes)以及所提供的数据行的数量(Instances)。若选择一列,Explorer 窗口的右侧就会显示数据集内该列数据的信息。比如,通过选择左侧的 houseSize 列(它应该默认选中),屏幕右侧就会变成显示有关该列的统计信息。它显示了数据集内此列的最大值为 4,032 平方英尺,最小值为 2,200 平方英尺。平均大小为 3,131 平方英尺,标准偏差为 655 平方英尺(标准偏差是一个描述差异的统计量度
15、)。此外,还有一种可视的手段来查看数据,单击 Visualize All 按钮即可。由于在这个数据集内的行数有限,因此可视化的功能显得没有有更多数据点(比如,有数百个)时那么功能强大。好了,对数据的介绍已经够多了。让我们立即创建一个模型来获得我房子的价格。回页首用 WEKA 创建一个回归模型为了创建这个模型,单击 Classify 选项卡。第一个步骤是选择我们想要创建的这个模型,以便 WEKA 知道该如何处理数据以及如何创建一个适当的模型:1. 单击 Choose 按钮,然后扩展 functions 分支。2. 选择 LinearRegression 叶。这会告诉 WEKA 我们想要构建一个回
16、归模型。除此之外,还有很多其他的选择,这说明可以创建的的模型有很多。非常多!这也从另一个方面说明本文只介绍了这个主题的皮毛。有一点值得注意。在同一个分支还有另外一个选项,称为 SimpleLinearRegression 。请不要选择该选项,因为简单回归只能有一个变量,而我们有六个变量。选择了正确的模型后,WEKA Explorer 应该类似于图 4。图 4. WEKA 内的线性回归模型我能用电子数据表达到同样的目的么?简单而言:不可以。深思熟虑后的答案是:可以。大多数流行的电子数据表程序都不能轻松完成我们用 WEKA 实现的功能,即定义一个具有多个自变量的线性模型。不过,您 十分容易地实现一
17、个 Simple Linear Regression 模型(具有一个自变量)。如果您有足够的勇气,甚至可以进行一个多变量的回归,但是这将非常困难,绝对不如用 WEKA 来得简单。 本文的 参考资料 部分有一个 Microsoft Excel 的示例视频。现在,选择了想要的模型后,我们必须告诉 WEKA 它创建这个模型应该使用的数据在哪里。虽然很显然我们想要使用在 ARFF 文件内提供的那些数据,但实际上有不同的选项可供选择,有些甚至远比我们将要使用的选项高级。其他的三个选择是:Supplied test set 允许提供一个不同的数据集来构建模型; Cross-validation 让 WEK
18、A 基于所提供的数据的子集构建一个模型,然后求出它们的平均值来创建最终的模型;Percentage split WEKA 取所提供数据的百分之一来构建一个最终的模型。这些不同的选择对于不同的模型非常有用,我们在本系列后续文章中会看到这一点。对于回归,我们可以简单地选择 Use training set。这会告诉 WEKA 为了构建我们想要的模型,可以使用我们在 ARFF 文件中提供的那些数据。创建模型的最后一个步骤是选择因变量(即我们想要预测的列)。在本例中指的就是房屋的销售价格,因为那正是我们想要的。在这些测试选项的正下方,有一个组合框,可用它来选择这个因变量。列 sellingPrice
19、应该默认选中。如果没有,请选择它。我们准备好创建模型后,单击 Start。图 5 显示了输出结果。图 5. WEKA 内的房屋价格回归模型回页首解析这个回归模型WEKA 可不马虎。它会把这个回归模型径直放在输出,如清单 2 所示。清单 2. 回归输出sellingPrice = (-26.6882 * houseSize) + (7.0551 * lotSize) + (43166.0767 * bedrooms) +(42292.0901 * bathroom) - 21661.1208清单 3 显示了结果,其中已经插入了我房子的价格。清单 3. 使用回归模型的房屋价格sellingPric
20、e = (-26.6882 * 3198) + (7.0551 * 9669) + (43166.0767 * 5) + (42292.0901 * 1) - 21661.1208sellingPrice = 219,328不过,回过头来看看本文的开头部分,我们知道数据挖掘绝不是仅仅是为了输出一个数值:它关乎的是识别模式和规则。它不是严格用来生成一个绝对的数值,而是要创建一个模型来让您探测模式、预测输出并根据这些数据得出结论。让我们更进一步来解读一下我们的模型除了房屋价格之外告诉我们的模式和结论: 花岗石无关紧要 WEKA 将只使用在统计上对模型的正确性有贡献的那些列(以 R-squared
21、量度,但这超出了本文的范围)。它将会抛弃并忽视对创建好的模型没有任何帮助的那些列。所以这个回归模型告诉我们厨房里的花岗石并不会影响房子的价值。 卫生间是有关系的 因我们为卫生间使用了简单的 0 或 1 值,所以我们可以使用来自回归模型的这个系数来决定卫生间的这个值对房屋价值的影响。这个模型告诉我们它使房子的价值增加了 $42,292。 较大的房子价格反而低 WEKA 告诉我们房子越大,销售价格越低?这可以从houseSize 变量前面负的系数看出来。此模型告诉我们房子每多出一平方英尺都会使房价减少 $26?这根本没有意义。这是在美国!当然是房子越大越好,特别是在我所在的得克萨斯州。那么我们怎么
22、才能解释这一点呢?这是无用数据入、无用数据出的一个很好的例子。房子的大小并不是一个自变量,它还与卧室变量相关,因为房子大通常卧室也多。所以我们的模型并不完美。但是我们可以修复这个问题。还记得么:在 Preprocess 选项卡,可以从数据集中删除列。对于本例,我们删除 houseSize 列并创建另一个模型。那么它会如何影响房子的价格呢?这个新模型又如何更有实际意义?(修改后的我的房子价格是: $217,894)。对统计学家的一个提示这个模型打破了一个常规线性回归模型的几个要求,因为每个列并不是完全独立的,并且这里也没有足够的数据行来生成一个有效的模型。由于本文主要的目的是介绍 WEKA 这个
23、数据挖掘工具,因此我们极大地简化了示例数据。要想把这个简单的示例提升到一个新的级别,让我们来看一下 WEKA Web 站点上作为回归示例提供给我们的一个数据文件。理论上讲,这要比我们七个房子的简单示例要复杂得多。这个示例数据文件的作用是创建一个能基于汽车的几个特性来推测其油耗(每加仑英里数,MPG)的回归模型(请务必记住,数据取自 1970 至 1982 年)。这个模型包括汽车的如下属性:汽缸、排量、马力、重量、加速度、年份、产地及制造商。此外,这个数据集有 398 行数据,这些数据足以满足我们的多种统计需求,而这在我们的房价模型中是不能实现的。理论上讲,这是一个极为复杂的回归模型,WEKA
24、可能需要大量时间才能创建一个具有如此多数据的模型(但我估计您已预见到了 WEKA 能够很好地处理这些数据)。要用这个数据集生成一个回归模型,我们需要严格地按照处理房子数据的步骤来处理这些数据,所以这里我不再赘述。继续并创建这个回归模型。它将生成如清单 4 所示的输出。清单 4. MPG 数据回归模型class (aka MPG) =-2.2744 * cylinders=6,3,5,4 +-4.4421 * cylinders=3,5,4 +6.74 * cylinders=5,4 +0.012 * displacement +-0.0359 * horsepower +-0.0056 * w
25、eight +1.6184 * model=75,71,76,74,77,78,79,81,82,80 +1.8307 * model=77,78,79,81,82,80 +1.8958 * model=79,81,82,80 +1.7754 * model=81,82,80 +1.167 * model=82,80 +1.2522 * model=80 +2.1363 * origin=2,3 +37.9165在您自已生成这个模型时,您会看到 WEKA 只用了不到一秒的时间就处理好了这个模型。所以,即使要处理的是具有大量数据的功能强大的回归模型,就计算而言,也不是什么问题。这个模型看上去应该
26、比房子数据复杂得多,但事实并非如此。例如,这个回归模型的首行,-2.2744 * cylinders=6,3,5,4 表示,如果汽车有 6 个缸,就会在此列中放上一个 1,如果汽车有 8 个缸,就会放上一个 0。让我们从这个数据集中取一个示例行(第 10 行)并将这些数值放入回归模型,看看我们这个模型的输出是否与数据集中提供给我们的输出相似。清单 5. 示例 MPG 数据data = 8,390,190,3850,8.5,70,1,15class (aka MPG) =-2.2744 * 0 +-4.4421 * 0 +6.74 * 0 +0.012 * 390 +-0.0359 * 190
27、+-0.0056 * 3850 +1.6184 * 0 +1.8307 * 0 +1.8958 * 0 +1.7754 * 0 +1.167 * 0 +1.2522 * 0 +2.1363 * 0 +37.9165Expected Value = 15 mpgRegression Model Output = 14.2 mpg因此,当我们用随机选择的测试数据对此模型进行测试时,此模型的表现非常出色,对于一辆实际值为 15 MPG 的车,我们的预测值是 14.2 MPG。回页首结束语本文通过向您介绍数据挖掘这个主题的背景以及这个领域的目标力求回答“什么是数据挖掘” 这个问题。数据挖掘就是通过创建
28、模型和规则来将大量的不可用信息(通常是分散的数据形式)变成有用的信息。您的目标是使用模型和规则来预测将来的行为,从而改进您的业务,或是解释一些您用其他方法不能解释的事情。这些模型可以帮助您确认您已经有了的某些想法,甚至可能会让您发现数据中您以前不曾意识到的新东西。这里有个有趣的数据挖掘的例子(不知道还存在多少类似的事例),在美国,Walmart 会在周末时把啤酒移到尿布货架的未端,这是因为 Walmart 的数据挖掘结果显示男士通常会在周末购买尿布,而他们同时也喜欢在周末喝啤酒。本文还向您介绍了一种免费的开源软件程序 WEKA。当然,市场上还有很多更为复杂的数据挖掘商业软件产品,但对于刚开始进
29、行数据挖掘的人来说,这种开源的解决方案非常有益。请记住,您永远不可能成为数据挖掘方面的专家,除非您打算用 20 年的时间来研究它。WEKA 可以让您步入数据挖掘的大门,同时也能为您遇到的初级问题提供完美的解决方案。如果您以前对数据挖掘接触不多,那么这个非常好的解决方案将能满足您的全部所需。最后,本文探讨了第一个数据挖掘模型:回归模型(特别是线性回归多变量模型),另外还展示了如何在 WEKA 中使用它。这个回归模型很容易使用,并且可以用于很多数据集。您会发现这个模型是我在本系列文章中所讨论的所有模型中最有用的一个。然而,数据挖掘不仅局限于简单的回归,在不同的数据集及不同的输出要求的情况下,您会发
30、现其他的模型也许是更好的解决方案。最后,我再重申一下,本文及本系列的后续文章只是对数据统计和数据挖掘领域做了最简单的介绍。花上整整一学期的时间去学习数据统计和数据挖掘的人也只能被称为“初学者” 。 我们的目的就是让初学者充分领略这个可用的开源工具的妙处并提高对数据挖掘所能提供的价值的了解和重视。分类和群集简介在 用 WEKA 进行数据挖掘,第 1 部分:简介和回归,我介绍了数据挖掘的概念以及免费的开源软件 Waikato Environment for Knowledge Analysis(WEKA),利用它可以挖掘数据来获得趋势和模式。我还谈到了第一种数据挖掘的方法 回归 使用它可以根据一组
31、给定的输入值预测数字值。这种分析方法非常容易进行,而且也是功能最不强大的一种数据挖掘方法,但是通过它,读者对 WEKA 有了很好的了解,并且它还提供了一个很好的例子,展示了原始数据是如何转换为有意义的信息的。在本文中,我将带您亲历另外两种数据挖掘的方法,这二者要比回归模型稍微复杂一些,但功能则更为强大。如果回归模型只能为特定输入提供一个数值输出,那么这两种模型则允许您对数据做不同的解析。正如我在第 1 部分中所说的,数据挖掘的核心就是将正确的模型应用于数据。即便有了有关客户的最佳数据(无论这意味着什么),但是如果没有将正确的模型应用于数据,那么这些数据也没有任何意义。不妨从另一个角度考虑这件事
32、情:如果您只使用能生成数值输出的回归模型,那么 Amazon 如何能告知您“ 购买了 X 产品的客户还购买了 Y 产品”?这里没有数值型的函数能够告诉您这类信息。所以让我们来深入研究可用在数据中的其他两个模型。在本文中,我会反复提及称为“最近邻” 的数据挖掘方法,但我不会过多地对其进行剖析,详细的介绍会在第 3 部分给出。不过,我在本文中的比较和描述部分将它包括进来以使讨论更为完整。回页首分类 vs. 群集 vs. 最近邻在我深入探讨每种方法的细节并通过 WEKA 使用它们之前,我想我们应该先理解每个模型 每个模型适合哪种类型的数据以及每个模型试图实现的目标。我们还会将我们已有的模型 回归模型
33、 也包括在我们的讨论之中,以便您可以看到这三种新模型与我们已经了解的这个模型的对比。我将通过实际的例子展示每个模型的使用以及各自的不同点。这些实际的例子均围绕着一个本地的 BMW 经销店展开,研究它如何能增加销售。这个经销店已经保存了所有其过去的销售信息及有关购买过 BMW、留意过 BMW 或是来过 BMW 展厅的每个客户的信息。这个经销店想要增加未来的销售并部署了数据挖掘来实现此目标。回归问题:“对于新的 BMW M5 车型我们该如何定价?” 回归模型只能给出这个问题的一个数值答案。回归模型会使用 BMW 和 M5 的过去销售数据来基于所售汽车的属性和卖点确定人们过去在这个经销店购买车的价格
34、。然后,回归模型允许 BMW 经销店插入新车的属性来确定其价格。比如:Selling Price = $25,000 + ($2900 * Liters in Engine) + ($9000 * isSedan) + ($11,000 * isConvertible) + ($100 * inches of car) + ($22,000 * isM)。分类问题:“那么客户 X 有多大的可能会购买最新的 BMW M5 呢?” 创建一个分类树(一个决策树),并借此挖掘数据就可以确定这个人购买一辆新的 M5 的可能性有多大。这个树上的节点可以是年龄、收入水平、目前拥有的车的数量、婚姻状况、有无孩
35、子、房主还是租户。对这个决策树使用此人的这些属性就可以确定他购买 M5 的可能性。群集问题是:“哪个年龄组最喜欢银色的 BMW M5?” 这就需要挖掘数据来对比过去购车者的年龄和过去购买的车的颜色。从这些数据,就能够找到某个年龄组(比如 22-30 岁)具有订购某种颜色的 BMW M5 的更高的倾向性(75% 购买蓝色)。同样地,它也可显示另一个不同的年龄组(比如 55-62)则更倾向于订购银色的 BMW(65 % 购买银色,20 % 购买灰色)。这些数据,当挖掘后,倾向于集中于某些特定年龄组和特定颜色周围,方便用户快速判断该数据内的模式。最近邻问题:“当人们购买 BMW M5 时,他们倾向于
36、同时购买其他哪些选项? ”数据挖掘显示,人们入店并购买一辆 BMW M5 时,他们还会倾向于购买与之配套的行李箱。(这也就是所谓的购物篮分析)。 使用此数据,汽车经销店就会将配套行李箱的促销广告放在店面的显眼处,甚至会在报纸上做促销广告,如果他们购买 M5,配套行李箱将免费/ 打折,以期增加销售。回页首分类分类 (也即分类树或决策树) 是一种数据挖掘算法,为如何确定一个新的数据实例的输出创建逐步指导。它所创建的这个树上的每个节点都代表一个位置,在这个位置必须基于输入做出决策,并且会从一个节点移到下一个节点直至到达能够得出预测的输出的叶子节点。这虽然听起来有些让人迷惑,但其实它非常直观。让我们看
37、一个例子。清单 1. 简单的分类树 Will You Read This Section? / Yes No/ Will You Understand It? Wont Learn It/ Yes No/ Will Learn It Wont Learn It这个简单的分类树试图回答这个问题:“您理解分类树么?” 在每个节点,您都会回答这个问题并继续沿着分支下移,直到您到达一个回答了是或不是的叶子节点。 这个模型可用于任何未知的数据实例,来预测这个未知数据实例是否通过只询问两个简单问题就能理解分类树。这看上去像是分类树的一大优势 它无需有关数据的大量信息就能创建一个十分准确且信息丰富的树。分类
38、树的一个重要概念非常类似于我们在 用 WEKA 进行数据挖掘,第 1 部分:简介和回归 回归模型中看到的概念:使用一个“训练集” 来生成模型。就是拿一组输出值已知的数据集并使用此数据集来创建我们的模型。之后,只要我们有一个输出值未知的新的数据点,我们都可以将其放入这个模型并生成预期的输出。这与我们在回归模型中看到的没有差别。只不过,这个模型更进了一步,通常会把整个训练集分成两个部分:拿数据的约 60-80 % 放入我们的训练集,用来生成模型;然后拿剩下的数据放入一个测试集,在模型生成后,立即用其来测试我们模型的准确性。那么这个额外的步骤为什么在此模型中如此重要呢?这个问题就是所谓的 过拟合 :
39、如果我们提供 过多 数据用于模型创建,我们的模型虽然会被完美创建,但只针对的是该数据。请记住:我们想使用此模型来预测未来的未知数;我们不是想使用此模型来准确地预测我们已经知道的值。这就是为什么我们要创建一个测试集。在创建了模型后,我们要进行检查以确保我们所创建模型的准确性不会在测试集降低。这就保证了我们的模型会准确地预测出未来的未知值。使用 WEKA 会看到它的实际效果。这还引出了分类树的另一个重要概念:修剪。 修剪 正如其名字所指,意思是删减分类树的枝条。那么为什么有人会想要将信息从分类树中删除呢?还是因为过拟合的缘故。随着数据集的增大以及属性数量的增长,我们所创建的树就会越来越复杂。理论上
40、讲,一个树可以具有 leaves = (rows * attributes)。但那又有何益处呢?就预测未来的未知数而言,它根本帮不到我们,因它只适于我们现有的训练数据。因此我们需要的是一种平衡。我们想要我们的树尽量简单,节点和枝叶尽量少。同时我们还想要它尽量地准确。这就需要进行权衡,我们不久就会看到。在使用 WEKA 前,有关分类我还想指出最后一点,那就是假正和假负。假正指的是这样的一个数据实例:我们创建的这个模型预测它应该是正的,但事实相反,实际值却是负的。同样地,假负指的是这样一个数据实例:我们创建的这个模型预测它应该是负的,但事实相反,实际值却是正的。这些错误表明在我们的模型中出了问题,
41、我们的模型正在错误地分类某些数据。虽然可能会出现不正确的分类,但可接受的错误百分比由模型创建者决定。比如,如果是在医院里测试心脏监视器,很显然,将需要极低的错误百分比。而如果您只是在有关数据挖掘的文章中挖掘一些虚构的数据,那么错误率可以更高一些。为了使之更进一步,还需要决定可以接受的假负与假正的百分比率是多少。我立即想到的一个例子就是垃圾邮件模型:一个假正(一个真邮件被标记为了垃圾邮件)要比假负(一个垃圾消息未被标记为垃圾邮件)更具破坏性。在像这样的例子中,就可以判断假负:假正的比率最低为 100:1 才是可以接受的。好了,对于分类树的背景和技术方面的介绍已经够多了。让我们现在开始获得一些真正
42、的数据并将其带入 WEKA。WEKA 数据集我们用于分类示例的数据集所围绕的仍然是我们虚构的 BMW 经销店。这个经销店正在启动一个推销计划,试图向其老客户推销两年延保。这个经销店过去曾做过类似的计划并从过去的销售中收集了 4,500 个数据点。数据集中的属性有: 收入水平 0=$0-$30k, 1=$31k-$40k, 2=$41k-$60k, 3=$61k-$75k, 4=$76k-$100k, 5=$101k-$150k, 6=$151k-$500k, 7=$501k+ 第一辆 BMW 购买的年/月 最近的 BMW 购买的年/月 是否过去曾响应过延保计划让我们来看看在这个例子中使用的 A
43、ttribute-Relation File Format (ARFF)。清单 2. 分类 WEKA 数据attribute IncomeBracket 0,1,2,3,4,5,6,7attribute FirstPurchase numericattribute LastPurchase numericattribute responded 1,0data4,200210,200601,05,200301,200601,1.在 WEKA 内进行分类使用我们之前使用过的相同步骤来将数据文件 bmw-training.arff (参见 下载) 载入 WEKA。请注意:这个文件只包含经销店记录内的
44、这 4,500 个记录中的 3,000 个。我们需要分割我们的记录以便某些数据实例被用来创建模型,某些被用来测试模型以确保没有过拟合。在加载了数据后,屏幕应该类似于图 1。图 1. WEKA 内的 BMW 分类数据与我们在 用 WEKA 进行数据挖掘,第 1 部分:简介和回归 中对回归模型所做的类似,我们选择Classify 选项卡,然后选择 trees 节点,然后是 J48 叶子(我不知道为何这就是正式的名称,不过还是接受吧)。图 2. BMW 分类算法至此,我们已经准备好可以在 WEKA 内创建我们的模型了。请确保 Use training set 被选中以便我们使用刚刚加载的这个数据集来
45、创建模型。单击 Start 并让 WEKA 运行。模型的输出应类似于清单 3 内的结果。清单 3. WEKA 的分类模型的输出Number of Leaves : 28Size of the tree : 43Time taken to build model: 0.18 seconds= Evaluation on training set = Summary =Correctly Classified Instances 1774 59.1333 %Incorrectly Classified Instances 1226 40.8667 %Kappa statistic 0.1807Me
46、an absolute error 0.4773Root mean squared error 0.4885Relative absolute error 95.4768 %Root relative squared error 97.7122 %Total Number of Instances 3000 = Detailed Accuracy By Class =TP Rate FP Rate Precision Recall F-Measure ROC Area Class0.662 0.481 0.587 0.662 0.622 0.616 10.519 0.338 0.597 0.5
47、19 0.555 0.616 0Weighted Avg. 0.591 0.411 0.592 0.591 0.589 0.616= Confusion Matrix =a b - classified as1009 516 | a = 1710 765 | b = 0上述这些数字是什么意思?我们怎么才能知道这是一个好的模型?我们应该寻找的这个所谓的“树”在哪里?这些问题问得很好。让我们逐一回答: 这些数字是什么意思? 这里应该关注的重要数字是 “Correctly Classified Instances”(59.1 %)与“Incorrectly Classified Instances”
48、(40.9 %)旁边的这些数字。其他的重要数字还有“ROC Area”列第一行的这个数字(0.616);我稍候会详细解释这个数字,目前只需记住即可。最后,在“Confusion Matrix”中,显示了假正和假负的数量。在这个矩阵中,假正为 516,假负为 710。 我们怎么才能知道这是一个好的模型? 由于准确率仅为 59.1 %,我不得不承认经初步分析后,这不是一个非常好的模型。 这个所谓的“树”在哪里? 要看到这个树,可右键单击刚刚创建的这个模型。在弹出菜单中,选择 Visualize tree。之后,就会看到我们所创建的这个分类树,虽然在本例中,可视树不能提供任何帮助。我们的树如图 3
49、所示。看到这个树的另一种方式是在 Classifier Output 内往高处看,其中的文本输出显示了具有节点和叶子的整个树。图 3. 分类树可视化还有最后一个步骤,就是验证我们的分类树,这需要贯穿模型运行我们的测试集并确保我们模型的准确性在测试集时与在训练集时相差不远。为此,在 Test options 内,选择 Supplied test set 单选按钮并单击 Set。选择文件 bmw-test.arff,内含 1,500 条记录,而这些记录在我们用来创建模型的训练集中是没有的。当我们这次单击 Start 时,WEKA 将会贯穿我们已经创建的这个模型运行测试数据集并会让我们知道模型的情况。让我们现在单击 Start。如下是输出。图 4. 分类树测试对比这个测试集的“Correctl