首页>参考读物>计算机科学与技术>综合

机器学习实践:数据科学应用与工作流的开发及优化
作者 : [美]安德鲁·凯莱赫(Andrew Kelleher),亚当·凯莱赫(Adam Kelleher )著
译者 : 陈子墨 刘瀚文 译
出版日期 : 2020-04-08
ISBN : 978-7-111-65136-9
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 242
开本 : 16
原书名 : Machine Learning in Production: Developing and Optimizing Data Science Workflows and Applications
原出版社: Pearson Education Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书以作者在BuzzFeed的工作经验为基础,将机器学习和计算机工程巧妙地结合在一起。第一部分的基本原则是数据科学世界坚实的基础;第二部分介绍现实问题中的常用算法,帮助读者迅速解决实际问题,避免被数据误导、产生结论错误;第三部分则着眼于工程实践,基于工程角度突破瓶颈,让算法能够在现实条件中得以实现。

图书特色

机器学习实践
数据科学应用与工作流的开发及优化 
[ 美 ]  安德鲁·凯莱赫(Andrew Kelleher)
      亚当·凯莱赫(Adam Kelleher )     著
            陈子墨  刘瀚文  译

图书前言

本书大部分内容是Andrew和Adam一起在BuzzFeed工作时写的。Adam是数据科学家,Andrew是工程师,他们在同一个团队中工作了很长时间。最让人感到惊奇和有趣的是,他俩不只是工作伙伴,还是三胞胎中的一对兄弟。
写这本书的想法是2014年8月我们参加了纽约的PyGotham之后产生的。当时有好几场相对广义的关于“数据科学”的讨论,我们发现许多数据科学家的职业生涯始于对事物的好奇心和学习新事物的兴奋感。他们会发现一些新工具,在这之中发展出自己偏爱使用的某种技术或算法,然后将这些工具应用到他们正在处理的问题上。每个人都喜欢用自己最熟悉的方式去解决问题,这种做法很高效。比如使用神经网络(我们将会在第14章中讨论),因为它是一个更为高效的解决工具。我们想通过为数据科学家,尤其是初入职场的新人提供一个完整的工具箱,从而推动数据科学的发展。有人可能会质疑,第一部分的内容和误差分析实际上比第三部分讨论的技术更重要。但实际上第三部分才是我们写这本书的动力。如果数据集中充斥着大量噪声或系统误差,那么算法几乎是不可能成功的。我们希望这本书可以提供一些正确的参考来帮助读者解决在实际项目中遇到的问题,从而帮助他们在职业生涯中取得成功。
机器学习领域、计算机科学领域甚至数据科学领域不乏好书,但我们希望本书可以作为一本比较严谨、全面的数据科学入门书籍。这是一本根据我们自身实践经验写成的轻量级工具书,我们尽可能规避了研究型的问题。假如作为一名初级数据科学家,你正在解决研究型问题,那这可能已经超出了我们关心的范围。
数据科学有一个与机器学习分开的关键部分,那就是工程学。这一点我们会在第三部分着重讨论。我们会讨论你有可能遇到的问题并提供解决它们所需要的基础知识。可以这么说,第三部分基本上可作为计算机科学速成课程(初级课程)参考。因为即使你知道在开发什么,但在落实到生产的路上依然有很多注意事项,这意味着必须要理解这些知识本身,而不仅仅是把它们当作某种工具。
本书受众
在过去几年优秀工程师一直有很大缺口。2008年在一个会议上我们第一次听到了“意外程序员”这个词。它用来描述那些不是科班出身的工程师—他们只是误打误撞到了那个位置并开始做相关工作。十多年后的今天对于开发人员依然有大量需求,并且这种需求开始逐渐扩展到数据科学家这个职位上。谁将充当“意外数据科学家”的角色?通常情况下是开发人员或者是物理或数学专业本科生,虽然他们没有接受过太多数据科学家所需的正规培训,但拥有成功所需的好奇心和雄心,对工具箱有需求。
本书旨在打造一套速成课程,通过从头到尾过一遍数据项目的基本开展步骤来鼓励数据科学家使用手里的数据而非工具,并以此作为起点。由数据本身驱动的数据科学是成功的关键。数据科学最大的公开秘密就是,虽然建模很重要,但数据科学最基础的日常工作依然是数据的查询、聚合和可视化。许多行业仍然处在收集和使用数据的比较原始的阶段,因此快速交付一些复杂度较低的东西是非常有意义的。
建模很重要,但也很难。我们相信敏捷开发的原则是可以应用到数据科学中的,我们将在第2章中讨论这一点。比如我们可以从最小的解决方案开始,有一个基于聚合数据的点子,当数据管道稳定且成熟的时候套用一些模型慢慢延伸它,然后在你手头没有那么多别的重要的事情时慢慢改进模型。我们会提供基于此方法的真实案例。
本书内容
在开头我们提供了一些数据科学领域的基本背景。第一部分的第1章是了解数据行业的引子。
第2章将数据科学置于敏捷开发流程下考虑,这是一种有助于保持小范围有效开发的理念。让自己不去尝试最新的机器学习框架或基于云平台的工具很难,但从长远来看是值得的。
第3章提供了关于误差分析的基本介绍。许多数据科学都在做一些简单的统计报告,如果不理解统计误差,则很有可能会得出无效的结论。误差分析是一项基本技能,并且是一项必备技能。
第4章提供了一些编码现实世界数据的方法。这会让我们提出一些现实世界中被数据驱动的问题。回答这类问题的框架是假设检验,我们会在第5章中说明。
到现在为止我们还没有看到很多图表,所以还缺乏将分析结果与外部(非技术)世界沟通的渠道。我们会在第6章中解决这个问题。我们会把讨论限定在比较小的范围,主要针对那些我们知道如何计算误差的数量图,或者那些使数据可视化产生细微差别的图。虽然这些工具不像d3的交互式可视化图那样酷炫(d3非常值得学习),但它们也是与非技术人员沟通的基础。
在介绍了基本的数据处理方法之后,我们将继续研究更高级的概念,也就是第二部分。我们首先在第7章中简要介绍数据结构,然后在第8章中介绍机器学习的基本概念。到这时候你已经有了一些可以上手的方法来衡量对象的相似性。
从现在开始我们已经可以进行简单的机器学习了。第9章中,我们开始引入回归的概念并从一个最重要的模型线性回归开始。在如今这个神经网络和非线性机器学习时代,从介绍这种简单模型开始确实有些奇怪,但线性回归绝对是一个相当优秀的模型。正如稍后将详述的那样,它是可解释的、稳定的,能提供一个非常好的基准。另外,通过一些小技巧,它也可以用于非线性情况,并且最近的研究结果表明,多项式回归(线性回归的简单变形)在一些应用中的表现甚至可以胜过深度前馈网络!
接下来我们还描述了回归模型中的另一个主力模型:随机森林。随机森林依赖“bagging”技术,这是一种基于统计技巧的非线性算法,可以为各种不同的问题提供出色的基准。如果想要一个简单的模型来开始项目并且线性回归不太合适,那么随机森林是一个不错的候选。
在介绍了回归并提供了一些机器学习工作流程的基本案例之后,将继续学习第10章。有很多方法都适用于向量和图形数据,我们在这部分提供关于图的基本背景知识和贝叶斯推断的简要介绍。在下一章我们会深入研究贝叶斯推断和因果关系。
第11章的内容既非常规又比较难。从因果关系的角度来看,贝叶斯网络是最直观(尽管不一定最简单)的因果图。因此我们引入贝叶斯网络的基础介绍并把它作为理解因果推断的基础。第12章中,我们以基础贝叶斯网络理解PCA和潜在因子模型的其他变体。主题建模是隐变量模型的一个重要例子,我们提供了一个基于新数据集的详细例子。
作为下一个以数据为中心的章节,我们将重点放在第13章中的因果推断问题上。它的重要性是无法低估的。数据科学通常的目标是告知企业如何行事,假设数据能告诉你某个行为的结果,只有当分析出因果关系而不仅仅是相关关系时,这个结果才会成立。从这个意义上说,理解因果关系是数据科学家工作的基础。不幸的是,为了尽量保持工作范围最小化,它也常常第一个被削减。在规划项目时,平衡利益相关者的期望是很重要的,而因果推断工作可能需要花一些时间。我们希望让数据科学家做出明智的决策,而不是轻易接受相关结果。
在最后一个以数据为中心的章节(第14章)中,我们提供了更先进的机器学习技术的一些细微差别。我们使用神经网络作为讨论过拟合和模型能力的工具。重点应放在尽可能使用简单的解决方案,抵制以神经网络作为第一模型开始的冲动。简单的回归方法几乎总能为第一个解决方案提供足够好的基线。
到目前为止,我们介绍的都是背景知识,这是开始数据科学项目的起点,但不是我们的主要关注点,至少现在不是。本书的第三部分也是最后一部分将深入研究硬件、软件及其组成的系统。
第15章首先全面介绍计算机硬件。该章介绍一个我们日常会用的基本资源的工具箱,并提供一个框架来讨论我们在实际操作中受到的约束。这些约束是可能的物理限制,以及这些限制在硬件中的实现。
第16章提供了软件的基础知识和数据传输的基本描述,其中一节讨论“提取-传输/转换-加载”,通常称为ETL。
接下来,我们在第17章中概述了软件架构的设计注意事项。架构是整个系统如何组合在一起的设计。它包括用于数据存储、数据传输和计算的组件,以及它们之间如何相互通信。有些架构比其他架构更有效率,并且客观上也比其他架构做得更好。但是,鉴于时间和资源的限制,效率较低的解决方案可能更实用。我们希望提供足够的上下文,以便你可以做出明智的决定。即使你是数据科学家而不是工程师,我们也希望提供足够的知识,让你至少可以了解数据平台的状况。
然后,我们继续研究工程学中的一些更高阶的主题。第18章涵盖了数据库性能的一些基本界限。最后,在最后一章(第19章)讨论网络拓扑时,我们讨论了所有元素如何组合在一起。
继续
我们希望你不仅可以运用数据科学中的机器学习这部分,还可以了解自己数据平台的局限性。这样你才可以了解你需要构建什么,并找到按需构建基础设施的有效途径。我们希望借助完整的工具箱,你可以最终意识到这些工具只是解决方案的一部分。它们是解决实际问题的一种手段,而实际问题总是会受到资源的限制。
如果要从本书中吸取教训,那就是你应该始终将资源用于解决投资回报率最高的问题。解决你的问题是一个真正的约束。有时候,最好的机器学习模型无法解决所有问题。那这时候要问的问题是,这个就是要解决的最佳问题,还是有一个更简单的、风险更低的任务。
最后,尽管我们希望本书能涉及生产类机器学习的所有方面,但目前它更像是一本生产类数据科学书籍。在后续版本中,我们打算涵盖本版遗漏的内容,尤其是在机器学习基础设施方面。新的资料将包括:并行模型训练和预测的方法;Tensorflow、Apache Airflow、Spark以及其他框架和工具的基础知识;几个真正的机器学习平台的详细信息,包括Uber的Michelangelo、Google的TFX和我们自己在类似系统上的工作;以及避免和处理机器学习系统中的耦合。我们鼓励读者同时搜索涉及这些主题的书籍、论文和博客文章,并在本书的网站(adamkelleher.com/ml_book)上查看更新。
希望你会像我们一样喜欢学习这些工具,并且希望这本书可以节省你的时间和精力。

