欢迎光临
免费的PDF电子书下载网站

数据挖掘与机器学习——WEKA应用技术与实践 PDF下载

编辑推荐

Array ;

内容简介

Array

作者简介

袁梅宇,男,工学博士,硕士导师,现在昆明理工大学计算机系任教。为本科生和研究生主讲Java程序设计、Java EE技术、数据库原理、人工智能、Dot Net技术等核心课程,参加过863 CIMS Net建设、中欧合作项目DRAGON和多项国家基金和省基金项目,第一作者公开发表论文十余篇,软件著作权(颁证)六项。

数据挖掘与机器学习——WEKA应用技术与实践 PDF下载

目录

第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算法介绍
参考文献

前沿

前 言

当代中国掀起了一股学习数据挖掘和机器学习的热潮,从斯坦福大学公开课“机器学习课程”,到龙星计划的“机器学习Machine Learning”课程,再到加州理工学院公开课“机器学习与数据挖掘”课程,参加这些网络课程学习的人群日益壮大,数据挖掘和机器学习炙手可热。

数据挖掘是数据库知识发现中的一个步骤,它从大量数据中自动提取出隐含的、过去未知的、有价值的潜在信息。机器学习主要设计和分析一些让计算机可以自动“学习”的算法,其算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测。机器学习和数据挖掘这两个领域联系密切,数据挖掘利用机器学习提供的技术来分析海量数据,以发掘数据中隐含的有用信息。

数据挖掘和机器学习这两个密切相关的领域存在一个特点:理论很强而实践很弱。众所周知,理论和实践是研究者的左腿和右腿,缺了一条腿的研究者肯定难以前行,有的技术人员花了若干年时间进行研究,虽然了解甚至熟悉了很多公式和算法,但仍然难以真正去面对一个实际挖掘问题并很好地解决手上的技术难题,其根本原因就是——缺乏实践。

本书就是为了试图解决数据挖掘和机器学习的实践问题而编写的,依托新西兰怀卡托大学采用Java语言开发的著名开源软件Weka,该系统自1993年开始由新西兰政府资助,至今已经历了20年的发展,它的功能已经十分强大和成熟。Weka集合了大量的机器学习和相关技术,受领域发展和用户需求所推动,代表了当今数据挖掘和机器学习领域的最高水平。因此,研究Weka能帮助研究者从实践去验证所学的理论,显然有很好的理论意义或实际意义。

本书共分8章。第1章介绍Weka的历史和功能、数据挖掘和机器学习的基本概念、Weka系统安装,以及示例数据集;第2章介绍Explorer界面的使用,主要内容包括:图形用户界面、预处理、分类、聚类、关联、选择属性,以及可视化;第3章介绍Knowledge Flow界面,主要内容有知识流介绍、知识流组件、使用知识流组件,以及实践教程;第4章介绍Experimenter界面,主要内容有Experimenter界面介绍、标准实验、远程实验,以及分析实验结果;第5章介绍命令行界面,主要内容有命令行界面介绍、Weka结构、命令行选项、过滤器和分类器选项,以及Weka包管理器;第6章介绍一些Weka的高级应用,主要介绍Weka的贝叶斯网络、神经网络、文本分类和时间序列分析及预测;第7章介绍Weka API,介绍如何使用Java源代码来实现常见数据挖掘任务的基础知识,并给出一个展示如何进行数据挖掘的综合示例;最后一章通过对一个学习方案的源代码进行分析,深入研究Weka学习方案的工作原理,为开发人员提供一个编写学习算法的技术基础。

在阅读大量相关文献的过程中,作者深深为国外前辈们的理论功底和实践技能所折服,那些巨人们站在高处,使人难以望其项背。虽然得益于诸如网易公开课和龙星计划等项目,我们有机会和全世界站在同一个数量级的知识起跑线上,但是,这并不意味着能在将来的竞争中占据优势,正如孙中山先生所说“革命尚未成功,同志仍须努力”,让我们一起共勉。

在本书的编写过程中,作者力求精益求精,但限于作者的知识和能力,且很多材料都难以获取,考证和去伪存真是一件时间开销非常大和异常困难的工作,因此肯定会有所遗漏及不妥之处,敬请广大读者批评指正。

本书承蒙很多朋友、同事的帮助才得以成文。特别感谢Weka开发组的全体人员,他们将自己20年心血汇聚的成果开源,对本领域贡献巨大;衷心感谢清华大学出版社的编辑老师在内容组织、排版,以及出版方面提出的建设性意见和给予的无私帮助;感谢昆明理工大学提供的宽松的研究环境;感谢昆明理工大学计算机系教师缪祥华博士,他为本书的成文提出了很多建设性的建议,对本书的改进帮助甚大;感谢昆明理工大学计算机系海归博士吴霖老师,他经常和作者一起讨论机器学习的技术问题,他为本书的编写贡献了很多智慧;感谢昆明理工大学现代教育中心的何佳老师,他完成了本书部分代码的编写和测试工作;感谢国内外的同行们,他们在网络论坛和博客上发表了众多卓有见识的文章,作者从中学习到很多知识,由于来源比较琐碎,无法一一列举,感谢他们对本书的贡献;感谢理解和支持我的家人,他们是我写作的坚强后盾。感谢购买本书的朋友,欢迎批评指正,你们的批评建议都会受到重视,并在再版中改进。

编 者

免费在线读

 ;  ;  ;  ;第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、Frank Eibe和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.2.2  ;数据和数据集
