《R数据科学实战》(第2版)是一本针对数据科学的实践指南,重点介绍了使用R语言和统计程序包处理结构化或表格数据的相关技术,也着重介绍了机器学习的技术。但它的独特之处在于专门讨论了数据科学家在项目中的角色、所管理的交付结果,甚至设计演示文稿等主题。本书不仅研究了如何编写模型,还讨论了如何与不同的团队协作,如何将业务目标转化为度量值,以及如何组织工作和编写报告等。如果你想学习如何使用R语言来从事数据科学家的工作,那么建议你阅读本书。
我们认识Nina Zumel 和Johm Mount已经很多年了,曾经邀请他们到奇点大学(Singularity University)和我们一起教书,他们是我们所知道的最优秀的两位数据科学家。我们定期推荐他们关于交叉验证和影响编码(也称为目标编码)的原创性研究。实际上,他们在本书第8章中讲授了影响编码的相关理论,并通过自己的R程序包vtreat实现了其应用。
在《R数据科学实战》(第2版)这本书中,作者用了一些篇幅描述了什么是数据科学、数据科学家是如何解决问题的,以及对他们工作的描述。其中,包括对经典监督学习方法(如线性回归和逻辑回归的详细描述。我们喜欢本书的调研式风格,以及使用的大量的竞赛获奖方法和程序包的示例(如随机森林和xgboost)。本书涵盖了非常有用的、可共享的经验和实践建议。我们注意到,在本书中甚至包括了我们自己使用过的一些技巧,例如使用随机森林变量重要性进行初始变量的筛选。
总体而言,这是一本很棒的图书,我们强烈推荐。
-Jereny Howard和Rachel Thomas
《R数据科学实战(第2版)》是我们在自学时所希望拥有的书,它所汇集的主题和技能被称为数据科学。本书也是我们想分发给客户和同行的书。它的目的是解释统计学、计算机科学和机器学习等学科中对数据科学至关重要的内容。
数据科学利用了来自经验科学、统计学、报表技术、分析技术、可视化技术、商业智能、专家系统、机器学习、数据库、数据仓库、数据挖掘和大数据技术的各种工具。正是因为我们有太多的工具,所以需要- - 个涵盖所有具的指导原则。数据科学本身与这些工具和技术的区别就在于数据科学的中心目标是将有效的决策模型部署到生产环境中。
我们的目标是从务实的、面向实践的角度来展示数据科学。我们通过聚焦在完全成功的真实数据上的示例来实现这一目标, 本书展示了超过10个重要的数据集。我们认为这种方法能举例说明我们真正想要达到的教学目标,并能演示实际项目中所需要的各种准备步骤。
在《R数据科学实战(第2版)》中,我们讨论了实用的统计学和机器学习的概念,包括具体的代码示例,并探索了与非专业人员的合作和沟通方式。如果你觉得这些话题中没有新颖的主题,那么我们希望本书内容能为你最近没有想到的其他一-两个 话题提供一些启示。
关于本书
本书是关于数据科学的: 一个使用统计学、机器学习以及计算机科学的结果来创建预测模型的领域。由于数据科学涉猎广泛,因此在本书中讨论并概述一些我们采用的方法是很重要的。
数据科学概述
统计学家William S. Cleveland 将数据科学定义为一个比统计学本身更大的跨学科领域。我们将数据科学定义为可以将假设和数据转化为可操作的预测的过程。典型的预测分析目标包括预测谁将赢得选举、哪些产品放在一-起可以畅销、哪些贷款将违约,以及哪些广告将被点击。数据科学家负责获取和管理数据,选择建模技术,编写代码并验证结果。
因为数据科学涉及很多学科,所以它常常是一种“第二种选择”。我们遇到的许多最好的数据科学家都是从程序员、统计学家、商业智能分析师或科学家开始的。通过在他们已掌握的技能上增加一-些技术,他们成为了优秀的数据科学家。正是这一观察推动了本书的编写:我们通过在真实数据上实际操作所有常见项目的具体步骤来介绍数据科学家所需要的实用技能。对读者而言,有些步骤你会比我们更了解,有些你会很快学会,而有些你可能需要进一步研究。
数据科学的许多理论基础都来自统计学。但我们所熟知的数据科学因受到技术和软件工程方法论的巨大影响,很大程度上是在计算机科学和信息技术驱动的群体中发展起来的。我们可以列举出数据科学的一些工程学特性:
●亚马逊的产品推荐系统
●谷歌的广告评估系统
●领英的联系人推荐系统
●推特的热门话题
●沃尔玛的消费者需求预测系统
以上这些系统有很多共同的特点:
●所有的这些系统都建立在海量的数据集上。这并不是说它们都属于大数据的领域。但如果它们仅仅使用小的数据集,那么相信没有一个系统会成功。为了管理数据,这些系统需要来自计算机科学的理论:数据库理论、并行编程理论、流数据技术和数据仓库系统。
●这些系统大部分都是在线或者实时的。不同于制作一份报告或分析, 数据科学团队会部署一个决策程序或评分程序来直接做决策或直接向大量终端用户展示结果。生产部署是解决问题的最后机会,因为数据科学家不会随时都来解释这些缺陷。
●所有这些系统都可能会出现某些无法预知的错误。
●这些系统中没有一个与原因有关。它们的成功在于找到了有用的关联性,并且它们不被用来区分正确的因果关系。
本书所教授的内容是建立这些系统所需要的原理和工具,涉及成功交付此类项目的常见任务、步骤和工具。我们的重点是全过程项目管理、与他人合作,并向非专业人士展示结果。
本书的路线图
本书包括以下内容:
●数据科学管理的全过程。数据科学家必须具备衡量和检测他们自身项目的能力。
●许多数据科学项目中使用的最强大的统计和机器学习的技术。本书包含众多使用R编程语言执行实际数据科学工作的实际操作。
●为所有利益相关者(管理者、用户、部署团队等)准备演示文稿。
要知道,你必须能用具体的术语向不同的受众解释你的工作,而不是坚持使用某- -特定领域的技术词汇。当然,也不能随便把数据科学项目的结果扔到一边,置之不理。
我们把书中的主题按照能增进对数据科学理解的顺序进行了排列。所有材料的组织如下:第I部分描述了数据科学过程的基本目标和技术,主要强调切协作和数据。第1章讨论了数据科学家是如何工作的。第2章展示了如何将数据加载到R中,以及如何开始使用R.
第3章讲授了如何在数据中找寻所需的信息,以及描述和理解数据的几个重要步骤。数据必须为分析做好准备,并且数据问题需要被修正。第4章展示了如何修正第3章发现的问题。
第5章介绍了数据准备的一一个步骤:基本数据整理。数据并不总是以最适合分析的形式或“形态”提供给数据科学家。R提供了许多工具来管理和重构数据以获得正确的结构。本章涵盖了这些内容。
第II部分从描述和准备数据转向建立有效的预测模型。第6章提供了从业务需求到技术评估和建模技术的映射关系。它涵盖了用于评估模型性能的标准指标和程序,以及一项专用技术一- LIME. LIME用来解释由一个模型做出的具体预测。
第7章介绍了基本的线性模型:线性回归、逻辑回归和正则线性模型。线性模型是许多分析任务要用到的重要工具,并且对于识别关键变量和深入了解问题的内部结构有极大的帮助。深入了解这些模型对数据科学家来说极其有价值。
第8章暂时脱离了建模任务,涵盖了更高级的数据处理的内容:如何为建模步骤规整杂乱的真实世界数据。因为要理解这些数据处理方法是如何工作的,需要对线性模型和模型评估指标有一-定的理解, 所以这个话题被放到第II部分。
第9章介绍了无监督模型的方法:-一种不使用 带标签的训练数据的建模方法。第10章涵盖了提高预测性能、修复特定建模问题的更高级的建模方法。涉及的主题包括基于决策树的集成方法、广义相加模型和支持向量机。
第1II部分,从建模回到了流程,展示了如何交付结果。第11章演示了如何管理、记录和部署自己的模型。第12章介绍如何为不同的听众创建有效的演示幻灯片。
附录包括了有关R.统计学和其他可用工具的技术细节。附录A展示了如何安装R,如何启动工作,以及如何使用其他工具(如SQL)。附录B是对一些关键统计学概念的复习。
这些内容是按照目标和任务来组织的,用到的工具会-并介绍。每章的主题都涉及一个有相关数据集的项目。在学习本书的过程中,你将完成许多实质性的项目。本书提到的所有数据集都存储在本书的GitHulb资料库中: ht:ithbo com/WinVector/PDSwR2。你可以将整个资料库作为单个zip文件(GitHub的服务之- ) 下载,或者将资料库复制到你自己的机器上,或者根据需要复制单个文件。
本书的读者对象
为了使用书中示例,首先需要对R和统计学有一些了解。我们建议你准备- -些优秀的入门]书籍。在开始阅读本书时不需要精通R,但需要对它有所了解。如果你想从R学起,我们推荐你阅读Jonathan Crroll(Maning.20108)的Beyond Spreadsheets with R或者Robert Kabacoff的R inAction(现在已经发行了第2版: ht:/:/www.mmminn comkabacof2),以及本书的相关网站,:tpc:p/pwwwaoethouinet) 对于统计学,我们推荐你阅读David Freedman、Robert Pisani 和Roger Purves合作编写的Statitics(第四版) (WW.Norton & Company, 2007)。
概括而言,我们希望你:
●对工作示例感兴趣。通过研究这些示例,你至少学会一种方法来实现一个完整项目的所有步骤。你必须愿意尝试简单的脚本和编程以便获取本书的全部价值。对于我们提到的每一一个例子,你应该尝试一-些变化并预期有一些变化会失败(当你的变化不起作用时)而有一些变化会成功(当你的变化优于我们的示例分析时)。
●对R统计系统比较熟悉,并愿意使用R语言编写简短的脚本和程序。除了Kabacoff外,我们在附录C中也列出了几本好书。我们会在R中处理具体的问题。你需要运行示例并参考附加文档以了解我们没有演示的命令的变化。
●对基本的统计学概念比较熟悉,比如概率、平均值、标准差和显著性。我们将根据需要介绍这些概念,但在运行示例时,你要根据自己的情况阅读额外的参考资料以更好地理解示例。我们将定义- -些术语并 且参考一些主题资料和有用的博客,但我们也要求你自行在网上搜索某些主题。
●准备一台计算机(macOS. Linux 或Wndows)来安装R和其他工具,以及用来下载工具和数据集的互联网连接。强烈建议你亲自运行那些示例,在不同方法上使用R的help 0来查看相应的帮助文档,并阅读- -些附加的参考文献。本书中未包含的内容
●本书不是一本 R手册。我们使用R来具体说明数据科学项目的重要步骤。我们会讲授大量关于R的知识来帮助你完成书中的示例,但不熟悉R的话就需要参考附录A,以及许多优秀的R书籍和可用的教学视频。
●本书不是一系列的案例研究。我们强调方法理论和技术。书中给出的示例数据和代码只是为了确保我们给出的是具体且可用的建议。
●本书不是一本大数据的书。我们认为最有意义的数据科学是发生在可管理的数据库或者文件规模(通常比内存大些,但仍然易于管理)。要产生那些能将度量的各种条件映射到相关结果的有价值的数据往往需要昂贵的成本,而这往往限制了数据规模。但对于某些报表生成、数据挖掘和自然语言处理,你需要进一步探索大数据的领域。
●本书不是一本理论书籍。我们不聚焦在任何一种技术的细致理论描述上。数据科学讲究灵活性,有许多可用的好技术。如果某种技术看起来能解决你手头的问题,我们会深入探讨它。即使是在我们的文本中,相比于漂亮的排版公式,我们也更喜欢使用R代码符号,因为R代码可以直接使用。
● 本书不是一本机器学习的技术书。我们只关注已经在R中实现的方法。对于每种方法,我们会践行操作理论并展示其优点。我们通常不讨论如何实现它们(即使实现起来很容易),因为优秀的R实现已经是可用的。
代码约定和下载
本书是以示例为导向的。我们在GitHub 资料库里提供了准备好的示例数据(tptp/ithub.con/WinVector/PDSwR2),同时附有R代码并且有原始的链接。你可以在线浏览此资料库,也可以将其复制到自己的计算机上。我们也以zip文件的方式提供了产生所有结果的代码和几乎所有能在本书中找到的图pst:/github.com/WmnVectrPDSwR2/awmaterCodeExampleszip),因为从zip文件里复制代码比从书上复制和粘贴要容易得多。关于下载、安装和使用所有推荐的工具和示例数据的指令可以在附录A中的A1节中找到。我们鼓励你在阅读文本时尝试运行R代码的示例。即使我们讨论的是数据科学中比较抽象的内容,也会用具体的数据和代码来举例说明。每个章节都包含引用特定数据集的链接。R代码的编写不需要任何命令行提示符,例如>(它通常在运行R代码时出现,但不能作为新的R代码输入)。
内联结果是以R的注释字符#作为前缀。在大多数情况下,初始源代码已经被重新格式化;我们添加了换行符并重新编写行首缩进以便适应书中可用的页面空间。在极少数情况下,代码清单中还包括了行连接标记(一)。另外,当在文本中描述代码时,会将源代码中的注释删除。而许多代码清单中包含了代码注释,用于强调重要的概念。
如何使用本书
我们建议最好在阅读本书的同时至少运行一些示例。为此,建议你安装R、RSudio,以及一些书中常用的程序包。附录A的A.1节中分享了关于如何执行此操作的说明。我们也建议你通过ht:p/ithb.con/Wine/totrPDSwcR22的GitHub资料库或
本书封底上的二维码下载所有的示例,包括代码和数据。
下载本书的辅助资料/资料库
可以使用“download as zip”GitHub这-特性,将资料库的内容以zip文件的格式下载下来,如下图所示,下载来自GitHulb 网址http/gi/nb com/WinVector/PDSwR2的内容。
GitHub下载示例
点击Download ZIP链接应该会下载程序包的压缩版本(或者你可以尝试直接访问ZIP资料的链接: ht:tp/gitbo com/WinVectorPDSwR2/archive/master.zip)。或者,如果你熟悉在命令行中运行Git资源管理系统,可以使用Bash shell命令(不是R命令):git clone https://github.com/WinVector/PDSwR2.git
在本书所有示例中,我们假设读者己经复制了资料库或下载并解压了其中的内容。这会生成- -个名为PDSwR2的目录。我们讨论的路径将会从这个目录开始。比如,如果我们提到使用PDSwR2UCICar目录,则意味着无论你在哪里解压了PDSwR2目录,我们都会对UCICar子目录下的内容进行操作。你可以通过setwd0命令来更改R的工作目录(请在R控制台中输入help(setwd)来获得更多帮助信息)。当然,如果你使用的是RStudio工具,那么也能通过文件浏览界面的gear/more菜单选项来设置工作目录。
本书中的所有代码示例都包含在PDSwR2/CodeExamples目录中,因此不需要输入代码(尽管你需要在自己定义的数据目录中运行它们一而不是在 下载代码的目录中执行它们。
本书并没有提供完整的练习,只是提供了- -些示例。我们建议读者学习示例并尝试修改示例。例如,在2.3.1节中,我们展示了如何预测收入与受教育程度和性别的关系,尝试将收入与就业状况和年龄联系起来也是有意义的。实际上,数据科学要求你对编程、函数、数据、变量和关系有- -定的好奇心,越早在自己的数据中发现不同,就越容易对它们进行处理。
目 录
第Ⅰ部分 数据科学引论
第1 章 数据科学处理过程 2
1.1 数据科学项目中的角色 3
1.2 数据科学项目的阶段 5
1.2.1 制定目标 6
1.2.2 收集和管理数据 7
1.2.3 建立模型 9
1.2.4 评价和评判模型 10
1.2.5 展现结果和编制文档 12
1.2.6 部署模型 14
1.3 设定预期 14
1.4 小结 15
第2 章 从R和数据入门 16
2.1 R入门 17
2.1.1 安装R、工具和示例 18
2.1.2 R编程 18
2.2 处理文件中的数据 28
2.2.1 使用来自文件或URL的结构良好的数据 28
2.2.2 使用R处理非结构化的数据 33
2.3 使用关系数据库 37
2.4 小结 50
第3 章 探索数据 52
3.1 使用概要统计方法发现问题 54
3.2 使用图形和可视化方法发现问题 59
3.2.1 采用可视化的方法检查单变量的分布 61
3.2.2 采用可视化的方法检查两个变量之间的关系 71
3.3 小结 87
第4 章 管理数据 89
4.1 清洗数据 90
4.1.1 特定领域的数据清洗 90
4.1.2 处理缺失值 92
4.1.3 自动处理缺失值变量的vtreat程序包 96
4.2 数据转换 99
4.2.1 归一化处理 101
4.2.2 中心化和定标 102
4.2.3 针对偏态分布和广泛分布的对数转换 107
4.3 用于建模和验证的抽样处理 109
4.3.1 用于测试和训练的分组数据集 110
4.3.2 创建一个样本分组列 111
4.3.3 记录分组 112
4.3.4 数据来源 113
4.4 小结 114
第5 章 数据工程与数据整理 115
5.1 数据选取 118
5.1.1 设置行子集和列子集 118
5.1.2 删除不完整的数据的记录 124
5.1.3 对行进行排序 128
5.2 基础数据转换 133
5.2.1 添加新列 133
5.2.2 其他简单操作 139
5.3 汇总转换 140
5.4 多表之间数据的转换 144
5.4.1 快速地对两个或多个排序的数据框执行合并 144
5.4.2 合并多个表中数据的主要方法 152
5.5 重新整理和转换数据 159
5.5.1 将数据从宽表转换为窄表 159
5.5.2 将数据从窄表转换为宽表 164
5.5.3 数据坐标 169
5.6 小结 169
第Ⅱ部分 建模方法
第6 章 选择和评价模型 172
6.1 将业务问题映射为机器学习任务 173
6.1.1 分类问题 173
6.1.2 打分问题 175
6.1.3 分组:目标未知情况下的处理 176
6.1.4 从问题到方法的映射 178
6.2 模型评估 179
6.2.1 过拟合 179
6.2.2 模型性能的度量 183
6.2.3 分类模型的评价 184
6.2.4 评估打分模型 195
6.2.5 概率模型的评估 198
6.3 使用局部可解释的、与模型无关的解释技术(LIME)来解释模型预测 206
6.3.1 LIME:自动的完整性检查 208
6.3.2 LIME实现过程:一个小样本 208
6.3.3 LIME用于文本分类 216
6.3.4 对文本分类器进行训练 219
6.3.5 对分类器的预测进行解释 221
6.4 小结 227
第7 章 线性和逻辑回归 228
7.1 使用线性回归 229
7.1.1 了解线性回归 229
7.1.2 建立一个线性回归模型 235
7.1.3 预测 235
7.1.4 发现关系并抽取建议 241
7.1.5 阅读模型摘要并刻画系数质量 243
7.1.6 线性回归要点 250
7.2 使用逻辑回归 251
7.2.1 理解逻辑回归 251
7.2.2 构建逻辑回归模型 256
7.2.3 预测 257
7.2.4 从逻辑回归模型中发现关系并提取建议 262
7.2.5 解读模型摘要并刻画系数 264
7.2.6 逻辑回归的要点 272
7.3 正则化 272
7.3.1 一个准分离的例子 273
7.3.2 正则化回归方法的类型 278
7.3.3 使用glmnet程序包实现
正则化回归 280
7.4 小结 291
第8 章 高级数据准备 292
8.1 vtreat程序包的作用 293
8.2 KDD和KDD Cup 2009 295
8.2.1 使用KDD Cup 2009
数据 296
8.2.2 “莽撞”做法 298
8.3 为分类操作准备基本数据 301
8.3.1 变量的分数框 303
8.3.2 正确使用处理计划 308
8.4 适用于分类的高级数据准备 309
8.4.1 使用mkCrossFrame-
CExperiment() 309
8.4.2 建立模型 312
8.5 为回归建模准备数据 317
8.6 掌握vtreat程序包 320
8.6.1 vtreat的各个阶段 320
8.6.2 缺失值 322
8.6.3 指示变量 323
8.6.4 影响编码 324
8.6.5 处理计划 326
8.6.6 交叉框 327
8.7 小结 332
第9 章 无监督方法 333
9.1 聚类分析 334
9.1.1 距离 335
9.1.2 数据准备 338
9.1.3 使用hclust()进行层次聚类 341
9.1.4 k-均值算法 356
9.1.5 给聚类分派新的点 363
9.1.6 聚类的要点 365
9.2 关联规则 366
9.2.1 关联规则概述 366
9.2.2 示例问题 368
9.2.3 使用arules程序包挖掘关联规则 369
9.2.4 关联规则要点 379
9.3 小结 379
第10 章 高级方法探索 381
10.1 基于决策树的方法 383
10.1.1 基本决策树 384
10.1.2 使用bagging方法改进预测 387
10.1.3 使用随机森林方法进一步改进预测 390
10.1.4 梯度增强树 397
10.1.5 基于决策树的模型的要点 407
10.2 使用广义相加模型学习非单调关系 407
10.2.1 理解GAM 408
10.2.2 一维回归示例 409
10.2.3 提取非线性关系 414
10.2.4 在真实数据集上使用GAM 416
10.2.5 使用GAM实现逻辑回归 420
10.2.6 GAM要点 422
10.3 使用支持向量机解决“不可分”的问题 422
10.3.1 使用SVM解决问题 424
10.3.2 理解SVM 429
10.3.3 理解核函数 431
10.3.4 支持向量机和核方法要点 434
10.4 小结 434
第Ⅲ部分 结果交付
第11 章 文档编制和部署 438
11.1 预测热点 440
11.2 使用R markdown生成里程碑文档 441
11.2.1 R markdown是什么 441
11.2.2 knitr技术详解 444
11.2.3 使用knitr编写Buzz数据文档和生成模型 446
11.3 在运行时文档编制中使用注释和版本控制 449
11.3.1 编写有效的注释 449
11.3.2 使用版本控制记录历史 451
11.3.3 使用版本控制探索项目 457
11.3.4 使用版本控制分享工作 460
11.4 模型部署 464
11.4.1 使用Shiny部署演示 466
11.4.2 将模型部署为HTTP服务 467
11.4.3 以导出模式部署模型 470
11.4.4 本节要点 472
11.5 小结 472
第12 章 有效的结果展现 474
12.1 将结果展现给项目出资方 476
12.1.1 概述项目目标 477
12.1.2 陈述项目结果 479
12.1.3 补充细节 480
12.1.4 提出建议并讨论未来工作 482
12.1.5 针对项目出资方的演示文稿中的关键点 482
12.2 向最终用户展现模型 483
12.2.1 概述项目目标 483
12.2.2 展现如何将模型应用于用户的工作流程 484
12.2.3 展现如何使用模型 486
12.2.4 最终用户演示文稿中的关键点 488
12.3 向其他数据科学家展现你的工作 488
12.3.1 介绍问题 488
12.3.2 讨论相关工作 489
12.3.3 讨论你的方法 490
12.3.4 讨论结果和未来的工作 491
12.3.5 向其他数据科学家展现的要点 493
12.4 小结 493
附录A 使用R和其他工具 495
A.1 安装 495
A.1.1 安装工具 495
A.1.2 R的程序包系统 500
A.1.3 安装Git 501
A.1.4 安装RStudio 501
A.1.5 R资源 502
A.2 开始使用R语言 503
A.2.1 R语言的基本特性 505
A.2.2 R语言的主要数据类型 509
A.3 在R语言中使用数据库 515
A.3.1 使用查询生成器运行数据库查询 515
A.3.2 如何从关系角度思考数据 520
A.4 小结 522
附录B 重要的统计学概念 523
B.1 分布 524
B.1.1 正态分布 524
B.1.2 R语言中对分布的命名约定的汇总 529
B.1.3 对数正态分布 530
B.1.4 二项式分布 534
B.1.5 更多用于数据分布的R工具 541
B.2 统计理论 541
B.2.1 统计的哲学思想 541
B.2.2 A/B检验 544
B.2.3 检验的功效 548
B.2.4 专业的统计检验 550
B.3 从统计学视角观察数据的示例 552
B.3.1 采样偏差 553
B.3.2 遗漏变量偏差 556
B.4 小结 562
附录C 参考文献 563