上架指导

计算机\人工智能

封底文字

本书可作为数据科学与机器学习速成课程的参考教材,面向需要在生产环境中解决实际问题的技术人员。两位作者展示了如何快速交付重要的生产价值,如何持续极大化投资回报率,避免使用被过度夸大的工具和不必要的复杂性,利用极简单、低风险的方法来达成目的。
作者利用他们丰富的经验,帮助你提出十分有用的问题,从无到有地完成你的生产项目。书中展示了利用简单的查询、聚合和可视化方法可以做些什么,并且讲述了不可或缺的误差分析方法来帮助你避免做出错误结论。全书涵盖了主要的机器学习方法,比如线性回归、随机森林、分类、聚类以及贝叶斯推断,这些能够帮助你在面对实际问题时选择正确的算法。本书后面关于硬件、架构、分布式系统的章节对如何在生产环境中优化性能提供了非常宝贵的参考。
通过学习本书,你将能够:
 利用敏捷原则缩小项目范围,保持高效开发。
 从实用Python代码示例中学习。
 从简单的启发式方法开始,并随着数据管道的成熟而改进它们。
 利用基本的数据可视化技巧来表达你的结果。
 精通主要的机器学习方法,包括线性回归、随机森林、分类、聚类与过拟合。
 学习图模型与贝叶斯推断的基础。
 理解机器学习模型中的相关性与因果性。