根据应用的不同,数据挖掘的对象可以是各种各样的数据,这些数据可以以各种形式存储,如数据库、数据仓库、数据文件、流数据、多媒体、网页,等等。即可以集中存储在数据存储库中,也可以分布在世界各地的网络服务器上。
通常将数据集视为待处理的数据对象的集合。由于历史原因,数据对象有多个别名,如记录、点、行、向量、案例、样本、观测等。数据对象也是对象,因此,可以用刻画对象基本特征的属性来进行描述。属性也有多个别名,如变量、特征、字段、维、列,等等。
数据集可以类似于一个二维的电子表格或数据库表。在最简单的情形下,每个训练输入xi是一个N维的数值向量,表示特定事物的一些特征,如人的身高、体重。这些特征也可以称为属性,有时xi也可以是复杂结构的对象,如图像、电子邮件、时间序列、语句等。
属性可以分为四种类型:标称(nominal)、序数(ordinal)、区间(interval)和比率(ratio),其中,标称属性的值仅仅是不同的名称,即,标称值仅提供区分对象的足够信息,如性别(男、女)、衣服颜色(红、黄、蓝)、天气(阴、晴、雨、多云)等;序数属性的值可以提供确定对象的顺序的足够信息,如成绩等级(优、良、中、及格、不及格)、职称(初职、中职、高职)、学生(本科生、硕士生、博士生)等;区间属性的值之间的差是有意义的,即存在测量单位,如温度、日历日期等;比率属性的值之间的差和比值都是有意义的,如绝对温度、年龄、长度、成绩分数等。
标称属性和序数属性统称为分类的(Categorical)或定性的(Qualitative)属性,它们的取值为集合,即使使用数值来表示,也不具备数的大部分性质,因此,应该像对待符号一样对待;区间属性和比率属性统称为定量的(Quantitative)或数值的(Numeric)属性,定量属性采用数值来表示,具备数的大部分性质,可以使用整数值或连续值来表示。
大部分数据集都以数据库表和数据文件的形式存在,Weka支持读取数据库表和多种格式的数据文件,其中,使用最多的是一种称为ARFF格式的文件。
1.2.3  ;ARFF格式
ARFF是一种Weka专用的文件格式,由Andrew Donkin创立,有传言说ARFF代表Andrew’s Ridiculous File Format(安德鲁的荒唐文件格式),但在Weka的正式文档中明确说明ARFF代表Attribute-Relation File Format(属性—关系文件格式)。该文件是ASCII文本文件,描述共享一组属性结构的实例列表,由独立且无序的实例组成,是Weka表示数据集的标准方法,ARFF不涉及实例之间的关系。
在Weka安装目录下的data子目录中,可以找到名称为weather.numeric.arff的天气数据文件,其内容如程序清单1.1所示。数据集是实例的集合,每个实例包含一定的属性,属性的数据类型包括如下几类:标称型(nominal)只能取预定义值列表中的一个;数字型(numeric),只能是实数或整数;字符串(string),这是一个由双引号引用的任意长度的字符列表;另外还有日期型(date)和关系型(relational)。ARFF文件就是实例类型的外部表示,其中包括一个标题头(header),以描述属性的类型,还包含一个用逗号分隔的列表所表示的数据部分(data)。
程序清单1.1  ;天气数据的ARFF文件
% This is a toy example, the UCI weather dataset.
% Any relation to real weather is purely coincidental.
@relation weather
@attribute outlook {sunny, overcast, rainy}
@attribute temperature real
@attribute humidity real
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}
@data
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,64,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
上述代码中,以百分号“%”开始的行称为注释行。与计算机编程语言类似,最前面的注释行应该写明数据集的来源、用途和含义。
@relation一行定义内部数据集的名称——weather,名称应简洁明了,尽可能容易理解。Relation也称为关系。
@attribute outlook {sunny, overcast, rainy}行定义名称为outlook的标称型属性,有三个取值:sunny、overcast和rainy。按照同样的方式,@attribute windy {TRUE, FALSE}行和@attribute play {yes, no}行分别定义windy和play两个标称型属性。要注意的是,最后一个属性缺省为用于预测的类别变量。本例中,类别变量为标称型属性play,它只能取两个值之一,使得天气问题成为二元(binary)的分类问题。
@attribute temperature real定义名称为temperature的数值型属性,@attribute humidity real定义名称为humidity的数值型属性。这两个属性都是实数型。
@data标志后的各行构成数据集。每行为一个实例样本,由采用逗号分隔的值组成,顺序与由@attribute所定义属性的顺序一致。
本例没有使用字符串类型和日期类型,在将来的学习中会遇到这两种类型。
1.2.4  ;预处理
数据挖掘是在大量的、潜在有用的数据中挖掘出有用模式的过程。因此,源数据的质量直接影响到挖掘的效果,高质量的数据是进行有效挖掘的前提。但是,由于数据挖掘所使用的数据往往不是专门为挖掘准备的,期望数据质量完美并不现实,人的错误、测量设备的限制以及数据收集过程的漏洞都可能导致一些问题,如缺失值和离群值。
由于无法在数据的源头控制质量,数据挖掘只能通过以下两个方面设法避免数据质量问题:①数据质量问题的检测与纠正;②使用能容忍低质量数据的算法。第一种方式在数据挖掘前检测并纠正一些质量问题,这个过程称为数据预处理;第二种方式需要提高算法的健壮性。
数据预处理是数据挖掘的重要步骤,数据挖掘者的大部分时间和精力都要花在预处理阶段。Weka专门提供若干过滤器进行预处理,还在探索者界面中提供选择属性标签页专门处理属性的自动选择问题。数据预处理涉及的策略和技术非常广泛,主要包括如下技术。
1) 聚集
聚集(Aggregation)就是将两个或多个对象合并为单个对象。一般来说,定量数据通常通过求和或求平均值的方式进行聚集,定性数据通常通过汇总进行聚集。聚集通过数据归约来减少数据量,所导致的较小数据集只需要较少内存和处理时间的开销,因此,可以使用开销更大的数据挖掘算法。另外,聚集使用高层数据视图,起到了范围或度量转换的作用。虽然站在很高的角度去检视问题容易避免只见树木不见森林的问题,但也可能导致有趣细节的丢失。
2) 抽样
如果处理全部数据的开销太大,数据预处理可以使用抽样,只选择数据对象的子集进行分析。使用抽样可以压缩数据量,因此,能够使用效果更好但开销较大的数据挖掘算法。由于抽样是一个统计过程,好的抽样方案就是确保以很高的概率得到有代表性的样本,即:样本近似地具有原数据相同的性质。
抽样方式有多种,最简单的抽样是选取每一个数据行作为样本的概率都相同,这称为简单随机抽样,又分为有放回抽样和无放回抽样两种形式,前者是从N个数据行中以概率1/N分别随机抽取出n个数据行,构成样本子集;后者与有放回抽样的过程相似,但每次都要删除原数据集中已经抽取出来的数据行。显然,有放回抽样得到的样本子集有可能重复抽取到相同的数据行。
当整个数据集由差异较大的数据行构成时,简单随机抽样可能无法抽取到不太频繁出现的数据行,这会导致得到的样本不具代表性。分层抽样(Stratified Sampling)尽量利用事先掌握的信息,充分考虑保持样本结构和总体结构的一致性以提高样本的代表性。其步骤是,先将数据集按某种特征分为若干不相交的“层”,然后再从每一层中进行简单随机抽样,从而得到具有代表性的抽样数据子集。
3) 维度归约
维度是指数据集中属性的数目。维度归约(Dimension Reduction)是指创建新属性,通过数据编码或数据变换,将一些旧属性合并在一起以降低数据集的维度。
维度归约可以删除不相关的属性并降低噪声,维度降低会使许多数据挖掘的算法变得更好,还能消除了维灾难带来的负面影响。维灾难是指,随着维度的增加,数据在它所占的空间越来越稀疏,对于分类问题,这意味着可能没有足够的数据对象来创建模型;对于聚类问题,点之间的密度和距离的定义失去意义。因此,对于高维数据,许多分类和聚类等学习算法的效果都不理想。维度归约使模型的属性更少,因而可以产生更容易理解的模型。
4) 属性选择
除维度归约外,降低维度的另一种方法是仅只使用属性的一个子集。表面看来似乎这种方法可能丢失信息,但很多情况下,数据集存在冗余或不相关的属性。其中,冗余属性是指某个属性包含了其他属性中的部分或全部信息,不相关属性是指对于手头数据挖掘任务几乎完全没有用处的信息。属性选择是指从数据集中选择最具代表性的属性子集,删除冗余或不相关的属性,从而提高数据处理的效率,使模型更容易理解。
最简单的属性选择方法是使用常识或领域知识,以消除一些不相关或冗余属性,但是,选择最佳的属性子集通常需要系统的方法。理想的属性选择方法是:将全部可能的属性子集作为数据挖掘学习算法的输入,然后选取能产生最好结果的子集。这种方法反映了对最终使用的数据挖掘算法的目的和偏爱。但是,由于n个属性的子集的数量多达2n个,大部分情况下行不通。因此,需要考虑三种标准的属性选择方法:嵌入、过滤和包装。
嵌入方法(Embedded Approach)将属性选择作为数据挖掘算法的一部分。在挖掘算法运行期间,算法本身决定使用哪些属性以及忽略哪些属性。决策树算法通常使用这种方法。
过滤方法(Filter Approach)在运行数据挖掘算法之前,使用独立于数据挖掘任务的方法进行属性选择,即:先过滤数据集产生一个属性子集。
包装方法(Wrapper Approach)将学习算法的结果作为评价准则的一部分,使用类似于前文介绍的理想算法,但通常无法枚举出全部可能的子集以找出最佳属性子集。
根据属性选择过程是否需要使用类别信息,属性选择可分为有监督属性选择和无监督属性选择。前者通过度量类别信息与属性之间的相互关系来确定属性子集,后者不使用类别信息,使用聚类方法评估属性的贡献度,根据贡献度来确定属性子集。
5) 属性创建
属性创建就是通过对数据集中旧的属性进行处理,创建新的数据集,这样能更有效的获取重要的信息。由于通常新数据集的维度比原数据集少,因此,可以获得维度归约带来的好处。属性创建有三种方法:属性提取、映射数据到新空间和属性构造。
属性提取是指由原始数据创建新的属性集。例如,对照片数据进行处理,提取一些较高层次的特征,诸如与人脸高度相关的边和区域等,就可以使用更多的分类技术。
映射数据到新空间,是指使用一种完全不同的视角挖掘数据可能揭示重要而有趣的特征。例如,对时间序列实施傅立叶变换,转换为频率信息,可能检测到其中的周期模式。
当原始数据集的属性含有必要信息,但其形式不适合数据挖掘算法的时候,可以使用属性构造,将一个或多个原来的属性构造出新的属性。
6) 离散化和二元化
有的数据挖掘算法,尤其是某些分类算法,要求数据是分类属性的形式。发现关联模式的算法要求数据是二元属性的形式。因此,需要进行属性变换,将连续属性转换为分类属性称为离散化(Discretization),将连续和离散属性转换为一个或多个二元属性称为二元化(Binarization)。
连续属性离散化为分类属性分为两个子任务:决定需要多少个分类值,以及如何确定将连续属性值映射到这些分类值中。因此,离散化问题就是决定选择多少个分割点,以及确定分割点的位置。利用少数分类值标签替换连续属性的值,从而减少和简化原来的数据。
根据是否使用类别信息,可以将离散化技术分为两类:使用类别信息的称为有监督的离散化,反之则称为无监督的离散化。
等宽和等频离散化是两种常用的无监督的离散化方法。等宽(Equal Width)离散化将属性的值域划分为相同宽度的区间,区间的数目由用户指定。这种方式常常会造成实例分布不均匀。等频(Equal Frequency)离散化也称为等深(Equal Depth)离散化,它试图将相同数量的对象放进每个区间,区间的数目由用户指定。
7) 变量变换
变量变换(Variable Transformation)也称为属性变换,是指用于变量的所有值的变换。下面讨论两种重要的变量变换:简单函数变换和规范化。
简单函数变换是使用一个简单数学函数分别作用于每一个值。在统计学中,使用平方根、对数变换和倒数变换等变量变换常用于将不具有高斯分布的数据变换为具有高斯分布的数据。
变量的标准化(Standardization)是使整个值的集合具有特定的性质。例如,假如 是某个属性的均值, 是其标准差,则变换公式 创建一个具有均值0和标准差1的新的变量。由于均值和标准差受离群点的影响较大,因此,常常修正上述变换。例如,用中位数(Median)替代均值,用绝对标准差替代标准差,等等。
1.2.5  ;分类与回归
分类(Classification)与回归(Regression)是数据挖掘应用领域的重要技术。分类就是在已有数据的基础上学习出一个分类函数或构造出一个分类模型,这就是通常所说的分类器(Classifier)。该函数或模型能够把数据集中的数据映射到某个给定的类别,从而用于数据预测。分类和回归是预测的两种形式,分类预测输出目标是离散值,而回归预测输出目标是连续值。因此,在Weka中,分类和回归都归为同一类的问题,都是要构建能对目标进行预测的分类器。
在分类之前,先要将数据集划分为训练集和测试集两个部分。分类分两步,第一步分析训练集的特点并构建分类模型,常用的分类模型有决策树、贝叶斯分类器、k-最近邻分类等;第二步使用构建好的分类模型对测试集进行分类,评估分类模型的分类准确度等指标,选择满意的分类模型。
分类模型学习方法主要分为以下几类。
1) 决策树分类
决策树分类方法对训练集进行训练,生成一棵二叉或多叉的决策树。决策树包含三种节点,根节点没有入边,但有零条或多条出边;内部节点只有一条入边和两条或多条出边;叶节点只有一条入边,但没有出边。树的叶节点代表某一个类别值,非叶节点代表某个一般属性(非类别属性)的一个测试,测试的输出构成该非叶子节点的多个分支。从根节点到叶节点的一条路径形成一条分类规则,一棵决策树能够方便地转化为若干分类规则,挖掘者可以根据分类规则直观地对未知类别的样本进行预测。具体方法是,从树的根节点开始,将测试条件用于检验样本,根据测试结果选择适当的分支,沿着该分支要么到达另一个内部节点,再次使用新的测试规则;要么到达叶节点,结果是将叶节点的类别标号赋值给检验样本。
决策树归纳的学习算法必须解决以下两个问题。
第一,如何分裂训练样本集?树在增长过程中的每个递归步必须选择一个属性作为测试条件,将样本集划分为更小的子集。为了实现该步,算法必须提供为不同类型的属性指定测试条件的方法,并且提供评估每种测试条件的客观度量。
第二,如何停止分裂过程?需要有终止决策树生长过程的结束条件。可能的策略是一直分裂,直到所有的样本都属于同一个类别,或者所有样本的属性值都相同。也可以使用其他策略提前终止树的生长过程。
不同决策树采用的技术不同,已经有很多成熟而有效的决策树学习算法,如ID3、C4.5、CART、Random Forest等。具体算法详见后文。
2) 贝叶斯分类
贝叶斯分类方法有一个明确的基本概率模型,用以给出某个样本属于某个类别标签的概率。贝叶斯分类方法有两种主要实现:朴素贝叶斯分类器和贝叶斯网络。朴素贝叶斯分类器是基于贝叶斯定理的统计分类方法,它假定属性之间相互独立,但实际数据集中很难保证这一条件。朴素贝叶斯分类器分类速度快且分类准确度高,支持增量学习。贝叶斯网络使用贝叶斯网络描述属性之间的依赖关系,Weka对贝叶斯网络有很好的支持,详见后文。
3) k-最近邻分类
前面所介绍的决策树分类器是一种积极学习器(Eager Learner),因为只要训练数据可用,就开始学习从输入属性到类别标签的映射模型。另一种策略则是推迟对训练模型的建模,直到需要分类测试样本时再进行,这种策略称为消极学习器(Lazy Learner)。k-最近邻分类算法是使用后一种策略,它是一种基于实例的学习算法,不需要事先使用训练样本构建分类器,而是直接使用训练集对测试样本进行分类,以确定类别标签。
k-最近邻分类使用具体的训练实例进行预测,不必维护从数据集中抽象出来的模型。这种基于实例的学习算法需要邻近性度量来确定实例间的相似度或距离,还需要分类函数根据测试实例与其他实例的邻近性返回测试实例的预测类别标签。虽然消极学习方法不需要建立模型,然而,对测试实例进行分类的开销很大,因为需要逐个计算测试样本和训练样本之间的相似度。相反,积极学习方法通常花费大量的计算资源来建立模型,但一旦建立模型之后,对测试实例进行分类就会非常快。最近邻分类器基于局部信息进行预测,而决策树分类器则试图找到一个适合整个输入空间的全局模型。由于基于局部分类策略,k-最近邻分类在k很小的时候对噪声非常敏感。
Weka实现的k-最近邻分类算法称为IBk,可以通过交叉验证选择适当的K值,还可以距离加权。
4) 神经网络分类
神经网络(Neural Network)是大量的简单神经元按一定规则连接构成的网络系统,能够模拟人类大脑的结构和功能。它采用某种学习算法从训练样本中学习,将获取的知识存储在网络模型的权值中,模拟人类大脑通过同一个脉冲反复刺激下改变神经元之间的神经键连接强度来进行学习。
按照各神经元的不同连接方式,神经网络分为前向网络和反馈网络。目前的神经网络模型非常丰富,典型的模型有感知器模型、多层前向传播模型、BP模型、Hopfield网络、SOM自组织网络,等等。
Weka神经网络使用多层感知器实现了BP神经网络,详见第6章。
1.2.6  ;聚类分析
聚类(Clustering)就是将数据集划分为由若干相似实例组成的簇(cluster)的过程,使得同一个簇中实例间的相似度最大化,不同簇的实例间的相似度最小化。也就是说,一个簇就是由彼此相似的一组对象所构成的集合,不同簇中的实例通常不相似或相似度很低。
聚类分析是数据挖掘和机器学习中十分重要的技术,应用领域极为广泛,如统计学、模式识别、生物学、空间数据库技术、电子商务等。
作为一种重要的数据挖掘技术,聚类是一种无监督的机器学习方法,主要依据样本间相似性的度量标准将数据集自动划分为几个簇,聚类中的簇不是预先定义的,而是根据实际数据的特征按照数据之间的相似性来定义的。聚类分析算法的输入是一组样本以及一个度量样本间的相似度的标准,输出是簇的集合。聚类分析的另一个副产品是对每个簇的综合描述,这个结果对于进一步深入分析数据集的特性尤为重要。聚类方法适合用于讨论样本间的相互关联,从而能初步评价其样本结构。
数据挖掘关心聚类算法的如下特性:处理不同类型属性的能力、对大型数据集的可扩展性、处理高维数据的能力、发现任意形状簇的能力、处理孤立点或“噪声”数据的能力、对数据顺序的不敏感性、对先验知识和用户自定义参数的依赖性、聚类结果的可解释性和实用性、基于约束的聚类等。
聚类分析方法主要有:划分的方法、层次的方法、基于密度的方法、基于网格的方法、基于模型的方法等。Weka实现的聚类算法主要有:K均值算法、EM算法和DBSCAN。
1.2.7  ;关联分析
商业企业在日复一日的运营中积累了大量的数据。例如,超市的收银台每天都要记录大量的顾客购物数据,这种数据通常称为购物篮事务。商家对分析这些数据很感兴趣,因为分析它可以了解顾客的购买行为,关联分析(Association Analysis)方法就是用于发现隐藏在大型数据集中有意义的联系,这种联系可以用关联规则(Association Rule)进行表示。例如,商家通过关联分析挖掘商场销售数据,发现顾客的购买习惯,例如,购买产品X的同时也购买产品Y,于是,超市就可以调整货架的布局,比如将X产品和Y产品放在一起,增进销量。因此,关联分析为商场进行商品促销以及货架摆放提供了辅助决策信息。
例如,沃尔玛从销售数据中发现这样一个令人匪夷所思的规则:
{尿布}——〉{啤酒}
该规则表明尿布和啤酒的销售之间存在着很强的联系。原来,美国妇女通常在家照顾孩子,所以她们会经常嘱咐丈夫在下班回家的路上为孩子买尿布,而丈夫在买尿布的同时又会顺手购买自己爱喝的啤酒。得益于所发现的新的交叉销售商机,将“啤酒”和“尿布”这两个看上去毫无关联的商品摆放在一起销售,获得了很好的销售收益。
除购物篮数据外,关联分析还可以应用于其他领域,如生物信息学、医疗诊断、网页挖掘和科学数据分析等。例如,通过关联分析挖掘医疗诊断数据,可以发现症状与疾病之间的关联,为医生诊断疾病和治疗提供线索。
关联分析最著名的算法是Apriori 算法,其核心是基于两阶段频繁项集思想的递推算法。寻找最大项集(频繁项集)的基本思想是:算法需要对数据集进行多步处理。第一步,简单统计所有含一个元素项集出现的频数,并找出那些不小于最小支持度的项集,即一维最大项集。从第二步开始循环处理直到再没有最大项集生成。循环过程是:第k步中,根据第k-1步生成的(k-1)维最大项集产生k维候选项集,然后对数据库进行搜索,得到候选项集的支持度,与最小支持度进行比较,从而找到k维最大项集。
Weka实现了Apriori 算法和另一个关联分析的FP-Growth算法。
1.3  ;Weka系统安装
本节介绍Weka系统的安装。由于Weka采用Java编写,因此,具有Java“一次编译,到处运行”的特性。支持的操作系统有Windows x86、Windows x64、Mac OS X、Linux等。
1.3.1  ;系统要求
表1.1列举了运行Weka的特定版本对Java版本的要求。
表1.1  ;Weka各版本对Java版本的要求
Java
1.4 1.5 1.6
Weka <;3.4.0 X X X
3.4.x X X X
3.5.x 3.5.0~3.5.2 >;3.5.2
r2892, 20/02/2006 X
3.6.x X X
3.7.x 3.7.0 >;3.7.0
r5678, 25/06/2009
表1.1有两处还注明了因版本变更对Java版本要求的变化,采用前缀r加数字表示Subversion修订版本,并列出变更时间。
Linux/Gnome系统中,使用Java 5.0及以上版本会遇到界面的缺省外观显示问题。Mac OS X用户使用Weka 3.6.5/3.7.4版本需要安装Java for Mac OS X 10.6 Update 3及以上版本。
1.3.2  ;安装过程
下面介绍Weka 3.7.8在Windows 7旗舰版上的下载及安装过程。
1. 下载
虽然从SourceForge.net网站也可以下载,但从Weka官网下载会更为方便,更为重要的是Weka官网还有很多相关资源,供下载的软件版本也更为齐全。在浏览器地址栏中输入“http://www.cs.waikato.ac.nz/~ml/weka/”,并按Enter键,在主页的导航栏单击Download超链接,根据自己的计算机所安装的操作系统选择下载文件。
要注意的是,Weka主要版本有三种,第一种称为Snapshots(快照版本),是开发过程中构建的版本,并不是正式版,这是为想要最新的错误修正版的用户设置的;第二种称为Stable book 3rd ed. version(第3版书的稳定版本),是Ian Witten的第3版著作对应的Weka实现的稳定版本,版本为3.6.x;第三种称为Developer version(开发者版本),目前版本为3.7.x,这是Weka的主干版本,是稳定3.6版本代码的延续,进行了错误修复并新增了一些新功能,因此,它是学习和研究Weka的理想版本,本书的写作就基于这个版本。
由于作者使用的操作系统为Windows 7旗舰版,并且已经安装过Java 7,因此,选择下载weka-3-7-8.exe,如图1.3所示。
图1.3  ;选择下载的文件
双击下载后的.exe文件并进行安装。
2. 安装
首先出现的是欢迎窗口,如图1.4所示,单击Next按钮进入下一步。
随后出现的是GNU GPL协议,必须同意才能进行安装。单击I Agree按钮,如图1.5所示。
 ;  ;  ;
 ;  ;  ;图1.4  ;欢迎窗口  ;  ;  ;  ;  ;  ;  ;  ;  ;  ; 图1.5  ;同意GNU GPL协议
