系统讲解数据挖掘机器学习工具Weka
经典的开源挖掘工具、开放的Java环境
初学者的入门优选书、研究者的钻研利器
《数据挖掘与机器学习:WEKA应用技术与实践》借助代表当今数据挖掘和机器学习高水平的著名开源软件Weka,通过大量的实践操作,使读者了解并掌握数据挖掘和机器学习的相关技能,拉近理论与实践的距离。全书共分8章,主要内容包括Weka介绍、Explorer界面、KnowledgeFlow界面、Experimenter界面、命令行界面、Weka高级应用、WekaAPI和学习方案源代码分析。
作为国内第一本系统讲解Weka的书籍,《数据挖掘与机器学习:WEKA应用技术与实践》内容全面、实例丰富、可操作性强,做到理论与实践的统一。本书适合数据挖掘和机器学习相关人员作为技术参考书,也适合作为计算机专业高年级本科生和研究生教材或教学参考用书。
第1章
Weka介绍
Weka是新西兰怀卡托大学用Java开发的数据挖掘著名开源软件,该系统自1993年开始由新西兰政府资助,至今已经历了20年的发展,其功能已经十分强大和成熟。Weka集合了大量的机器学习和相关技术,受领域发展和用户需求所推动,代表了当今数据挖掘和机器学习领域的最高水平。
1.1 Weka简介Weka是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis)的英文字首缩写,在该网站可以免费下载可运行软件和源代码,还可以获得说明文档、常见问题解答、数据集和其他文献等资源。Weka的发音类似新西兰本土一种不会飞的鸟,如图1.1所示,因此Weka系统使用该鸟作为其徽标。
图1.1 Weka(或woodhen)鸟
Weka是一种使用Java语言编写的数据挖掘机器学习软件,是GNU协议下分发的开源软件。Weka主要用于科研、教育和应用领域,还作为Ian H. Witten、FrankEibe和Mark A. Hall三人合著的著名书籍 ——《Data Mining — Practical Machine Learning Tools and Techniques, Third Edition》(数据挖掘:实用机器学习工具与技术,第3版)的实践方面的重要补充,该书于2011年由Elsevier出版。
Weka是一套完整的数据处理工具、学习算法和评价方法,包含数据可视化的图形用户界面,同时该环境还可以比较和评估不同的学习算法的性能。
国内外很多著名大学都采用Weka作为数据挖掘和机器学习课程的实践工具。Weka还有另外一个名字叫作Pentaho Data Mining Community Edition(Pentaho数据挖掘社区版),此外,Pentaho的网站还维护一个称为Pentaho Data Mining Enterprise Edition(Pentaho数据挖掘企业版)的版本,它主要提供技术支持和管理升级。另一个用Java编写的著名数据挖掘工具RapidMiner通过Weka Extension(Weka扩展)支持Weka,以充分利用Weka的“约100个额外的建模方案,其中包括额外的决策树、规则学习器和回归估计器”。
1.1.1 Weka历史
怀卡托机器学习团队宣称:我们团队的总体目标是要建立最先进的软件开发机器学习技术,并将其应用于解决现实世界的数据挖掘问题。团队具体目标是:使机器学习技术容易获得,并将其应用到解决新西兰工业的重大实际问题,开发新的机器学习算法并推向世界,为该领域的理论框架作出贡献。
1992年末,新西兰怀卡托大学计算机科学系Ian Witten博士申请基金,1993年获新西兰政府资助,并于同年开发出接口和基础架构。次年发布了第一个Weka的内部版本,两年后,在1996年10月,第一个公开版本(Weka 2.1)发布。Weka早期版本主要采用C语言编写,1997年初,团队决定使用Java重新改写,并在1999年中期发布纯Java的Weka 3版本。选定Java来实现Ian Witten著作《Data Mining》的配套机器学习技术是有充分理由的,作为一个著名的面向对象的编程语言,Java允许用一个统一的接口来进行学习方案和方法的预处理和后处理。决定使用Java来替代C++或其他面向对象的语言,是因为Java编写的程序可以运行在绝大部分计算机上,而无须重新编译,更不需要修改源代码。已经测试过的平台包括Linux、Windows和Macintosh操作系统,甚至包括PDA。最后的可执行程序复制过来即可运行,完全绿色,不要求复杂安装。当然,Java也有其缺点,最大的问题是它在速度上有缺陷,执行一个Java程序比对应的C语言程序要慢上好几倍。综合来看,对于Weka来说,Java“一次编译,到处运行”的吸引力远远超出对性能的渴望。
截止到2013年2月,Weka最新的版本是3.7.8,这是2013年1月24日发布的稳定版,本书基于该版本。
1.1.2 Weka功能简介Weka系统汇集了最前沿的机器学习算法和数据预处理工具,以便用户能够快速灵活地将已有的处理方法应用于新的数据集。它为数据挖掘的整个过程提供全面的支持,包括准备输入数据、统计评估学习方案、输入数据和学习效果的可视化。Weka除了提供大量学习算法之外,还提供了适应范围很广的预处理工具,用户通过一个统一界面操作各种组件,比较不同的学习算法,找出能够解决问题的最有效的方法。
Weka系统包括处理标准数据挖掘问题的所有方法:回归、分类、聚类、关联规则以及属性选择。分析要进行处理的数据是重要的一个环节,Weka提供了很多用于数据可视化和预处理的工具。输入数据可以有两种形式,第一种是以ARFF格式为代表的文件;另一种是直接读取数据库表。
使用Weka的方式主要有三种:第一种是将学习方案应用于某个数据集,然后分析其输出,从而更多地了解这些数据;第二种是使用已经学习到的模型对新实例进行预测;第三种是使用多种学习器,然后根据其性能表现选择其中的一种来进行预测。用户使用交互式界面菜单中选择一种学习方法,大部分学习方案都带有可调节的参数,用户可通过属性列表或对象编辑器修改参数,然后通过同一个评估模块对学习方案的性能进行评估。
Weka主界面称为Weka GUI选择器,它通过右边的四个按钮提供四种主要的应用程序供用户选择,如图1.2所示,用鼠标单击按钮进入到相应的图形用户界面。其中,Weka系统提供的最容易使用的图形用户接口称为探索者(Explorer)。通过选择菜单和填写表单,可以调用Weka的所有功能。例如,用户用鼠标仅仅单击几个按钮,就可以完成从ARFF文件中读取数据集,然后建立决策树的工作。Weka界面十分友好,能适时地将不宜用的功能选项设置为不可选;将用户选项设计为表格方式以方便填写;当鼠标移动到界面工具上短暂停留时,会给出用法提示;对算法都给出较为合理的默认值,这样,帮助用户尽量少花精力进行配置就可取得较好的效果等。
图1.2 Weka主界面
虽然探索者界面使用很方便,但它也存在一个缺陷,要求它将所需数据全部一次读进内存,一旦用户打开某个数据集,就会读取全部数据。因此,这种批量方式仅适合处理中小规模的问题。知识流刚好能够弥补这一缺陷。
知识流(KnowledgeFlow)界面可以使用增量方式的算法来处理大型数据集,用户可以定制处理数据流的方式和顺序。知识流界面允许用户在屏幕上任意拖曳代表学习算法和数据源的图形构件,并以一定的方式和顺序组合在一起。也就是,按照一定顺序将代表数据源、预处理工具、学习算法、评估手段和可视化模块的各构件组合在一起,形成数据流。如果用户选取的过滤器和学习算法具有增量学习功能,那就可以实现大型数据集的增量分批读取和处理。
实验者(Experimenter)界面用于帮助用户解答实际应用分类和回归技术中遇到的一个基本问题——对于一个已知问题,哪种方法及参数值能够取得最佳效果?通过Weka提供的实验者工作环境,用户可以比较不同的学习方案。尽管探索者界面也能通过交互完成这样的功能,但通过实验者界面,用户可以让处理过程实现自动化。实验者界面更加容易使用不同参数去设置分类器和过滤器,使之运行在一组数据集中,收集性能统计数据,实现重要的测试实验。
简单命令行(Simple CLI)界面是为不提供自己的命令行界面的操作系统提供的,该简单命令行界面用于和用户进行交互,可以直接执行Weka命令。
1.2 基 本 概 念
上节简要介绍了Weka,读者也许迫不及待地想进一步深入了解并使用Weka来完成数据挖掘工作。但是,在此之前,有必要先了解数据挖掘和机器学习的一些基本概念,为进一步地学习打下基础。
1.2.1 数据挖掘和机器学习
数据挖掘和机器学习这两项技术的关系非常密切。机器学习方法构成数据挖掘的核心,绝大多数数据挖掘技术都来自机器学习领域,数据挖掘又向机器学习提出新的要求和任务。
数据挖掘就是在数据中寻找模式的过程。这个寻找过程必须是自动的或半自动的,并且数据总量应该是具有相当大的规模,从中发现的模式必须有意义并能产生一定的效益。通常,数据挖掘需要分析数据库中的数据来解决问题,如客户忠诚度分析、市场购物篮分析,等等。当今已进入海量数据时代。例如,全世界已经有约1 000 000 000 000个网页;沃尔玛仅一个小时就有一百万的交易量,其数据库里数据已有2.5拍(即2.5×1015)字节的信息,等等。
这些海量数据不可能采用手工方式进行处理,因此,迫切要求能进行数据分析的自动化方法,这些都由机器学习提供。
机器学习定义为能够自动寻找数据中的模式的一套方法,然后,使用所发现的模式来预测将来的数据,或者在各种不确定的条件下进行决策。
机器学习分为两种主要类型。第一种称为有监督学习,或称为预测学习,其目标是在给定一系列输入输出实例所构成的数据集的条件下,学习输入x到输出y的映射关系。这里的数据集称为训练集,实例的个数称为训练样本数。第二种机器学习类型称为无监督学习,或称为描述学习,在给定一系列仅由输入实例构成的数据集的条件下,其目标是发现数据中的有趣模式。无监督学习有时候也称为知识发现,这类问题并没有明确定义,因为我们不知道需要寻找什么样的模式,也没有明显的误差度量可供使用。而对于给定的x,有监督学习可以对所观察到的值与预测的值进行比较。
……
第1章 Weka介绍
1.1 Weka简介
1.1.1 Weka历史
1.1.2 Weka功能简介
1.2 基本概念
1.2.1 数据挖掘和机器学习
1.2.2 数据和数据集
1.2.3 ARFF格式
1.2.4 预处理
1.2.5 分类与回归
1.2.6 聚类分析
1.2.7 关联分析
1.3 Weka系统安装
1.3.1 系统要求
1.3.2 安装过程
1.3.3 Weka使用初步
1.3.4 系统运行注意事项
1.4 访问数据库
1.4.1 配置文件
1.4.2 访问数据库
1.4.3 常见问题及解决办法
1.5 示例数据集
1.5.1 天气问题
1.5.2 鸢尾花
1.5.3 CPU
1.5.4 玻璃数据集
1.5.5 美国国会投票记录
1.5.6 乳腺癌数据集
课后强化训练
第2章 Explorer界面
2.1 图形用户界面
2.1.1 标签页简介
2.1.2 状态栏
2.1.3 图像输出
2.1.4 手把手教你用
2.2 预处理
2.2.1 加载数据
2.2.2 属性处理
2.2.3 过滤器
2.2.4 过滤器算法介绍
2.2.5 手把手教你用
2.3 分类
2.3.1 分类器选择
2.3.2 分类器训练
2.3.3 分类器输出
2.3.4 分类算法介绍
2.3.5 分类模型评估
2.3.6 手把手教你用
2.4 聚类
2.4.1 聚类面板操作
2.4.2 聚类算法介绍
2.4.3 手把手教你用
2.5 关联
2.5.1 关联面板操作
2.5.2 关联算法介绍
2.5.3 手把手教你用
2.6 选择属性
2.6.1 选择属性面板操作
2.6.2 选择属性算法介绍
2.6.3 手把手教你用
2.7 可视化
2.7.1 选择单独的2D散点图
2.7.2 选择实例
2.7.3 手把手教你用
课后强化训练
第3章 Knowledge Flow界面
3.1 知识流介绍
3.1.1 知识流特性
3.1.2 知识流界面布局
3.2 知识流组件
3.2.1 数据源
3.2.2 数据接收器
3.2.3 评估器
3.2.4 可视化器
3.2.5 其他工具
3.3 使用知识流组件
3.4 手把手教你用
课后强化训练
第4章 Experimenter界面
4.1 简介
4.2 标准实验
4.2.1 简单实验
4.2.2 高级实验
4.2.3 手把手教你用
4.3 远程实验
4.3.1 远程实验设置
4.3.2 手把手教你用
4.4 分析结果
4.4.1 获取实验结果
4.4.2 配置测试
4.4.3 保存结果
4.4.4 手把手教你用
课后强化训练
第5章 命令行界面
5.1 命令行界面介绍
5.1.1 命令调用
5.1.2 命令自动完成
5.2 Weka结构
5.2.1 类实例和包
5.2.2 weka.core包
5.2.3 weka.classifiers包
5.2.4 其他包
5.3 命令行选项
5.3.1 常规选项
5.3.2 特定选项
5.4 过滤器和分类器选项
5.4.1 过滤器选项
5.4.2 分类器选项
5.4.3 手把手教你用
5.5 包管理器
5.5.1 命令行包管理器
5.5.2 运行安装的算法
课后强化训练
第6章 Weka高级应用
6.1 贝叶斯网络
6.1.1 简介
6.1.2 贝叶斯网络编辑器
6.1.3 在探索者中使用贝叶斯网络
6.1.4 学习算法
6.1.5 查看贝叶斯网络
6.1.6 手把手教你用
6.2 神经网络
6.2.1 GUI使用
6.2.2 手把手教你用
6.3 文本分类
6.3.1文本分类示例
6.3.2 分类真实文本
6.3.3 手把手教你用
6.4 时间序列分析及预测
6.4.1 使用时间序列环境
6.4.2 手把手教你用
课后强化训练
第7章 Weka API
7.1 加载数据
7.1.1 从文件加载数据
7.1.2 从数据库加载数据
7.1.3 手把手教你用
7.2 保存数据
7.2.1 保存数据至文件
7.2.2 保存数据至数据库
7.2.3 手把手教你用
7.3 处理选项
7.3.1 处理选项方法
7.3.2 手把手教你用
7.4 内存数据集处理
7.4.1 在内存中创建数据集
7.4.2 打乱数据顺序
7.4.3 手把手教你用
7.5 过滤
7.5.1 批量过滤
7.5.2 即时过滤
7.5.3 手把手教你用
7.6 分类
7.6.1 分类器构建
7.6.2 分类器评估
7.6.3 实例分类
7.6.4 手把手教你用
7.7 聚类
7.7.1 聚类器构建
7.7.2 聚类器评估
7.7.3 实例聚类
7.7.4 手把手教你用
7.8 属性选择
7.8.1 使用元分类器
7.8.2 使用过滤器
7.8.3 使用底层API
7.8.4 手把手教你用
7.9 可视化
7.9.1 ROC曲线
7.9.2 图
7.9.3 手把手教你用
7.10 序列化
7.10.1 序列化基本方法
7.10.2 手把手教你用
7.11 文本分类综合示例
7.11.1 程序运行准备
7.11.2 源程序分析
7.11.3 运行说明
课后强化训练
第8章 学习方案源代码分析
8.1 NaiveBayes源代码分析
8.2 实现分类器的约定
课后强化训练
附录A 中英文术语对照
附录B Weka算法介绍
参考文献