译者序

不管你的职业是什么,如果你在工作中会遇到真实世界的数据科学问题,那么本书将会对你提供巨大的帮助。它不仅描绘了广阔的机器学习算法世界,还教导你如何用合适的工程方法在其中翱翔。除了数学公式和图表,本书切合实际的代码和检验方法将有助于确保你专注于解决问题本身,而非研究高深莫测的算法理论。
两位作者—安德鲁·凯莱赫(Andrew Kelleher)和亚当·凯莱赫(Adam Kelleher)在工作中分别扮演着数据科学家和工程师的角色,默契的兄弟俩将机器学习和计算机工程巧妙地结合在一起,基于在BuzzFeed的工作经验,写出了这本机器学习工程指南。第一部分介绍的框架原则是数据科学世界坚实的基础;第二部分介绍解决现实问题的常用算法,帮助读者迅速解决实际问题,以及避免被数据误导,产生结论错误;第三部分则着眼于工程实践,基于工程角度突破瓶颈,让算法能够在现实条件中得以实现。
因本书着眼于利用数据科学解决实际问题,所以无论你是初学者还是经验丰富的工程师,都能受益良多。

图书目录

译者序

前言
作者简介
第一部分 框架原则
第1章 数据科学家的定位 2
1.1 引言 2
1.2 数据科学家扮演的角色 2
1.2.1 公司规模 3
1.2.2 团队背景 3
1.2.3 职业晋升和发展 4
1.2.4 重要性 5
1.2.5 工作细分 5
1.3 结论 5
第2章 项目流程 7
2.1 引言 7
2.2 数据团队背景 7
2.2.1 专门岗位与资源池 8
2.2.2 研究分析 8
2.2.3 原型设计 9
2.2.4 集成的工作流 10
2.3 敏捷开发与产品定位 10
2.4 结论 15
第3章 量化误差 16
3.1 引言 16
3.2 量化测量值的误差 16
3.3 抽样误差 18
3.4 误差传递 20
3.5 结论 22
第4章 数据编码与预处理 23
4.1 引言 23
4.2 简单文本预处理 24
4.2.1 分词 24
4.2.2 n元模型 26
4.2.3 稀疏 26
4.2.4 特征选择 27
4.2.5 表示学习 29
4.3 信息量损失 31
4.4 结论 33
第5章 假设检验 34
5.1 引言 34
5.2 什么是假设 34
5.3 假设检验的错误类型 36
5.4 p值和置信区间 37
5.5 多重测试和p值操控 38
5.6 实例 39
5.7 假设检验的设计 40
5.8 结论 41
第6章 数据可视化 43
6.1 引言 43
6.2 数据分布和汇总统计 43
6.2.1 数据分布和直方图 44
6.2.2 散点图和热力图 48
6.2.3 箱线图和误差条 52
6.3 时间序列图 54
6.3.1 移动统计 54
6.3.2 自相关 56
6.4 图可视化 57
6.4.1 布局算法 57
6.4.2 时间复杂度 59
6.5 结论 60
第二部分 算法与架构
第7章 算法和架构简介 62
7.1 引言 62
7.2 架构 64
7.2.1 服务 64
7.2.2 数据源 65
7.2.3 分批及在线计算 66
7.2.4 规模扩展 66
7.3 模型 67
7.3.1 训练 68
7.3.2 预测 68
7.3.3 验证 69
7.4 结论 70
第8章 距离度量 71
8.1 引言 71
8.2 Jaccard距离 71
8.2.1 算法 72
8.2.2 时间复杂度 73
8.2.3 内存注意事项 73
8.2.4 分布式方法 73
8.3 MinHash 74
8.3.1 假设 75
8.3.2 时空复杂度 75
8.3.3 工具 75
8.3.4 分布式方法 75
8.4 余弦相似度 76
8.4.1 复杂度 78
8.4.2 内存注意事项 78
8.4.3 分布式方法 78
8.5 马氏距离 78
8.5.1 复杂度 79
8.5.2 内存注意事项 79
8.5.3 分布式方法 79
8.6 结论 80
第9章 回归 81
9.1 引言 81
9.1.1 选择模型 82
9.1.2 选择目标函数 82
9.1.3 模型拟合 83
9.1.4 模型验证 84
9.2 线性最小二乘 87
9.2.1 假设 88
9.2.2 复杂度 89
9.2.3 内存注意事项 89
9.2.4 工具 89
9.2.5 分布式方法 89
9.2.6 实例 90
9.3 线性回归中的非线性回归 97
9.4 随机森林 100
9.4.1 决策树 100
9.4.2 随机森林 103
9.5 结论 106
第10章 分类和聚类 107
10.1 引言 107
10.2 逻辑回归 108
10.2.1 假设 111
10.2.2 时间复杂度 111
10.2.3 内存注意事项 112
10.2.4 工具 112
10.3 贝叶斯推断与朴素贝叶斯 112
10.3.1 假设 114
10.3.2 复杂度 114
10.3.3 内存注意事项 114
10.3.4 工具 114
10.4 K-Means 115
10.4.1 假设 118
10.4.2 复杂度 118
10.4.3 内存注意事项 118
10.4.4 工具 118
10.5 最大特征值 118
10.5.1 复杂度 120
10.5.2 内存注意事项 120
10.5.3 工具 120
10.6 Louvain贪心算法 120
10.6.1 假设 121
10.6.2 复杂度 121
10.6.3 内存注意事项 121
10.6.4 工具 121
10.7 最近邻算法 121
10.7.1 假设 123
10.7.2 复杂度 123
10.7.3 内存注意事项 123
10.7.4 工具 123
10.8 结论 123
第11章 贝叶斯网络 125
11.1 引言 125
11.2 因果图、条件独立和马尔
 可夫 126