下一步是选择安装组件。选项有Full、Minimal、custom三项,默认为Full,由于完全安装也不占多大空间,建议选择默认的Full选项。因此保持默认选项不动,单击Next按钮进入下一步,如图1.6所示。
下面一步是选择安装路径。根据自己计算机的硬盘空间进行选择,建议安装在C盘的Weka-3-7目录下,选择完成后,单击Next按钮进入下一步,如图1.7所示。
接下来是选择开始菜单文件夹名称,这里是Weka 3.7.8,没有特殊要求则不必更改,单击Install按钮开始安装,如图1.8所示。
安装完成后,最好花上一点时间看看已安装的文件。如图1.9所示,Weka-3-7目录下有三个子目录,changelogs子目录用于存放Weka版本的变更情况,除非想参与到Weka项目的开发,或者想知道Weka的某版本在上一个版本的基础上究竟变更了哪些内容,才需要进行研究;data子目录存放自带的23个ARFF文件作为测试用途的示例数据集,详见后文;doc子目录存放Weka文档,进行二次开发的技术人员需要仔细阅读。
 ;  ;  ;
图1.6  ;选择安装组件  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;图1.7  ;选择安装路径
图1.8  ;选择开始菜单文件夹名称
图1.9  ;安装在硬盘上的文件
安装目录下还有几个文件值得关注。WekaManual.pdf是Weka用户手册,不论新手还是老资格用户,该手册的帮助都会很大;weka-src.jar是打包源程序,可以解压出来供深层次的用户使用;RunWeka.ini是运行Weka的配置文件。
1.3.3  ;Weka使用初步
Weka安装完成后,在Windows左下角的开始菜单中,可以找到Weka 3.7.8子菜单,下面有四个菜单项,如图1.10所示。
单击第一个菜单项——Documentation(参考资料),可以浏览Weka提供的非常有用的参考资料,包括Weka手册、Java包API文档,还有一些在线资源,如Weka主页、Weka维基、Pentaho的Weka社区文档,以及SourceForge网站下的Weka,如图1.11所示。
图1.11  ;Weka参考资料
第二个菜单项是卸载Weka。
第三和第四个菜单项均可以启动Weka界面,不同的是前者带有一个控制台输出,而后者没有。不管使用哪种方式启动Weka后,主界面显示为一个称作Weka GUI选择器的窗口,如前文的图1.2所示。这里主要介绍Weka的菜单。
Weka使用的MDI(多文档界面)外观,让所有打开的窗口更加简洁明了。Weka菜单分为以下四个部分。
1. Program(编排)菜单
LogWindow(日志窗口)菜单项:打开一个记录输出到stdout 或 stderr 内容的日志窗口。在Windows环境下,如果不带控制台输出启动Weka,日志窗口比较有用。
Memory Usage(内存使用情况)菜单项:打开一个显示内存使用情况的窗口,如果用户发现内存占用过大,可单击窗口右边的GC按钮,启动垃圾回收器,如图1.12所示。
图1.12  ;内存使用情况
Exit(退出)菜单项,关闭Weka。
2. Visualization(可视化)菜单
Plot(散点图)菜单项:画出数据集的二维散点图。
ROC(接收者操作特征)菜单项:显示预先保存的 ROC 曲线。
TreeVisualizer(树可视化工具)菜单项:显示一个有向图,例如,决策树。
GraphVisualizer(图可视化工具)菜单项:显示 XML、BIF 或 DOT 格式的图片,例如,贝叶斯网络。
BoundaryVisualizer(边界可视化工具)菜单项:允许在二维空间中对分类器的决策边界进行可视化。
3. Tools(工具)菜单
Package manager(包管理器)菜单项:允许用户选择安装感兴趣或需要的软件包。
ArffViewer(ARFF查看器)菜单项:一个 MDI 应用程序,使用电子表格的形式来查看ARFF文件。
SqlViewer(SQL查看器)菜单项:通过JDBC 查询数据库的简单窗口,支持连接数据库,执行SQL语句,并显示结果。
Bayes net editor(贝叶斯网络编辑器)菜单项:一个编辑、可视化和学习贝叶斯网络的应用程序。
4. Help(帮助)菜单
Weka homepage(Weka主页)菜单项:打开一个浏览器窗口,显示 Weka主页。
HOWTOs, code snippets, etc. (基本知识、代码段等)菜单项:常用的WekaWiki,含有大量的示例,以及开发和使用Weka的基本知识(HOWTO)。
Weka on Sourceforge(Sourceforge网站的Weka)菜单项:Weka项目在 Sourceforge.net 网站上的主页。
SystemInfo(系统信息)菜单项:列出一些关于Java/Weka的环境信息,如 WEKA_HOME、file.encoding等。
1.3.4  ;系统运行注意事项
1. 使用Weka包管理器
通常术语“包”(package)指的是Java通过包来组织Java类。自Weka 3.7.2开始,Weka引入包的概念,它将额外功能从weka.jar文件中分离,以软件包的形式单独提供。Weka包由各种jar文件、文档、元数据,以及可能的源代码组成。从版本3.7.2开始,早期版本Weka中的许多学习算法和工具就成为单独的包。这样做的最大好处就是简化了Weka的核心系统,允许用户选择安装自己需要或者感兴趣的软件包。它还提供了一种简单机制,用户能够及时使用到Weka爱好者提供的新功能。Weka可以使用很多包,这些包以某种方式添加学习方案,或扩展核心系统的功能,很多包都由Weka团队和第三方提供。
Weka自带软件包的管理机制,能在运行时动态加载包。软件包管理器分为命令行和图形用户界面两种,下面分别予以说明。
假定weka.jar文件在classpath路径中,使用如下命令即可访问包管理器:
java weka.core.WekaPackageManager
运行结果如图1.13所示。详细的命令行包管理器的使用将在第5章讲述。
图1.13  ;命令行包管理器
可以看到,除非是程序员,使用命令行包管理器非常麻烦,要求输入若干命令行选项。因此,普通人员还是使用图形化用户界面进行包管理较为直观方便。
首先启动GUI Chooser窗口,在Tools菜单下,选择Package manager菜单项,或者按Ctrl+U快捷键,则弹出如图1.14所示的包管理器窗口。在命令行包管理系统的全部功能都可以在GUI版本中使用,GUI版本还能够一键安装和卸载多个包。
图1.14  ;包管理器窗口
包管理器窗口沿水平方向分为上、下两部分:顶部是一个软件包的列表,底部是一个小型的浏览器,用于显示当前选择的包信息。
包列表显示了包的名称(Package)、类别(Category)、如已安装则显示目前安装的版本(Installed version)、存储库中可用的最新版本(Repository version),以及包是否已经加载(Loaded)。可以通过单击此列表相应的列标题,按照包名称或类别进行排序。第二次单击相同标题会反转排列顺序。在窗口左上角,有三个单选按钮可以用来过滤列表中显示的内容,默认选中单选按钮All(所有软件包),单选按钮Available用于显示所有可用的尚未安装软件包,单选按钮Installed用于显示已安装的软件包。
如果某一种软件包有多个版本可用,可以选择对应的Repository version列来选取版本。
窗口顶部有三个按钮,分别为Refresh repository cache(刷新库缓存)、Install(安装)和Uninstall(卸载)。第一个按钮用于刷新包信息库中的元数据的缓存副本。注意到第一次使用程序包管理器,不论是GUI还是命令行,都会出现短暂的延迟,这是因为第一次要建立初始缓存。另外两个按钮分别用于安装和卸载包,可以一次安装或删除多个包,可以使用“Shift键+鼠标单击”组合选择范围,也可以使用“Ctrl键+单击”依次添加到选择集合中。在安装和卸载按钮的下面,有一个Ignore dependencies/conflicts(忽略依赖关系和冲突)复选框,选中该复选框可以忽略所选择软件包的依赖关系和可能发生的任何冲突。如果在安装软件包时选中该复选框,将无法安装存在依赖关系的软件包。
下面以wavelet(小波)预处理包的安装和卸载为实例进行说明。
首先安装。选中All单选按钮,显示全部包,选中wavelet包,如图1.15所示。
图1.15  ;选中要安装的包
然后,单击Install按钮进行安装。这时,Weka会弹出一个窗口请用户确认,单击“是(Y)”按钮确认自己的操作,在窗口右上角显示安装进度,经过一小段时间后,所选中的wavelet包对应的Loaded列也会显示Yes字样,说明安装完成。
现在卸载wavelet包。选中Installed单选按钮,显示已安装的包,选中wavelet包,这时,Uninstall按钮从不可用变为可用,如图1.16所示。
图1.16  ;选中要卸载的包
单击Uninstall按钮,会出现一个警告窗口,单击“是(Y)”按钮确认自己的操作,经过一小段时间后,Weka提示需要重新启动以便更改生效,单击“确定”按钮重启Weka。
 ;注意: 有时候,一些Weka用户在使用包管理器时会遇到无法连接问题,所报的错误都是连接超时之类。这是因为包所在的Sourceforge网站有容量限制,该网站因用户众多不堪重负而决定对一些对象的请求数量进行限制,因此有时无法连接。解决办法是,使用怀卡托大学提供的包的元数据。具体步骤分两步,首先找到wekafiles/props目录,在目录中创建一个名称为PackageRepository.props的文本文件,在第一行加入如下代码:
