内容简介
本书介绍了关联规则、分类、聚类分析、异常值探测、数据流挖掘、时间序列、图形挖掘、网络分析、文本挖掘和网络分析等流行的数据挖掘算法,给出了具体算法以及这些算法的伪代码和R语言实现。本书可以作为统计学、计算机等相关专业高年级本科生或研究生的教材,也可以作为数据分析和挖掘等相关研究人员的参考资料。
作者简介
作者简介 About the AuthorBater Makhabel(LinkedIn: BATERMJ和GitHub: BATERMJ)为系统构架师,生活在中国北京、上海和乌鲁木齐等地。他于1995至2002年之间在清华大学学习,并获得计算机科学和技术的学士和博士学位。他在机器学习、数据挖掘、自然语言处理(NLP)、分布系统、嵌入系统、网络、移动平台、算法、应用数学和统计领域有丰富的经验。他服务过的客户包括CA Technologies、META4ALL和EDA(DFR的一家子公司)。同时,他也拥有在中国创办公司的经历。
Bater的生活开创性地在计算机科学和人文科学之间取得了平衡。在过去的12年中,他在应用多种先进计算机技术于文化创作方面获得了经验,其中一项是人机界面,通过哈萨克语与计算机系统进行交互。他一直和他工作领域中的其他作家有合作,但是本书是他的正式作品。
About the Reviewers 审校者简介Jason H.D. Cho在伊利诺伊大学香槟分校获得计算机硕士学位,现在在攻读博士。他对应用自然语言处理和大数据解决医学信息问题特别感兴趣。尤其是,他希望能在社交媒体上找到病人关心的健康需求。他曾带领一个学员小组在美国一项主要的保健竞赛(CIMIT)中跻身前10名。Jason也为自然语言处理和大数据研究领域的文章进行审稿。
Gururaghav Gopal现在在Paterson证券公司工作,其职位是量化分析员、开发人员、交易员和分析师。以前,他是一个和电商行业相关的数据科学咨询师。他曾经在印度韦洛尔的韦洛尔理工大学教授大学生和研究生模式识别课程。他曾经在一些研究机构做过研究助理,包括IFMR和NAL。
Gururaghav获得了电子工程的学士学位、计算机科学和工程的硕士学位,并在IFMR辅修金融工程和风险管理方面的课程。之后,他便在金融相关领域工作。他获得过多个奖项并以他的名字发表过多篇文章。他对编程、教学和咨询感兴趣。在闲暇时间,他会听音乐。
Vibhav Kamath获得了位于孟买的印度理工学院工业工程和运筹学的硕士学位,并具有位于浦那的工学院的电子工程学士学位。大四期间,他对算法和数学模型产生了兴趣,从此便进入分析领域。Vibhav现在在班加罗尔的一家IT服务公司工作,其工作的一部分内容是应用R编程语言基于优化和线性回归技术来开发统计和数学模型。他曾经审阅过Packt出版社出版的两本R语言图书:R Graphs Cookbook, Second Edition和Social Media Mining with R,他曾经应用SAS、SQL和Excel/VBA做过数据可视化,为一家银行开发过仪表盘程序。
过去,Vibhav从事过离散时间仿真和语言处理(均基于MATLAB)等方面的学术工作。他涉猎过机器人领域,建立了一个浏览魔方的机器人Micromouse。除了分析和编程之外,Vibhav喜欢阅读小说类读物。空闲时,他打乒乓球、板球和网球,实在无聊时就玩田字格游戏(数独和数谜)。可以通过邮件vibhav.kamath@hotmail.com或者领英in.linkedin.com/in/vibhavkamath与他联系。
Hasan Kurban于2012年在布卢明顿的印度大学获得计算机硕士学位,现在在该校的信息与计算机学院攻读博士学位,专业为计算机科学同时辅修统计学。他的研究方向为数据挖掘、机器学习和统计学。
目录
译者序
作者简介
审校者简介
前言
致谢
第1章 预备知识 1
1.1 大数据 2
1.2 数据源 3
1.3 数据挖掘 4
1.3.1 特征提取 4
1.3.2 总结 4
1.3.3 数据挖掘过程 5
1.4 社交网络挖掘 7
1.5 文本挖掘 9
1.5.1 信息检索和文本挖掘 10
1.5.2 文本挖掘预测 10
1.6 网络数据挖掘 10
1.7 为什么选择R 12
1.8 统计学 12
1.8.1 统计学与数据挖掘 13
1.8.2 统计学与机器学习 13
1.8.3 统计学与R语言 13
1.8.4 数据挖掘中统计学的局限性 13
1.9 机器学习 13
1.9.1 机器学习方法 14
1.9.2 机器学习架构 14
1.10 数据属性与描述 15
1.10.1 数值属性 16
1.10.2 分类属性 16
1.10.3 数据描述 16
1.10.4 数据测量 17
1.11 数据清洗 18
1.11.1 缺失值 18
1.11.2 垃圾数据、噪声数据或异常值 19
1.12 数据集成 19
1.13 数据降维 20
1.13.1 特征值和特征向量 20
1.13.2 主成分分析 20
1.13.3 奇异值分解 20
1.13.4 CUR分解 21
1.14 数据变换与离散化 21
1.14.1 数据变换 21
1.14.2 标准化数据的变换方法 22
1.14.3 数据离散化 22
1.15 结果可视化 23
1.16 练习 24
1.17 总结 24
第2章 频繁模式、关联规则和相关规则挖掘 25
2.1 关联规则和关联模式概述 26
2.1.1 模式和模式发现 26
2.1.2 关系或规则发现 29
2.2 购物篮分析 30
2.2.1 购物篮模型 31
2.2.2 Apriori算法 31
2.2.3 Eclat算法 35
2.2.4 FP-growth算法 37
2.2.5 基于最大频繁项集的GenMax算法 41
2.2.6 基于频繁闭项集的Charm算法 43
2.2.7 关联规则生成算法 44
2.3 混合关联规则挖掘 46
2.3.1 多层次和多维度关联规则挖掘 46
2.3.2 基于约束的频繁模式挖掘 47
2.4 序列数据集挖掘 48
2.4.1 序列数据集 48
2.4.2 GSP算法 48
2.5 R语言实现 50
2.5.1 SPADE算法 51
2.5.2 从序列模式中生成规则 52
2.6 高性能算法 52
2.7 练习 53
2.8 总结 53
第3章 分类 54
3.1 分类 55
3.2 通用决策树归纳法 56
3.2.1 属性选择度量 58
3.2.2 决策树剪枝 59
3.2.3 决策树生成的一般算法 59
3.2.4 R语言实现 61
3.3 使用ID3算法对高额度信用卡用户分类 61
3.3.1 ID3算法 62
3.3.2 R语言实现 64
3.3.3 网络攻击检测 64
3.3.4 高额度信用卡用户分类 66
3.4 使用C4.5算法进行网络垃圾页面检测 66
3.4.1 C4.5算法 67
3.4.2 R语言实现 68
3.4.3 基于MapReduce的并行版本 69
3.4.4 网络垃圾页面检测 70
3.5 使用CART算法判断网络关键资源页面 72
3.5.1 CART算法 73
3.5.2 R语言实现 74
3.5.3 网络关键资源页面判断 74
3.6 木马程序流量识别方法和贝叶斯分类 75
3.6.1 估计 75
3.6.2 贝叶斯分类 76
3.6.3 R语言实现 77
3.6.4 木马流量识别方法 77
3.7 垃圾邮件识别和朴素贝叶斯分类 79
3.7.1 朴素贝叶斯分类 79
3.7.2 R语言实现 80
3.7.3 垃圾邮件识别 80
3.8 基于规则的计算机游戏玩家类型分类和基于规则的分类 81
3.8.1 从决策树变换为决策规则 82
3.8.2 基于规则的分类 82
3.8.3 序列覆盖算法 83
3.8.4 RIPPER算法 83
3.8.5 计算机游戏玩家类型的基于规则的分类 85
3.9 练习 86
3.10 总结 86
第4章 高级分类算法 87
4.1 集成方法 87
4.1.1 Bagging算法 88
4.1.2 Boosting和AdaBoost算法 89
4.1.3 随机森林算法 91
4.1.4 R语言实现 91
4.1.5 基于MapReduce的并行版本 92
4.2 生物学特征和贝叶斯信念网络 92
4.2.1 贝叶斯信念网络算法 93
4.2.2 R语言实现 94
4.2.3 生物学特征 94
4.3 蛋白质分类和k近邻算法 94
4.3.1 kNN算法 95
4.3.2 R语言实现 95
4.4 文档检索和支持向量机 95
4.4.1 支持向量机算法 97
4.4.2 R语言实现 99
4.4.3 基于MapReduce的并行版本 99
4.4.4 文档检索 100
4.5 基于频繁模式的分类 100
4.5.1 关联分类 100
4.5.2 基于判别频繁模式的分类 101
4.5.3 R语言实现 101
4.5.4 基于序列频繁项集的文本分类 102
4.6 基于反向传播算法的分类 102
4.6.1 BP算法 104
4.6.2 R语言实现 105
4.6.3 基于MapReduce的并行版本 105
4.7 练习 106
4.8 总结 107
第5章 聚类分析 108
5.1 搜索引擎和k均值算法 110
5.1.1 k均值聚类算法 111
5.1.2 核k均值聚类算法 112
5.1.3 k模式聚类算法 112
5.1.4 R语言实现 113
5.1.5 基于MapReduce的并行版本 113
5.1.6 搜索引擎和网页聚类 114
5.2 自动提取文档文本和k中心点算法 116
5.2.1 PAM算法 117
5.2.2 R语言实现 117
5.2.3 自动提取和总结文档文本 117
5.3 CLARA算法及实现 118
5.3.1 CLARA算法 119
5.3.2 R语言实现 119
5.4 CLARANS算法及实现 119
5.4.1 CLARANS算法 120
5.4.2 R语言实现 120
5.5 无监督的图像分类和仿射传播聚
收起全部↑
前言/序言
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表达我最大的敬意。