11.2.1 因果图和条件独立 126
11.2.2 稳定性和依赖性 127
11.3 d分离和马尔可夫性质 128
11.3.1 马尔可夫和因式
 分解 128
11.3.2 d分离 129
11.4 贝叶斯网络的因果图 132
11.5 模型拟合 133
11.6 结论 136
第12章 降维与隐变量模型 137
12.1 引言 137
12.2 先验 137
12.3 因子分析 139
12.4 主成分分析 140
12.4.1 复杂度 142
12.4.2 内存注意事项 142
12.4.3 工具 142
12.5 独立成分分析 142
12.5.1 假设 145
12.5.2 复杂度 145
12.5.3 内存注意事项 146
12.5.4 工具 146
12.6 LDA主题模型 146
12.7 结论 152
第13章 因果推断 153
13.1 引言 153
13.2 实验 154
13.3 观测值:一个实例 157
13.4 非因果阻断控制法 163
13.5 机器学习估计量 167
13.5.1 重新审视G公式 167
13.5.2 实例 168
13.6 结论 172
第14章 高级机器学习 173
14.1 引言 173
14.2 优化 173
14.3 神经网络 175
14.3.1 神经网络层 176
14.3.2 神经网络容量 177
14.3.3 过拟合 179
14.3.4 批拟合 183
14.3.5 损失函数 183
14.4 结论 185
第三部分 瓶颈和优化
第15章 硬件基础 188
15.1 引言 188
15.2 随机存取存储器 188
15.2.1 访问 188
15.2.2 易失性 189
15.3 非易失性/持久化存储 189
15.3.1 机械硬盘或“旋转磁盘” 189
15.3.2 固态硬盘 190
15.3.3 延迟 190
15.3.4 分页 190
15.3.5 颠簸 191
15.4 吞吐量 191
15.4.1 局部性 191
15.4.2 执行层局部性 191
15.4.3 网络局部性 192
15.5 处理器 192
15.5.1 时钟频率 192
15.5.2 核心 192
15.5.3 线程 193
15.5.4 分支预测 193
15.6 结论 194
第16章 软件基础 196
16.1 引言 196
16.2 分页 196
16.3 索引 197
16.4 粒度 197
16.5 鲁棒性 198
16.6 提取、传输/转换、加载 199
16.7 结论 199
第17章 软件架构 200
17.1 引言 200
17.2 客户端-服务器架构 200
17.3 n层架构/面向服务的架构 201
17.4 微服务架构 202
17.5 整体架构 203
17.6 实际案例(混合架构) 203
17.7 结论 204
第18章 CAP定理 205
18.1 引言 205
18.2 一致性/并发 205
18.3 可用性 207
18.3.1 冗余 207
18.3.2 前端和负载均衡器 207
18.3.3 客户端的负载均衡 209
18.3.4 数据层 209
18.3.5 任务和Taskworker 211
18.3.6 故障转移 211
18.4 分区容错性 211
18.5 结论 213
第19章 逻辑网络拓扑节点 214
19.1 引言 214
19.2 网络图 214
19.3 负载均衡 215
19.4 缓存 216
19.4.1 应用程序级缓存 216
19.4.2 缓存服务 217
19.4.3 直写缓存 218
19.5 数据库 219
19.5.1 主副本数据库 219
19.5.2 多主结构 220
19.5.3 A/B副本 220
19.6 队列 221
19.6.1 任务调度和并行任务 222
19.6.2 异步执行 223
19.6.3 API缓冲 223
19.7 结论 224
参考文献 225

教学资源推荐
作者: 张红光 李福才 编著
作者: 何炎祥 伍春香 王汉飞 编著
作者: (美)Maurice J.Bach  著
参考读物推荐
作者: [印度]普拉迪帕塔?米什拉(Pradeepta Mishra) 著
作者: 李丙洋 刘正配 罗丹 邹天涌 等著
作者: (美)Dave H. Hoover;Adewale Oshineye 著
作者: (美)理查德.卡尔森