基本信息
- 原书名:Mastering Predictive Analytics with R
- 作者: (希)鲁伊·米格尔·福特(Rui Miguel Forte)
- 译者: 吴今朝
- 丛书名: 数据科学与工程技术丛书
- 出版社:机械工业出版社
- ISBN:9787111553540
- 上架时间:2017-10-23
- 出版日期:2017 年1月
- 开本:16开
- 版次:1-1
- 所属分类:计算机 > 软件与程序设计 > 综合 > 高级程序语言设计
教材

内容简介
目录
前言
第1章 准备预测建模1
1.1 模型1
1.1.1 从数据中学习2
1.1.2 模型的核心组成部分5
1.1.3 我们的第一个模型:k近邻5
1.2 模型的类型7
1.2.1 有监督、无监督、半监督和强化学习模型7
1.2.2 参数化和非参数化模型8
1.2.3 回归和分类模型8
1.2.4 实时和批处理机器学习模型9
1.3 预测建模的过程9
1.3.1 定义模型的目标9
1.3.2 收集数据10
1.3.3 选取模型11
1.3.4 数据的预处理12
1.3.5 特征工程和降维19
1.3.6 训练和评估模型22
1.3.7 重复尝试不同模型及模型的最终选择25
前言
与此同时,很多新进入该领域的人士很快发现其中有很多陷阱需要克服。实际上,没有哪个学位足以把一位学生或从业者训练为成功的预测建模者。该领域依赖于很多学科,例如计算机科学、数学和统计学。当前,进入该领域的人们不仅只在其中的一门学科有比较强的背景,还往往会比较专精于其他学科。在给研究生和从业者们讲授了有关本书材料的几次课程之后,我发现学员们反复表达的两个最大担忧是对编程和数学的恐惧。有意思的是,对这两者的表达几乎总是互斥的。预测分析学实际上是一种实践性的学科,但同时也是一种具备较强理论基础的学科,这些理论基础的知识对于从业者是很关键的。因此,掌握预测分析需要一系列不同的技能,从编写良好的软件到实现一种新技术或对数据进行预处理,再到理解某个模型的假设条件,如何有效地训练该模型,如何对该模型出现的问题进行诊断,以及如何调整模型的参数以获得更好的结果。
讨论到这里,很自然地会反向思考预测分析学作为一个领域实际会覆盖的内容。事实上,该领域和机器学习、数据挖掘、商业分析学、数据科学等其他相关领域的边界是比较模糊的。本书中会用到的定义非常宽泛。对于本书的主题而言,预测分析学是一个领域,它利用数据建立模型来预测未来我们感兴趣问题的结果。当然,它和机器学习领域会有很大的重叠,机器学习更多地研究从数据中学习的程序和算法。这种重叠的情况对于数据挖掘(以从数据中提取知识和模式为目标)也同样成立。数据科学正在迅速成为覆盖所有这些领域的综合术语,它还包括了其他主题,例如呈现数据分析结果的信息可视化,围绕在实际环境中部署模型的业务概念,以及数据管理。本书会着重于机器学习,但我们不会覆盖学习可行性的理论探索,也不会讲解着眼于从无特定预测目标的数据中寻找模式和聚类的无监督学习方法。取而代之,我们会探索像时间序列这样的一些主题,通常在机器学习的教材里不会讲解它们。
无论对于学习预测分析学还是解决实际环境中的问题,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)作为树的装袋的一种特例进行介绍。
序言
本书是一本比较全面的预测建模教材,覆盖了最常见的一些技术,例如逻辑回归、神经网络、支持向量机、隐马尔可夫模型、时间序列分析、推荐系统等。本书属于Packt出版社系列图书中的Mastering级别,是有一定难度和深度的高级教程。
作为一位兼具科研和产业经验的专家,作者很巧妙地把握了理论和实践之间的平衡。他的做法是,先以比较通俗的方式讲解理论背景,再通过一些实际案例的直观示范来帮助读者理解相关的理论和方法。这样就让读者既能对各种预测分析方法的理论基础有更深入的认识,又能掌握在实际工作中运用这些技术的方法。此外,作者还提供了大量的参考资料和在线资源,供学有余力的读者进一步提高。
在翻译完成《基于R语言的自动数据收集:网络抓取和文本挖掘实用指南》一书后,我就在机械工业出版社编辑推荐的后续书单中挑出了这本书。我之所以会对这本书感兴趣,是因为之前那本书的核心内容是如何在线抓取数据,而现在这本书的核心内容则是如何对数据进行预测建模,两本书结合起来,就构成了一个完整的技术体系。
在多年的应用开发经历中,我一直更喜欢这种个人能掌控完整技术链条的工作风格,相信很多科研工作者和小团队的技术带头人也会有同感。其实这种风格和团队合作并不矛盾。实际上,只有具备了掌控全局的能力,才能提高团队合作的效率,降低沟通成本。
在之前那本书的读者评论里,有一条我想分享出来:“这本书值得一读,作者很诚实,确实一本书不能解决你所有的问题,但是可以给你一些思路,顺着这个思路不断扩展自己的知识,最后娴熟运用。阅读纸质书最大的好处就是系统性,书中很多知识都通过网络资源零散地学过,但始终不成体系,本书能给你一个很好的网络数据获取的系统框架。”
确实,学习技术的过程是无止境的,但一套科学的体系能让读者把握全局,少走弯路。本书就比较系统地讲解了有监督学习的预测建模技术。
作为译者,我想给读者的一条建议就是多动手。在技术领域,看懂了书不等于掌握了技术。读者如果没有经过实际的应用,对书中内容的理解不但达不到足够的深度,而且很容易遗忘。针对自己感兴趣的某个问题,先把模型设计出来,把代码调通,再对模型进行优化,最后得到理想的结果,这个过程是非常关键的。
比如在之前那本书的GitHub讨论区里就有一个很有意思的话题,有一位读者在尝试抓取某个新闻下的所有评论时遇到了问题,后来才发现是iFrame元素的原因,进而引出了一些原书中没有讲到的技术。在和我一起分析讨论并调通了代码后,这位读者觉得收获很大。
照例,我也给本书开通了一个GitHub讨论区,链接是:https://github.com/coderLMN/ MasteringPredictiveAnalyticsWithR/issues,欢迎读者去提出问题、解答和建议,参与讨论。
另外需要说明的一点是,我在译稿中加入了不少译者注,目的是帮助读者理解某些比较晦涩的概念、公式和代码。但是因为个人水平有限,译者注里的解释和说明难免会有不严谨甚至错误的地方,请读者多多指正。
最后,我要感谢我的家人在本书翻译过程中的付出和耐心。因为有他们的支持,我才能以一种精耕细作的方式完成本书的翻译工作。
吴今朝