Preface 前 言
世界各地的统计学家和分析师正面临着处理许多复杂统计分析项目的迫切问题。由于人们对数据分析领域的兴趣日益增加,所以R语言提供了一个免费且开源的环境,非常适合学习和有效地利用现实世界中的预测建模方案。随着R语言社区的不断发展及其大量程序包的不断增加,它具备了解决众多实际问题的强大功能。
R编程语言诞生已经有数十年了,它已经变得非常知名,不但被社区的科学家而且被更广泛的开发者社区所熟知。它已经成长为一个强大的工具,可以帮助开发者在执行数据相关任务时生成有效且一致的源代码。由于R语言开发团队和独立贡献者已经创建了良好的文档,所以使用R语言编程并不困难。
进而,你可以使用来自R语言官方网站的程序包。如果你想不断提高自己的专业水平,那么你可能需要阅读在过去几年中已经出版的书籍。你应该始终铭记:创建高水平、安全且国际兼容的代码比初始创建的第一个应用程序更加复杂。
本书的目的是帮助你处理在复杂的统计项目中遇到的一系列可能比较困难的问题。本书的主题包括:学习在运行R语言程序时,如何使用R代码段处理数据,挖掘频繁模式、关联规则和相关规则。本书还为那些具有R语言基础的读者提供了成功创建和自定义最常用数据挖掘算法的技能和知识。这将有助于克服困难,并确保在运用R语言公开可用的丰富程序包开发数据挖掘算法时,R编程语言能够得到最有效的使用。
本书的每一章是独立存在的,因此你可以自由地跳转到任何一章,学习你觉得自己需要对某个特定的话题进行更加深入了解的章节。如果你觉得自己遗漏了一些重要的知识,你可以回顾前面的章节。本书的组织方式有助于逐步拓展你的知识框架。
你需要了解如何编写不同的预测模型、流数据和时间序列数据的代码,同时你还会接触到基于MapReduce算法(一种编程模型)的解决方案。学完本书,你将会为自己所具备的能力(知道哪种数据挖掘算法应用于哪种情况)而感到自信。
我喜欢使用R编程语言进行多用途数据挖掘任务的开发与研究,我非常高兴能与大家分享我的热情和专业知识,帮助大家更有效地使用R语言,更舒适地使用数据挖掘算法的发展成果与应用。
本书主要内容
第1章阐述数据挖掘的概要知识,数据挖掘与机器学习、统计学的关系,介绍数据挖掘基本术语,如数据定义和预处理等。
第2章包含使用R语言编程时,学习挖掘频繁模式、关联规则和相关规则所需的高级且有趣的算法。
第3章帮助你学习使用R语言编写经典分类算法,涵盖了应用于不同类型数据集的多种分类算法。
第4章讲述更多的分类算法,如贝叶斯信念网络、支持向量机(SVM)和k近邻算法。
第5章讲述如何使用流行与经典的算法进行聚类,如k均值、CLARA和谱算法。
第6章介绍与当前行业热点话题相关的高级聚类算法的实现,如EM、CLIQUE和DBSCAN等。
第7章介绍如何应用经典和流行算法来检测现实世界案例中的异常值。
第8章运用最流行、最经典以及一流的算法来讲解流数据、时间序列和序列数据挖掘这3个热点话题。
第9章介绍图挖掘和社交挖掘算法的概要及其他有趣的话题。
第10章介绍应用领域中最流行算法的有趣应用。
附录包含算法和数据结构的列表以便帮助你学习数据挖掘。
学习本书的准备知识
任何一台装有Windows、Linux或者Mac OS系统的个人计算机都可以运行本书给出的代码示例。本书所使用的软件都是开源的,可以从http://www.r-project.org/上免费获取。
读者对象
本书适合对R语言和统计学具有基本知识的数据科学家、定量分析师和软件工程师。本书假定读者只熟悉非常基本的R语言知识,如主要的数据类型、简单的函数和如何来回移动数据。不需要先前熟悉数据挖掘软件包。但是,你应该对数据挖掘的概念和过程有基本的认知。
即使你对于数据挖掘完全是一个新人,你也能够同时掌握基本和高级的数据挖掘算法的实现。你将学习如何从各种数据挖掘算法中选择合适的算法,将这些算法应用于现实世界可用的大多数数据集中的某些特定数据集中。
约定
本书中,你将发现多种文字印刷格式,它们用于对不同类型的信息进行区分。下面是关于这些格式的一些例子以及它们的含义。
文本中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter ID如下所示:“我们可以通过使用include指令来包含其他的上下文。”
新的术语和重要词用粗体标示。例如,在屏幕上、菜单中或者对话框中看到的词将这样出现在文本中:“单击Next按钮进入下一个界面。”
警告或者重要的说明将会出现在这样的图标后面。
提示或技巧将会出现在这样的图标后面。
读者反馈
读者的反馈始终是受欢迎的。让我们知道你如何看待本书——你喜欢哪些内容或者你可能不喜欢哪些内容。读者的反馈对于我们制定使读者真正获得最大效用的主题是十分重要的。
可以通过发送电子邮件至邮箱feedback@packtpub.com,并在电子邮件的主题中提及书名来给我们提供意见。
如果你对于某个主题有专长,或者你有兴趣编写一本书或协助完成一本书,可以到网站www.packtpub.com/authors看一看我们的撰稿指南。
客户支持
既然你现在自豪地拥有了一本Packt书,那么我们可以做很多事来帮助你充分利用你购买的书籍。
下载示例代码
你可以从你在http://www.packtpub.com网站的账户上下载所有你已经购买的Packt书的示例代码。如果你在其他地方购买本书,你可以访问http://www.packtpub.com/support网站并注册,我们将通过电子邮件直接给你发送文件。你也可以在网站https://github.com/batermj/learning-data-mining-with-r找到本书的代码文件。
勘误表
虽然我们已经尽力确保书中内容的准确性,但错误难免会发生。如果你在我们的某一本书中发现错误(可能是文本或者代码中的错误)并向我们报告错误,我们将不胜感激。由此,你可以使其他读者免于困惑并帮助我们改进该书的后续版本。如果你发现任何错误,请通过访问http://www.packtpub.com/submit-errata网站,选择相应图书,单击errata submission form(勘误提交表单)的链接,并输入错误的详细信息以便报告给我们。一旦你的错误得到验证,你的提交将被接受并上传到我们的网站,或者添加到现有的勘误表中,列于该标题下的勘误表部分。任何现有的勘误表均可从http://www.packtpub.com/support网站上选择你所需要的标题进行查看。
盗版行为
因特网上版权材料的盗版行为是所有媒介一直存在的问题。在Packt,我们非常重视对版权和许可证的保护。如果你在网络上遇到任何形式非法复制我们著作的行为,请立刻向我们提供位置地址或者网站名称以便我们能够寻找补救方法。
我们的联系方式是copyright@packtpub.com,请一并附上关于涉嫌盗版材料的链接。
我们非常感谢你对我们的作者以及我们为你带来有价值内容的能力的保护。
问题
如果你对本书有任何方面的问题,可以联系我们(questions@packtpub.com),我们将竭尽所能帮助你解决。
Acknowledgements?致 谢
感谢我的妻子Zurypa Dawletkan和儿子Bakhtiyar。他们支持我利用多个周末和夜晚使得本书得以出版。
我也要感谢Luke Presland,给予我机会来撰写这本书。十分感谢Rebecca Pedley和Govindan K,你们对本书的贡献是巨大的。感谢Jalasha D’costa和其他技术编辑及团队为该书出版付出的努力,使得本书看起来还不错。同时,感谢组稿编辑和技术审校者。
我也要谢谢我的兄弟Bolat Makhabel博士(LinkedIn: BOLATMJ),他给我提供了本书英文版封面的照片,他具有医学背景。照片中的植物名为Echinops(植物学的拉丁名字),哈萨克语称为Lahsa,在中国称为蓝刺头。这种植物用于传统的哈萨克医药,也是我兄弟研究的一部分。
尽管我的专业知识来源于不断的实践,但它也来源于我的母校(清华大学)和戴梅萼教授、赵雁南教授、王家钦教授、Ju Yuma教授以及其他众多老师为我打下的坚实基础。他们的精神鼓励我在计算机科学和技术领域继续努力。我要感谢我的岳父母Dawletkan Kobegen和Burux Takay,感谢他们照顾我的儿子。
最后,我要对我的姐姐Aynur Makhabel和姐夫Akimjan Xaymardan表达我最大的敬意。
目 录 Contents
译者序
作者简介
审校者简介
前言
致谢
第3章 分类
3.1 分类
3.2 通用决策树归纳法
3.2.1 属性选择度量
3.2.2 决策树剪枝
3.2.3 决策树生成的一般算法
3.2.4 R语言实现
3.3 使用ID3算法对高额度信用卡用户分类
3.3.1 ID3算法
3.3.2 R语言实现
3.3.3 网络攻击检测
3.3.4 高额度信用卡用户分类
3.4 使用C4.5算法进行网络垃圾页面检测
3.4.1 C4.5算法
3.4.2 R语言实现
3.4.3 基于MapReduce的并行版本
3.4.4 网络垃圾页面检测
3.5 使用CART算法判断网络关键资源页面
3.5.1 CART算法
3.5.2 R语言实现
3.5.3 网络关键资源页面判断
3.6 木马程序流量识别方法和贝叶斯分类
3.6.1 估计
3.6.2 贝叶斯分类
3.6.3 R语言实现
3.6.4 木马流量识别方法
3.7 垃圾邮件识别和朴素贝叶斯分类
3.7.1 朴素贝叶斯分类
3.7.2 R语言实现
3.7.3 垃圾邮件识别
3.8 基于规则的计算机游戏玩家类型分类和基于规则的分类
3.8.1 从决策树变换为决策规则
3.8.2 基于规则的分类
3.8.3 序列覆盖算法
3.8.4 RIPPER算法
3.8.5 计算机游戏玩家类型的基于规则的分类
3.9 练习
3.10 总结
第4章 高级分类算法
4.1 集成方法
4.1.1 Bagging算法
4.1.2 Boosting和AdaBoost算法
4.1.3 随机森林算法
4.1.4 R语言实现
4.1.5 基于MapReduce的并行版本
4.2 生物学特征和贝叶斯信念网络
4.2.1 贝叶斯信念网络算法
4.2.2 R语言实现
4.2.3 生物学特征
4.3 蛋白质分类和k近邻算法
4.3.1 kNN算法
4.3.2 R语言实现
4.4 文档检索和支持向量机
4.4.1 支持向量机算法
4.4.2 R语言实现
4.4.3 基于MapReduce的并行版本
4.4.4 文档检索
4.5 基于频繁模式的分类
4.5.1 关联分类
4.5.2 基于判别频繁模式的分类
4.5.3 R语言实现
4.5.4 基于序列频繁项集的文本分类
4.6 基于反向传播算法的分类
4.6.1 BP算法
4.6.2 R语言实现
4.6.3 基于MapReduce的并行版本
4.7 练习
4.8 总结
第5章 聚类分析
5.1 搜索引擎和k均值算法
5.1.1 k均值聚类算法
5.1.2 核k均值聚类算法
5.1.3 k模式聚类算法
5.1.4 R语言实现
5.1.5 基于MapReduce的并行版本
5.1.6 搜索引擎和网页聚类
5.2 自动提取文档文本和k中心点算法
5.2.1 PAM算法
5.2.2 R语言实现
5.2.3 自动提取和总结文档文本
5.3 CLARA算法及实现
5.3.1 CLARA算法
5.3.2 R语言实现
5.4 CLARANS算法及实现
5.4.1 CLARANS算法
5.4.2 R语言实现
5.5 无监督的图像分类和仿射传播聚类
5.5.1 仿射传播聚类
5.5.2 R语言实现
5.5.3 无监督图像分类
5.5.4 谱聚类算法
5.5.5 R语言实现
5.6 新闻分类和层次聚类
5.6.1 凝聚层次聚类
5.6.2 BIRCH算法
5.6.3 变色龙算法
5.6.4 贝叶斯层次聚类算法
5.6.5 概率层次聚类算法
5.6.6 R语言实现
5.6.7 新闻分类
5.7 练习
5.8 总结
第6章 高级聚类分析
6.1 电子商务客户分类分析和DBSCAN算法
6.1.1 DBSCAN算法
6.1.2 电子商务客户分类分析
6.2 网页聚类和OPTICS算法
6.2.1 OPTICS算法
6.2.2 R语言实现
6.2.3 网页聚类
6.3 浏览器缓存中的访客分析和DENCLUE算法
6.3.1 DENCLUE算法
6.3.2 R语言实现
6.3.3 浏览器缓存中的访客分析
6.4 推荐系统和STING算法
6.4.1 STING算法
6.4.2 R语言实现
6.4.3 推荐系统
6.5 网络情感分析和CLIQUE算法
6.5.1 CLIQUE算法
6.5.2 R语言实现
6.5.3 网络情感分析
6.6 观点挖掘和WAVE聚类算法
6.6.1 WAVE聚类算法
6.6.2 R语言实现
6.6.3 观点挖掘
6.7 用户搜索意图和EM算法
6.7.1 EM算法
6.7.2 R语言实现
6.7.3 用户搜索意图
6.8 客户购买数据分析和高维数据聚类
6.8.1 MAFIA算法
6.8.2 SURFING算法
6.8.3 R语言实现
6.8.4 客户购买数据分析
6.9 SNS和图与网络数据聚类
6.9.1 SCAN算法
6.9.2 R语言实现
6.9.3 社交网络服务
6.10 练习
6.11 总结
第7章 异常值检测
7.1 信用卡欺诈检测和统计方法
7.1.1 基于似然的异常值检测算法
7.1.2 R语言实现
7.1.3 信用卡欺诈检测
7.2 活动监控——涉及手机的欺诈检测和基于邻近度的方法
7.2.1 NL算法
7.2.2 FindAllOutsM算法
7.2.3 FindAllOutsD算法
7.2.4 基于距离的算法
7.2.5 Dolphin算法
7.2.6 R语言实现
7.2.7 活动监控与手机欺诈检测
7.3.1 OPTICS-OF算法
7.3.2 高对比度子空间算法
7.3.3 R语言实现
7.3.4 入侵检测
7.4 入侵检测和基于聚类的方法
7.4.1 层次聚类检测异常值
7.4.2 基于k均值的算法
7.4.3 ODIN算法
7.4.4 R语言实现
7.5 监控网络服务器的性能和基于分类的方法
7.5.1 OCSVM算法
7.5.2 一类最近邻算法
7.5.3 R语言实现
7.5.4 监控网络服务器的性能
7.6 文本的新奇性检测、话题检测与上下文异常值挖掘
7.6.1 条件异常值检测算法
7.6.2 R语言实现
7.6.3 文本的新奇性检测与话题检测
7.7 空间数据中的集体异常值
7.7.1 路径异常值检测算法
7.7.2 R语言实现
7.7.3 集体异常值的特征
7.8 高维数据中的异常值检测
7.8.1 Brute-Force算法
7.8.2 HilOut算法
7.8.3 R语言实现
7.9 练习
7.10 总结
第8章 流数据、时间序列数据和序列数据挖掘
8.1 信用卡交易数据流和STREAM算法
8.1.1 STREAM算法
8.1.2 单通道法聚类算法
8.1.3 R语言实现
8.1.4 信用卡交易数据流
8.2 预测未来价格和时间序列分析
8.2.1 ARIMA算法
8.2.2 预测未来价格
8.3 股票市场数据和时间序列聚类与分类
8.3.1 hError算法
8.3.2 基于1NN分类器的时间序列分类
8.3.3 R语言实现
8.3.4 股票市场数据
8.4 网络点击流和挖掘符号序列
8.4.1 TECNO-STREAMS算法
8.4.2 R语言实现
8.4.3 网络点击流
8.5 挖掘事务数据库中的序列模式
8.5.1 PrefixSpan算法
8.5.2 R语言实现
8.6 练习
8.7 总结
第9章 图挖掘与网络分析
9.1 图挖掘
9.1.1 图
9.1.2 图挖掘算法
9.2 频繁子图模式挖掘
9.2.1 gPLS算法
9.2.2 GraphSig算法
9.2.3 gSpan算法
9.2.4 最右路径扩展和它们的支持
9.2.5 子图同构枚举算法
9.2.6 典型的检测算法
9.2.7 R语言实现
9.3 社交网络挖掘
9.3.1 社区检测和Shingling算法
9.3.2 节点分类和迭代分类算法
9.3.3 R语言实现
9.4 练习
9.5 总结
第10章 文本与网络数据挖掘
10.1 文本挖掘与TM包
10.2 文本总结
10.2.1 主题表示
10.2.2 多文档总结算法
10.2.3 最大边缘相关算法
10.2.4 R语言实现
10.3 问答系统
10.4 网页分类
10.5 对报刊文章和新闻主题分类
10.5.1 基于N-gram的文本分类算法
10.5.2 R语言实现
10.6 使用网络日志的网络使用挖掘
10.6.1 基于形式概念分析的关联规则挖掘算法
10.6.2 R语言实现
10.7 练习
10.8 总结
附录 算法和数据结构