weka.core.wekaPackageRepositoryURL=http://www.cs.waikato.ac.nz/ml/
weka/packageMetaData
然后,重新启动包管理器,上述问题得以解决。
2. 设置CLASSPATH
CLASSPATH环境变量告知Java应该在什么地方去查找Java类。因为Java总是按照一定顺序去查找CLASSPATH环境变量里的类路径,因此,用户应该认真考虑将何种路径放到CLASSPATH的什么位置。
下面以Windows操作系统下添加MySQL驱动程序mysql-connector-java-5.1.6.jar为例进行说明。只有将该jar文件添加到CLASSPATH环境变量中,Weka才能通过JDBC访问MySQL数据库。
在Windows控制面板下,切换至“高级”标签页,然后查找到一个显示“环境变量”的按钮,单击该按钮,出现标题栏为“环境变量”的窗口。根据计算机是仅供一人使用还是多人使用,可以选择将环境变量设置为用户变量还是系统变量。如果不知道该设置为哪一种变量,建议设置为用户变量。如果已经存在CLASSPATH环境变量,则进行编辑,否则,单击“新建”按钮进行新建,按照图1.17所示设置环境输入变量名和变量值。
如果用户的jar文件名称或路径与本书不同,请做相应修改。如果用户还想加入更多的jar文件,请使用分号进行分割。
3. 使用UTF-8数据集或文件
Java本来就支持UTF-8字符集,因此Weka应该能够处理UTF-8字符集的数据集或文件,只要选择合适的字符集就可以。在Windows下,Weka默认使用另一种字符集——Cp1252,可以通过以下方式将文件编码(file encoding)改为“utf-8”,重新启动就能支持汉字。
如果直接在命令行下运行Weka,只要在命令行添加如下参数就行:
-Dfile.encoding=utf-8
如果在“开始”菜单下启动Weka,那么就需要修改RunWEKA.ini文件,步骤如下。
步骤1  ;在Weka安装目录下,找到RunWEKA.ini文件,用任意文本编辑器打开该文件。
步骤2  ;在第32行附近,找到“fileEncoding=Cp1252”的行,将“Cp1252”改为“utf-8”,注意不要有引号;如果没有找到这一行,那么,找到所有的java/javaw命令,在这些命令行中添加“-Dfile.encoding=utf-8”参数。
4. 常见运行错误
1) OutOfMemoryException(内存不足例外)
大多数Java虚拟机只分配一定数额的最大内存来运行Java程序,通常远低于计算机中的内存大小。但是,可以通过设置适当的选项,扩展虚拟内存。例如,可以用命令:
java -Xmx512m ...
设置最大Java堆的大小为512MB。还可以使用Xmx2g将其设置为2GB,这样就足够使用。当然,这还要看计算机的配置,设置过大的内存会影响运行性能。
2) StackOverflowError(栈溢出错误)
这是由于设置的堆栈过小造成的错误。尝试增加虚拟机的堆栈,可以使用下面的命令来增加堆栈空间:
java -Xss512k ...
该命令设置Java的最大堆栈大小为512KB。如果还是不够,请慢慢增加。
3) training and test set are not compatible(训练集和测试集不兼容)
Weka假定训练集和测试集的结构应该完全一致,这意味着训练集和测试集的属性不但在数量上相同,而且在类型上也应该完全一样。对于标称属性,必须确保标签的数量和顺序是完全一致。
使用已经训练好的分类器进行预测,不需要包括任何分类属性的信息。出于速度的原因,Weka不执行任何有关数据集结构的检查,既没有将属性名称从训练空间映射到测试空间,也没有映射标签。在内部,数据集的单行表示为一个double型数组。对于数值属性,这并不构成问题,但对于其他类型的属性,如标称属性,double值表示可用标签列表的索引。标签的不同顺序会导致不同的标签却采用相同的索引表示,这样,预测就不可靠。
解决办法是使用批量过滤(Batch filtering)。如果第二个数据集(通常为测试集)需要与第一个数据集(通常为训练集)处理为具有相同的统计数据,那么就使用批量过滤。
例如,使用Standardize过滤器分别对两个数据集执行标准化操作,肯定会创建两个不同的标准化输出文件,因为如果数据集不同,输入数据就不同,导致均值和标准偏差也就不同。StringToWordVector也同样会产生这个问题,因为在训练集和测试集中单词出现的次数不同,导致单词词典也相应改变,输出两个互不兼容的文件。
为了创建兼容的训练集和测试集,有必要使用批量过滤。启用批量过滤,必须提供额外的命令行参数-b。此外,第一个输入/输出对(-i/-o)初始化过滤器的统计数据,第二个输入/输出对(-r/-s)根据这些统计数据进行处理。
例如,如下的Java调用启用批量过滤:
java weka.filters.unsupervised.attribute.Standardize
 ; -b
 ; -i train.arff
 ; -o train_std.arff
 ; -r test.arff
 ; -s test_std.arff
 ;注意: 上述命令是适用于Linux/UNIX的bash,反斜杠表示续行。如果采用Windows或SimpleCLI,需要去掉反斜杠符号,并在一行内写全命令。
