用 WEKA 进行数据挖掘——第二章: 回归

回归

回归是最为简单易用的一种技术,但可能也是最不强大(这二者总是相伴而来,很有趣吧)。此模型可以简单到只有一个输入变量和一个输出变量(在 Excel 中称为 Scatter 图形,或 OpenOffice.org 内的 XYDiagram)。当然,也可以远比此复杂,可以包括很多输入变量。实际上,所有回归模型均符合同一个通用模式。多个自变量综合在一起可以生成一个结果 — 一个因变量。然后用回归模型根据给定的这些自变量的值预测一个未知的因变量的结果。

每个人都可能使用过或看到过回归模型,甚至曾在头脑里创建过一个回归模型。人们能立即想到的一个例子就是给房子定价。房子的价格(因变量)是很多自变量 — 房子的面积、占地的大小、厨房是否有花岗石以及卫生间是否刚重装过等的结果。所以,不管是购买过一个房子还是销售过一个房子,您都可能会创建一个回归模型来为房子定价。这个模型建立在邻近地区内的其他有可比性的房子的售价的基础上(模型),然后再把您自己房子的值放入此模型来产生一个预期价格。

让我们继续以这个房屋定价的回归模型为例,创建一些真实的数据。在我的邻近地区有一些房子出售,我试图找到我自己房子的合理价格。我还需要拿此模型的输出申报财产税。

