预测分析:R语言实现导读-阿里云开发者社区

开发者社区> 华章出版社> 正文

预测分析:R语言实现导读

简介:
前  言

预测分析以及更一般意义上的数据科学当前正处于被追捧的热潮中,因为像垃圾邮件过滤、单词补全和推荐引擎这样的预测性技术已经被广泛运用于日常生活。这些技术现在不仅越来越被我们所熟悉,还赢得了我们的信任。在计算机处理能力和软件方面(例如R语言及其大量专用的扩展包)的发展产生了这样的局面:用户经过培训就可以使用这些工具,而无需具备统计学的高级学位,也不需要使用公司或大学实验室专用的硬件。技术的成熟度和基础软硬件的可用性结合起来,让很多该领域的从业者倍感兴奋,他们感到可以为自己的领域和业务设计一些能产生重要影响的工具,事实也确实如此。
与此同时,很多新进入该领域的人士很快发现其中有很多陷阱需要克服。实际上,没有哪个学位足以把一位学生或从业者训练为成功的预测建模者。该领域依赖于很多学科,例如计算机科学、数学和统计学。当前,进入该领域的人们不仅只在其中的一门学科有比较强的背景,还往往会比较专精于其他学科。在给研究生和从业者们讲授了有关本书材料的几次课程之后,我发现学员们反复表达的两个最大担忧是对编程和数学的恐惧。有意思的是,对这两者的表达几乎总是互斥的。预测分析学实际上是一种实践性的学科,但同时也是一种具备较强理论基础的学科,这些理论基础的知识对于从业者是很关键的。因此,掌握预测分析需要一系列不同的技能,从编写良好的软件到实现一种新技术或对数据进行预处理,再到理解某个模型的假设条件,如何有效地训练该模型,如何对该模型出现的问题进行诊断,以及如何调整模型的参数以获得更好的结果。
讨论到这里,很自然地会反向思考预测分析学作为一个领域实际会覆盖的内容。事实上,该领域和机器学习、数据挖掘、商业分析学、数据科学等其他相关领域的边界是比较模糊的。本书中会用到的定义非常宽泛。对于本书的主题而言,预测分析学是一个领域,它利用数据建立模型来预测未来我们感兴趣问题的结果。当然,它和机器学习领域会有很大的重叠,机器学习更多地研究从数据中学习的程序和算法。这种重叠的情况对于数据挖掘(以从数据中提取知识和模式为目标)也同样成立。数据科学正在迅速成为覆盖所有这些领域的综合术语,它还包括了其他主题,例如呈现数据分析结果的信息可视化,围绕在实际环境中部署模型的业务概念,以及数据管理。本书会着重于机器学习,但我们不会覆盖学习可行性的理论探索,也不会讲解着眼于从无特定预测目标的数据中寻找模式和聚类的无监督学习方法。取而代之,我们会探索像时间序列这样的一些主题,通常在机器学习的教材里不会讲解它们。
无论对于学习预测分析学还是解决实际环境中的问题,R语言都是一个优秀的平台。它是一个开源项目,有一个持续快速增长的用户社区。在编写本书时,它和Python是全世界数据科学家最常用的两种语言。它有很多适用于不同建模技术和应用领域的扩展包,其中很多可以通过连接到Comprehensive R Archive Network (CRAN)从R语言平台本身直接获取。该语言还有很多在线资源,从教程到在线课程都包含在内。我们尤其要提到优秀的交叉验证式论坛(http://stats.stackexchange.com/)以及R-bloggers 网站(http://www.r-bloggers.com/),该网站包含了大量来自不同博客的关于R语言应用的文章。对于那些对R语言有点生疏的读者,我们提供了一个免费在线教程章节,它是从我们在AUEB学生的课程讲义演化而来的。
本书的主要任务是在(强调直觉及实践而不是理论的)低端入门教程和(专注于数学、细节和严谨性的)高端学术教材之间的鸿沟上架起桥梁。另一个同等重要的目标是给读者灌输一些良好的实践经验,比如学习如何适当地测试和评估一个模型。我们还要强调一些重要的概念,例如偏误-方差权衡和过拟合,这些概念在预测建模中是普遍存在的,并会在不同模型中以多种形式反复出现。
从编程的角度来说,虽然我们假定你已经熟悉R语言,不过还是会详细解释并讨论每个代码示例,以便读者提高他们的自信心,循序渐进。尽管如此,在学习的过程中,或者至少在转到下一章之前,实际运行代码的重要性是如何强调都不为过的。为了尽可能让这个过程顺利进行,我们已经为教材中的所有章节提供了代码文件,其中包含了教材中所有的代码示例。此外,我们还在很多地方编写了自己对于特定技术的简单实现方法。典型的两个示例是第4章里的口袋感知器算法和第7章的AdaBoost自适应增强方法。在某种程度上,这么做是为了鼓励用户学习如何编写他们自己的函数,而不是完全依赖于已有的实现方法,因为并不是所有方法都有现成的函数可用。
重现能力是数据分析的一项关键技能,而且它并不限于教育领域。因此,我们大量使用了可自由获取的数据集并尽力在需要随机数生成器的地方运用特定的种子值。最后,我们尽可能尝试利用相对小规模的数据集,以确保读者在阅读本书时运行代码不需要等待太长的时间或被迫寻求更好的硬件。我们要提醒你,在真实世界里,耐心是一种非常有益的美德,因为你感兴趣的大部分数据集会比我们学习本书时用到的更大。
每章的结尾是两个或多个实际的建模案例,每章的开始则是一些理解新模型或技术所必需的理论和背景知识。虽然不避讳用数学解释重要的细节,但是我们在这方面很慎重,相关的介绍适可而止,以确保读者能理解相关的基本概念就可以了。这样做符合本书的理念,即弥补入门教程和涉及更多细节的学术教材之间的差距。具备高中数学背景知识的读者可以确信,他们能够借助基本的数学知识完整地学习本书的所有内容。学习所需的关键技能是简单微积分(例如简单微分)、概率论的关键概念(例如均值、方差、相关系数),以及重要的概率分布(例如二项分布和正态分布)。虽然我们不提供这方面的教程,但在前面几章我们的确是循序渐进的。为了照顾那些数学爱好者的需求,我们经常会以提示的形式提供额外的技术细节,并给出一些参考资料作为所讨论内容的自然延伸。
有时候,我们需要给出某个概念的直观解释,以节省篇幅,避免另辟一章专门讨论不必要的纯理论。在这么做的时候(例如对第4章里的反向传播算法),我们会确保前后的衔接性,让读者能具备坚实的基础知识来进一步掌握更详细的内容。同时,还会给出精心挑选的参考文献,其中很多都是可读性好而且可以免费获取的文章、论文或在线教材。当然,我们会在任何必要的地方引用重要的教材。
本书没有练习题,但是鼓励你把好奇心发挥到极致。好奇心对于预测建模者来说是一种巨大的天赋。我们从中获取了分析数据的很多网站上都有我们没有研究到的其他大量数据集。我们偶尔还会讲解如何创建人工数据来演示某个特定技术背后的概念验证过程。很多用来创建和训练模型的R语言函数都有一些其他调优参数是本书中没有时间讲解的。用到的扩展包也往往会包含和我们讲解的函数相关的其他函数,正如用到的扩展包本身也往往会有其他替代包可用。所有这些都是进一步研究和实验的途径。要掌握预测分析学,认真学习和个人的探索及练习都是同等重要的。
学生在该领域的一个普遍诉求,是用额外的实例来模拟有经验的建模者针对数据集所遵循的实际过程。在现实中,可信的模拟过程从分析开始后可能会持续很多小时。这是因为花在预测建模上的大部分时间都用来研究数据、尝试新特征和预处理步骤,以及对结果试验不同的模型。简而言之,正如我们在第1章中将要看到的,探索、试验和误差是有效分析的关键组成部分。编写一本讲解关于每个数据集的错误或不成功方案的书是完全不现实的。相反,强烈推荐读者将本书中的所有数据分析过程视为改进的起点,并自己延续这个过程。好的思路是尝试把其他章节讲解的技术运用于特定数据集,以便观察其他方法是否有效。从简单地给某个输入特征运用不同的变换方式到采用另一章里讲解的完全不同的模型,任何尝试都是可以的。
作为最后一个提示,我们要指出,创建美观规范的图来呈现数据分析结果是一项重要的技能,尤其是在职场中。虽然R语言的基础绘图能力覆盖了基本的需求,但它往往缺乏美观性。因此,除了用分析代码中的某些函数产生的特定图形之外,我们会用ggplot2包绘图。虽然我们不提供这方面的教程,但是本书中包括的所有产生绘图的代码都在配套的代码文件里,希望用户可以从中受益。ggplot2包的一个很有用的在线参考资料是“the Cookbook for R”(http://www.cookbook-r.com/Graphs)网站上有关图形的章节。
本书内容
第1章会讲解统计模型的通用语言和在对这些模型进行分类时所依据的一些重要差别,由此开启我们的学习之旅。本章的亮点是对预测建模过程的探索,我们会通过它展示第一个模型,即k近邻(k Nearest Neighbor,kNN)模型。
第2章会介绍预测数量值最简单且最著名的方法。本章的重点是理解线性回归的假设,以及一些可以用来评估训练模型质量的诊断工具。此外,本章还会涉及正则化的重要概念,它可以用于避免预测模型常见的一种瑕疵—过拟合(over fitting)。
第3章会对前一章里线性模型的思想进行扩展,方法是引入广义线性模型的概念。虽然这类模型有很多示例,但本章的重点是逻辑回归这样一个针对分类问题的流行方法。我们还会探讨该模型扩展到针对多类别的情况,发现该方法对于二元分类(binary classification)的效果最好。
第4章会讲解能够处理回归及分类两种任务的一种仿生模型。神经网络有很多种,而本章会重点关注多层感知网络(multilayer perceptron network)。神经网络是复杂的模型,本章的主要关注点是理解在训练过程中起作用的一组不同的配置和优化参数。
第5章会通过学习支持向量机来掌握非线性模型的问题。在这部分,我们会通过利用最大边缘分离(maximum margin separation)来尝试以几何方式拟合我们的训练数据,以探索对分类问题进行思考的另一种方法。本章还会介绍交叉验证(cross-validation)这一评估和优化模型的基本技术。
第6章讲解决策树(decision tree)这样另一类已经成功运用于回归和分类等问题的模型。决策树的类型有很多种,本章会介绍一批不同的训练算法,例如CART和C5.0。我们还可以看到,树形方法具有独特的优点,例如内建的特征选择、支持缺失数据和类别变量,以及非常易于解释的输出。
第7章不同于以往章节,本章会采用一种迂回方式,不会讲解新类型的模型,而是尝试解答如何把不同模型有效地结合起来的问题。我们会讲解装袋(bagging)和增强(boosting)这两种著名的技术,并会把随机森林(random forest)作为树的装袋的一种特例进行介绍。
第8章讲解的是机器学习研究领域的一个活跃领域,即概率图模型。这些模型通过一个图结构把变量之间的条件性独立关系(conditional independence relation)进行编码,已经成功运用于从计算机视觉到医疗诊断等很多领域的问题中。本章会学习它的两种主要表现形式,即朴素贝叶斯(Na阅读准备
运行本书代码的唯一硬性要求就是安装R。它可以从http://www.r-project.org/自由获取,并可以在所有主流操作系统上运行。本书中的代码已经在R的3.1.3版本上测试过。
所有的章节都至少会引入一个R基础安装包里没有预装的新扩展包。我们不会在教材中专门讲解安装R包的过程,但是如果某个包当前没有安装在你的系统里,或它需要更新,你就可以利用install.packages()函数来安装它。例如,下面的命令会安装tm包:

我们使用的所有包都可以在CRAN上获取。下载和安装它们以及获取我们在实例中使用的开源数据集都需要Internet连接。最后,虽然不是绝对必需,但我们要推荐你养成利用集成开发环境(Integrated Development Environment,IDE)进行R语言编程的习惯。有个很棒的IDE是RStudio (http://www.rstudio.com/),它是开源的。
读者人群
本书是为预测建模相关领域的从业者中的新秀和老手编写的。本书大部分的内容已经在研究生、专业人士和R语言培训的授课中使用过,因此它在策划的时候就已经把这些学员的情况都考虑到了。读者必须熟悉R语言,不过即便是那些从来没有接触过这种语言的人,也能够通过阅读在线教程的章节掌握必要的背景知识。不熟悉R语言的读者至少要接触过某些编程语言,例如Python。那些具备MATLAB背景的人会发现切换到R语言相当容易。正如之前提到的,本书对数学的要求是非常适度的,只需要中学数学的某些元素,例如均值和方差的概念及基础的微分。
本书约定
在本书中,你会看到用来区分不同类型信息的多种文本样式。这里是一些关于这些样式的示例及其含义的解释。
代码段的样式设置如下:

新术语和重要的关键字会用粗体显示。
警告或重要的注解会出现在像这样的一个方框内部。
提示和小技巧的样式是这样的。
下载样例代码
你可以从http://www.packtpub.com通过个人账号下载你所购买的所有Packt书籍的样例代码文件。如果你从其他地方购买了本书,你可以访问http://www.packtpub.com/support并完成账号注册,以便直接通过电子邮件获得相关文件。
你也可以访问华章图书官网http://www.hzbook.com/,通过注册并登录个人账号,下载本书中的源代码。
致谢
每段伟大的探险背后都有一个精彩的故事,本书的写作也不例外。正是因为有了很多人的贡献本书才得以面世。我要感谢我在AUEB教过的很多学生,他们的投入和支持简直是铺天盖地的。可以确信的一点是,我从他们那里学到的东西和他们从我这里学到的一样多,甚至更多。我还要感谢Damianos Chatziantoniou策划在希腊开设领先的研究生数据科学课程。Workable公司是一个大熔炉,在这里我能和才华横溢且激情澎湃的工程师们并肩工作,从事有益于全球商业的激动人心的数据科学项目。为此,我要感谢我的同事们,特别是两位点石成金的公司创始人Nick和Spyros。
我要感谢Subho、Govindan、Edwin和Packt出版社所有同仁的专业和耐心。我要对很多给予我鼓励和激励的朋友表达我永恒的感谢。我的家人和亲友们在本项目中给予了我不可思议的支持。特别地,我要感谢我的父亲Libanio,他鼓励我从事科学事业,还有我的母亲Marianthi,她对我的信心一直远远超过其他任何人。感谢我的妻子Despoina耐心而坚定地站在我一边,即使这本书让我在她首次怀孕的时候难以陪伴在旁。最后也同样重要的是,在本书写作的收尾阶段,我的小女儿在我身边安睡并天真无邪地守望着我。她帮助我的方式是无法用语言描述的。




目  录

第1章 准备预测建模
1.1 模型
1.2 模型的类型
1.3 预测建模的过程
1.4  性能衡量指标
1.5 小结
第2章 线性回归
2.1 线性回归入门
2.2 简单线性回归
2.3 多元线性回归
2.4 评估线性回归模型
2.5 线性回归的问题
2.6 特征选择
2.7    小结
第3章 逻辑回归61
3.1 利用线性回归进行分类61
3.2 逻辑回归入门63
3.2.1 广义线性模型63
3.2.2 解释逻辑回归中的系数64
3.2.3 逻辑回归的假设65
3.2.4 最大似然估计65
3.3 预测心脏病66
3.4 评估逻辑回归模型69
3.4.1 模型的偏差70
3.4.2 测试集的性能73
3.5 利用lasso进行正则化73
3.6 分类指标74
3.7 二元逻辑分类器的扩展76
3.7.1 多元逻辑回归76
3.7.2 有序逻辑回归80
3.8 小结83
第4章 神经网络84
4.1 生物神经元84
4.2 人工神经元85
4.3 随机梯度下降86
4.3.1 梯度下降和局部极小值88
4.3.2 感知器算法88
4.3.3 线性分离91
4.3.4 逻辑神经元92
4.4 多层感知器网络92
4.5 预测建筑物的能源效率95
4.6 重新进行玻璃类型预测99
4.7 预测手写数字102
4.8 小结106
第5章 支持向量机108
5.1 最大边缘分类108
5.2 支持向量分类111
5.3 核和支持向量机113
5.4 预测化学品的生物降解115
5.5 交叉验证118
5.6 预测信用评分120
5.7 用支持向量机进行多类别分类123
5.8 小结123
第6章 树形方法124
6.1 树形模型的直观印象124
6.2 训练决策树的算法126
6.2.1 分类和回归树126
6.2.2 回归模型树131
6.2.3 CART分类树131
6.2.4 C5.0133
6.3 在合成的二维数据上预测类别归属关系134
6.4 预测纸币的真实性136
6.5 预测复杂的技能学习138
6.5.1 在CART树里对模型参数进行调优140
6.5.2 树模型中的变量重要性141
6.5.3 回归模型树实用示例142
6.6 小结143
第7章 集成方法144
7.1 装袋144
7.1.1 边缘和袋外观测数据145
7.1.2 用装袋预测复杂技能学习146
7.1.3 用装袋预测心脏病146
7.1.4 装袋的局限性150
7.2 增强151
7.3 预测大气中伽马射线的辐射152
7.4 利用增强算法预测复杂技能学习156
7.5 随机森林157
7.6 小结159
第8章 概率图模型161
8.1 图论入门161
8.2 贝叶斯定理163
8.3 条件性独立163
8.4 贝叶斯网络164
8.5 朴素贝叶斯分类器165
8.6 隐马尔可夫模型172
8.7 预测启动子基因序列174
8.8 预测英语单词里的字母特征179
8.9 小结182
第9章 时间序列分析184
9.1 时间序列的基本概念184
9.2 一些基本的时间序列185
9.2.1 白噪声185
9.2.2 随机漫步187
9.3 平稳性188
9.4 平稳时间序列模型189
9.4.1 移动平均模型189
9.4.2 自回归模型192
9.4.3 自回归移动平均模型193
9.5 非平稳时间序列模型194
9.5.1 整合自回归移动平均模型194
9.5.2 自回归条件异方差模型195
9.5.3 广义自回归条件异方差模型195
9.6 预测强烈地震196
9.7 预测猞猁的诱捕199
9.8 预测外汇汇率200
9.9 其他时间序列模型202
9.10 小结203
第10章 主题建模204
10.1 主题建模概况204
10.2 隐含狄式分布205
10.2.1 狄式分布205
10.2.2 生成过程208
10.2.3 拟合LDA模型209
10.3 对在线新闻报道的主题进行建模210
10.3.1 模型稳定性215
10.3.2 找出主题数量216
10.3.3 主题分布217
10.3.4 单词分布219
10.3.5 LDA扩展模型220
10.4 小结220
第11章 推荐系统222
11.1 评分矩阵222
11.2 协同过滤225
11.2.1 基于用户的协同过滤225
11.2.2 基于商品的协同过滤228
11.3 奇异值分解228
11.4 R语言和大数据231
11.5 预测电影和笑话的推荐232
11.6 加载和预处理数据233
11.7 对数据进行探索234
11.7.1 评估二元的top-N推荐236
11.7.2 评估非二元的top -N推荐239
11.7.3 评估每种预测方法241
11.8 推荐系统的其他方法242
11.9 小结243

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接