1.4  ;访问数据库
虽然Weka数据集默认可以保存在ARFF格式的文件中,但很多数据挖掘应用都可能要求直接访问数据库,对数据库表的记录进行挖掘,尤其是在数据集非常大的情况下。Weka使用JDBC访问数据库。
1.4.1  ;配置文件
首先做三项准备工作:第一,如果Weka正在运行中,记得先关闭Weka;第二,下载数据库驱动。Weka支持大部分常用数据库,本书采用的数据库是MySQL 5.5.15,使用的JDBC驱动是com.mysql.jdbc.Driver,因此本书下载mysql-connector-java-5.1.6.jar驱动文件,并设置CLASSPATH环境变量指向该驱动,这使得Weka能找到JDBC驱动,如图1.17所示设置环境变量;第三,启动数据库运行,确保已经建立名称为weka的数据库,为该库建立名称为APP的用户,密码自定,并为APP用户赋予查询权限。
要正常访问数据库,根据计算机的实际情况正确修改配置文件是关键。Weka的配置文件名称为DatabaseUtils.props,位于weka.experiment包中。可以从weka.jar或weka-src.jar归档文件获取该配置文件。具体做法是,使用解压缩工具将归档文件解开,在weka/experiment子目录可以找到DatabaseUtils.props配置文件。本书直接在该配置文件的基础上进行修改。
为了方便用户,Weka对常用数据库都提供对应配置文件,在对应配置文件上进行修改要方便得多。例如:
(1) DatabaseUtils.props.hsql:适用HSQLDB 数据库;
(2) DatabaseUtils.props.msaccess:适用MS Access数据库;
(3) DatabaseUtils.props.mssqlserver:适用MS SQL Server 2000数据库;
(4) DatabaseUtils.props.mssqlserver2005:适用MS SQL Server 2005数据库;
(5) DatabaseUtils.props.mysql:适用MySQL数据库;
(6) DatabaseUtils.props.odbc:适用ODBC/JDBC桥连接的数据库;
(7) DatabaseUtils.props.oracle:适用Oracle 10g数据库;
(8) DatabaseUtils.props.postgresql:适用PostgreSQL 7.4数据库;
(9) DatabaseUtils.props.sqlite3:适用sqlite 3.x数据库。
 ;注意: Weka只会去寻找名称为DatabaseUtils.props的配置文件,如果用户想以其余配置文件中的一个(如D

数据挖掘与机器学习——WEKA应用技术与实践 pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:数据挖掘与机器学习——WEKA应用技术与实践