表 1. 回归模型的房屋值
房子面积(平方英尺) 占地的大小 卧室 花岗岩 卫生间有无重装? 销售价格
3529 9191 6 0 0 $205,000
3247 10061 5 1 1 $224,900
4032 10150 5 0 1 $197,900
2397 14156 4 1 0 $189,900
2200 9600 4 0 1` $195,000
3536 19994 6 1 1 $325,000
2983 9365 5 0 1 $230,000
           
3198 9669 5 1 1 ????

好的消息是(也可能是坏消息,取决于您自己的看法)上述对回归模型的简单介绍只触及了一些皮毛,这种触及甚至都不会被真正地注意到。关于回归模型有大学的课程可以选择,那会教授给您有关回归模型的更多信息,甚至多过您想要知道的。但我们的简介让您充分熟悉了这个概念,已足够应付本文中 WEKA 试用。如果对回归模型以及其中的数据统计的细节有更深的兴趣,您可以用自己喜爱的搜索引擎搜索如下的术语:least squares、homoscedasticity、normal distribution、White tests、Lilliefors tests、R-squared 和 p-values。

为 WEKA 构建数据集

为了将数据加载到 WEKA,我们必须将数据放入一个我们能够理解的格式。WEKA 建议的加载数据的格式是 Attribute-Relation File Format (ARFF),您可以在其中定义所加载数据的类型,然后再提供数据本身。在这个文件内,我们定义了每列以及每列所含内容。对于回归模型,只能有 NUMERIC 或 DATE 列。最后,以逗号分割的格式提供每行数据。我们为 WEKA 使用的 ARFF 文件如下所示。请注意在数据行内,并未包含我的房子。因为我们在创建模型,我房子的价格还不知道,所以我们还不能输入我的房子。

清单 1. WEKA 文件格式
@RELATION house

@ATTRIBUTE houseSize NUMERIC
@ATTRIBUTE lotSize NUMERIC
@ATTRIBUTE bedrooms NUMERIC
@ATTRIBUTE granite NUMERIC
@ATTRIBUTE bathroom NUMERIC
@ATTRIBUTE sellingPrice NUMERIC

@DATA
3529,9191,6,0,0,205000
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 应该类似于图 3 中所示的这个屏幕快照。

图 3. 房屋数据加载后的 WEKA

在这个视图中,WEKA 允许您查阅正在处理的数据。在 Explorer 窗口的左边,给出了您数据的所有列(Attributes)以及所提供的数据行的数量(Instances)。若选择一列,Explorer 窗口的右侧就会显示数据集内该列数据的信息。比如,通过选择左侧的 houseSize 列(它应该默认选中),屏幕右侧就会变成显示有关该列的统计信息。它显示了数据集内此列的最大值为 4,032 平方英尺,最小值为 2,200 平方英尺。平均大小为 3,131 平方英尺,标准偏差为 655 平方英尺(标准偏差是一个描述差异的统计量度)。此外,还有一种可视的手段来查看数据,单击Visualize All 按钮即可。由于在这个数据集内的行数有限,因此可视化的功能显得没有有更多数据点(比如,有数百个)时那么功能强大。

好了,对数据的介绍已经够多了。让我们立即创建一个模型来获得我房子的价格。

用 WEKA 创建一个回归模型

为了创建这个模型,单击 Classify 选项卡。第一个步骤是选择我们想要创建的这个模型,以便 WEKA 知道该如何处理数据以及如何创建一个适当的模型:

  1. 单击 Choose 按钮,然后扩展 functions 分支。
  2. 选择 LinearRegression 叶。

这会告诉 WEKA 我们想要构建一个回归模型。除此之外,还有很多其他的选择,这说明可以创建的的模型有很多。非常多!这也从另一个方面说明本文只介绍了这个主题的皮毛。有一点值得注意。在同一个分支还有另外一个选项,称为 SimpleLinearRegression 。请不要选择该选项,因为简单回归只能有一个变量,而我们有六个变量。选择了正确的模型后,WEKA Explorer 应该类似于图 4。

图 4. WEKA 内的线性回归模型

我能用电子数据表达到同样的目的么?

简单而言:不可以。深思熟虑后的答案是:可以。大多数流行的电子数据表程序都不能轻松完成我们用 WEKA 实现的功能,即定义一个具有多个自变量的线性模型。不过,您可以 十分容易地实现一个 Simple Linear Regression 模型(具有一个自变量)。如果您有足够的勇气,甚至可以进行一个多变量的回归,但是这将非常困难,绝对不如用 WEKA 来得简单。 本文的 参考资料 部分有一个 Microsoft® Excel® 的示例视频。

现在,选择了想要的模型后,我们必须告诉 WEKA 它创建这个模型应该使用的数据在哪里。虽然很显然我们想要使用在 ARFF 文件内提供的那些数据,但实际上有不同的选项可供选择,有些甚至远比我们将要使用的选项高级。其他的三个选择是:Supplied test set 允许提供一个不同的数据集来构建模型; Cross-validation 让 WEKA 基于所提供的数据的子集构建一个模型,然后求出它们的平均值来创建最终的模型;Percentage split WEKA 取所提供数据的百分之一来构建一个最终的模型。这些不同的选择对于不同的模型非常有用,我们在本系列后续文章中会看到这一点。对于回归,我们可以简单地选择 Use training set。这会告诉 WEKA 为了构建我们想要的模型,可以使用我们在 ARFF 文件中提供的那些数据。

创建模型的最后一个步骤是选择因变量(即我们想要预测的列)。在本例中指的就是房屋的销售价格,因为那正是我们想要的。在这些测试选项的正下方,有一个组合框,可用它来选择这个因变量。列 sellingPrice 应该默认选中。如果没有,请选择它。

我们准备好创建模型后,单击 Start。图 5 显示了输出结果。

图 5. WEKA 内的房屋价格回归模型

解析这个回归模型

WEKA 可不马虎。它会把这个回归模型径直放在输出,如清单 2 所示。

清单 2. 回归输出
sellingPrice = (-26.6882   * houseSize) +
               (7.0551     * lotSize) +
               (43166.0767 * bedrooms) +
               (42292.0901 * bathroom)
             - 21661.1208

清单 3 显示了结果,其中已经插入了我房子的价格。

清单 3. 使用回归模型的房屋价格
sellingPrice = (-26.6882   * 3198) +
               (7.0551     * 9669) +
               (43166.0767 * 5) +
               (42292.0901 * 1)
             - 21661.1208

sellingPrice = 219,328

不过,回过头来看看本文的开头部分,我们知道数据挖掘绝不是仅仅是为了输出一个数值:它关乎的是识别模式和规则。它不是严格用来生成一个绝对的数值,而是要创建一个模型来让您探测模式、预测输出并根据这些数据得出结论。让我们更进一步来解读一下我们的模型除了房屋价格之外告诉我们的模式和结论:

  • 花岗石无关紧要— WEKA 将只使用在统计上对模型的正确性有贡献的那些列(以 R-squared 量度,但这超出了本文的范围)。它将会抛弃并忽视对创建好的模型没有任何帮助的那些列。所以这个回归模型告诉我们厨房里的花岗石并不会影响房子的价值。
  • 卫生间是有关系的— 因我们为卫生间使用了简单的 0 或 1 值,所以我们可以使用来自回归模型的这个系数来决定卫生间的这个值对房屋价值的影响。这个模型告诉我们它使房子的价值增加了 $42,292。
  • 较大的房子价格反而低— WEKA 告诉我们房子越大,销售价格越低?这可以从 houseSize 变量前面负的系数看出来。此模型告诉我们房子每多出一平方英尺都会使房价减少 $26?这根本没有意义。这是在美国!当然是房子越大越好,特别是在我所在的得克萨斯州。那么我们怎么才能解释这一点呢?这是无用数据入、无用数据出的一个很好的例子。房子的大小并不是一个自变量,它还与卧室变量相关,因为房子大通常卧室也多。所以我们的模型并不完美。但是我们可以修复这个问题。还记得么:在 Preprocess 选项卡,可以从数据集中删除列。对于本例,我们删除 houseSize 列并创建另一个模型。那么它会如何影响房子的价格呢?这个新模型又如何更有实际意义?(修改后的我的房子价格是: $217,894)。

对统计学家的一个提示

这个模型打破了一个常规线性回归模型的几个要求,因为每个列并不是完全独立的,并且这里也没有足够的数据行来生成一个有效的模型。由于本文主要的目的是介绍 WEKA 这个数据挖掘工具,因此我们极大地简化了示例数据。

要想把这个简单的示例提升到一个新的级别,让我们来看一下 WEKA Web 站点上作为回归示例提供给我们的一个数据文件。理论上讲,这要比我们七个房子的简单示例要复杂得多。这个示例数据文件的作用是创建一个能基于汽车的几个特性来推测其油耗(每加仑英里数,MPG)的回归模型(请务必记住,数据取自 1970 至 1982 年)。这个模型包括汽车的如下属性:汽缸、排量、马力、重量、加速度、年份、产地及制造商。此外,这个数据集有 398 行数据,这些数据足以满足我们的多种统计需求,而这在我们的房价模型中是不能实现的。理论上讲,这是一个极为复杂的回归模型,WEKA 可能需要大量时间才能创建一个具有如此多数据的模型(但我估计您已预见到了 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 * weight +
      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 只用了不到一秒的时间就处理好了这个模型。所以,即使要处理的是具有大量数据的功能强大的回归模型,就计算而言,也不是什么问题。这个模型看上去应该比房子数据复杂得多,但事实并非如此。例如,这个回归模型的首行,-2.2744 * cylinders=6,3,5,4 表示,如果汽车有 6 个缸,就会在此列中放上一个 1,如果汽车有 8 个缸,就会放上一个 0。让我们从这个数据集中取一个示例行(第 10 行)并将这些数值放入回归模型,看看我们这个模型的输出是否与数据集中提供给我们的输出相似。

清单 5. 示例 MPG 数据
data = 8,390,190,3850,8.5,70,1,15

class (aka MPG) =

     -2.2744 * 0 +
     -4.4421 * 0 +
      6.74   * 0 +
      0.012  * 390 +
     -0.0359 * 190 +
     -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.9165

Expected Value = 15 mpg
Regression Model Output = 14.2 mpg

因此,当我们用随机选择的测试数据对此模型进行测试时,此模型的表现非常出色,对于一辆实际值为 15 MPG 的车,我们的预测值是 14.2 MPG。

结束语

本文探讨了第一个数据挖掘模型:回归模型(特别是线性回归多变量模型),另外还展示了如何在 WEKA 中使用它。这个回归模型很容易使用,并且可以用于很多数据集。您会发现这个模型是我在本系列文章中所讨论的所有模型中最有用的一个。然而,数据挖掘不仅局限于简单的回归,在不同的数据集及不同的输出要求的情况下,您会发现其他的模型也许是更好的解决方案。

最后,我再重申一下,本文及本系列的后续文章只是对数据统计和数据挖掘领域做了最简单的介绍。花上整整一学期的时间去学习数据统计和数据挖掘的人也只能被称为“初学者”。 我们的目的就是让初学者充分领略这个可用的开源工具的妙处并提高对数据挖掘所能提供的价值的了解和重视。

转载自:http://www.ibm.com/developerworks/cn/opensource/os-weka1/

原文章下方有文中数据。

用 WEKA 进行数据挖掘——第二章: 回归,布布扣,bubuko.com

时间: 2024-08-06 11:25:12

用 WEKA 进行数据挖掘——第二章: 回归的相关文章

用 WEKA 进行数据挖掘 ——第一章:简介

1.简介数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至算法优化,确实需要很多背景知识.但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西.他们的精力,集中在特征提取,算法选择和参数调优上.那么,一个可以方便地提供这些功能的工具,便是十分必要的了.而weka,便是数据挖掘工具中的佼佼者.Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化的,基于JAVA环境下

萌新向Python数据分析及数据挖掘 第二章 pandas 第二节 Python Language Basics, IPython, and Jupyter Notebooks

Python Language Basics, IPython, and Jupyter Notebooks In [5]: import numpy as np #导入numpy np.random.seed(12345)#设定再现的的随机数 np.set_printoptions(precision=4, suppress=True) #设置打印设置 Signature: np.set_printoptions(precision=None, threshold=None, edgeitem

萌新向Python数据分析及数据挖掘 第二章 pandas 第五节 Getting Started with pandas

Getting Started with pandas In [1]: import pandas as pd In [2]: from pandas import Series, DataFrame In [3]: import numpy as np np.random.seed(12345) import matplotlib.pyplot as plt plt.rc('figure', figsize=(10, 6)) PREVIOUS_MAX_ROWS = pd.options.dis

构建之法第二章个人技术和流程

如果说第一章我还有点概念,那么第二章我可以说一窍不通,什么是VSTS,什么是单元测试,什么是回归测试,还是什么是效能分析--好多的新名称,第一次看见,是那么的没有头绪.要不是百度了,仅仅看书,我完全不知VSTS--Visual Studio Team System,是由微软开发的一套具有高生产力.高集成性.可扩展的生命周期开发工具. 2.1.1节图文并茂的告诉我,单元测试重要作用,可能是自己的能力不足,相关知识了解的太少了,一边看还一边想,单元测试怎么写?写在哪里?什么时候写?就算是按照书本上的

Scikit-Learn 第二章(上)监督学习(文档翻译)

第二章:User Guide Supervised learning 1 一般的线性模型 下面的一些方法是用来处理输入变量和目标值之间具有线性关系的回归问题.以数学上的观念来看,如果是预测值,那么 在这个公式中,我们抽象出向量作为coef_,而作为intercept_ 如果想使用一般的线性模型来处理分类问题,可以参见逻辑回归. <待编辑>

高项3.7日第一次课,第一章信息化基础知识与第二章信息系统服务管理梳理

第一章 信息化的基础知识 1.国家信息化体系要素: 主要包括6要素,信息技术应用(龙头).信息资源(关键).信息网络(必要手段).信息技术产业(基础).信息化人才(成功之本).信息化法规政策和规范(保障). 2.电子政务: 电子政务建设的指导原则: (1)统一规划,加强领导. (2)需求主导,突出重点. (3)统一规划,拉动产业. (4)统一标准,保障安全. 主要任务: (1)电子政务网络由政务内网和政务外网构成,两网之间物理隔离,政务外网与互联网之间逻辑隔离.政务内网主要是副省级以上政务部门的

《机器学习导论》第二章 监督学习 学习笔记

训练集上训练的模型在多大程度上能够对新的实例预测出正确输出称为泛化(generalization) 对最好的泛化来说,我们应当使假设的复杂性和潜在数据的函数的复杂性相匹配.如果假设没有函数复杂,例如,当试图用直线拟合从三次项式抽取的数据时,称为欠拟合(underfitting).在这种情况下,随着复杂性的增加,训练误差和确认误差都会降低,但是,如果我们假设太浮渣,数据不足以约束该假设,我们最后也许得不到好的假设.或者如果存在噪声,则过分书杂的假设可能不仅学习潜在的函数,而且也学习数据中的噪声导致

读构建之法 第二章:个人技术和流程

绝大部分软件都是由多人合作完成的,大家的工作相互有依赖关系.某人负责的模块的功能被其他人调用,但如何让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的.量化的保证???单元测试就是一个很有效的解决方案. 创建单元测试函数的主要步骤是: 1.设置数据(一个假象的正确的E-mail地址) 2.使用被测试类型的功能(用E-mail地址来创建一个User类的实体) 3.比较实际结果和预期的结果(Assert.IsTrue(target!=null) 创建完就可以

机器学习 Machine Learning(by Andrew Ng)----第二章 单变量线性回归(Linear Regression with One Variable)

第二章 单变量线性回归(Linear Regression with One Variable) <模型表示(Model Representation)>                                                             <代价函数(Cost Function)>                                                          <梯度下降(Gradient Descent)