机器学习工程师必备,一本专门讲解机器学习工程实践的书

关于机器学习的好书有很多,既有理论上的,也有实践上的。从一本典型的机器学习书籍中,你可以了解机器学习的类型、算法的主要家族是如何工作的,以及如何使用算法基于数据建立模型。

一本典型的机器学习书籍不太关注实现机器学习项目的工程方面。诸如数据收集、存储、预处理、特征工程,以及模型的测试和调试、模型部署到生产环境中以及从生产环境中退出、运行时和投入生产后的维护等问题,常常被排除在机器学习书籍的范围之外。

机器学习工程实战》就是一本提供可供参考的实践与想法的书。

机器学习工程师必备,一本专门讲解机器学习工程实践的书_第1张图片

目标读者

我假设本书的读者了解机器学习的基础知识,并且在给定一个正确格式化的数据集时,有能力使用最喜欢的编程语言或机器学习库来建立一个模型。如果你对机器学习算法应用于数据感到不太明白,不太清楚逻辑斯谛回归、支持向量机和随机森林之间的区别,我建议你从《机器学习精讲》[2](The Hundred-Page Machine Learning Book)开始学习,然后再转向本书。

本书的目标读者是倾向于机器学习工程角色的数据分析师、希望让工作更有条理的机器学习工程师、机器学习工程专业的学生,以及正好要处理一些模型(由数据分析师和机器学习工程师提供)的软件架构师。

如何使用本书

本书是对机器学习工程实践和设计模式的全面回顾。我建议你从头到尾阅读它。不过,你可以按照任意顺序阅读各章,因为它们涵盖了机器学习项目生命周期的不同方面,没有直接的依赖关系。

读者读完这本书后有何收获?

首先,深刻理解所有机器学习项目都是独一无二的。没有任何一个配方是永远有效的。大多数时候,最大的挑战必须在你输入from sklearn.linear_model import LogisticRegression之前解决:你必须定义你的目标,选择基线,收集相关数据,给它贴上高质量的标签,并将标签数据转化为训练、验证和测试集。剩下的问题在你输入model.fit(X,y)后,通过应用误差分析,评估模型,验证它是否解决了问题,并且比现有的解决方案更好用。

经验丰富的分析师或机器学习工程师明白,并不是所有的问题(不论是业务问题还是其他问题)都可以用机器学习来解决。事实上,通过启发式方法、数据库中的查询或传统的软件开发,许多问题可以更容易解决。如果系统的每一个动作、决策或行为都必须提供解释,你可能不应该使用机器学习。除了极少数例外,机器学习模型都是黑盒子。它们不会告诉你为什么它们会做出这样的预测,也不会告诉你为什么它们今天没有预测到昨天预测的东西,也不会告诉你如何解决这些问题。

一方面,除非你能找到一个公共数据集和一个开源的解决方案刚好提供你所需要的东西,否则机器学习并不是最短时间内上市的正确方法。有时,训练和维护模型所需的数据太难获得甚至无法获得。

另一方面,训练数据可以通过使用过采样和数据增强来综合生成。当数据表现出不平衡时,这些技术经常被应用。

在你开始收集数据之前,请问这些问题:数据是否可访问、可相当大、可使用、可理解和可靠?好的数据包含足够的信息用于建模,对生产环境场景有很好的覆盖率和很少的偏差,足够大从而允许泛化,并且不是模型本身的结果。

或者你的数据是否包含高成本、偏差、不平衡、缺失属性及有噪声标签?在用于训练之前,必须保证数据质量。

机器学习项目的生命周期包括以下阶段:目标定义、数据收集和准备、特征工程、模型训练、评估、部署、服务、监测和维护。在大多数阶段,可能会出现数据泄露。分析师必须能够预测并防止它。

在数据准备好之后,特征工程是第二个最重要的阶段。对于一些数据,如自然语言文本,可以通过使用词袋等技术批量生成特征。然而,最有用的特征往往是利用分析师的领域知识手工打造的。设想你自己就是模型,让自己和模型融为一体。

好的特征具有很高的预测能力,可以快速计算,可靠且无修正。它们具有单元性,易于理解和维护。特征提取代码是机器学习系统中最重要的部分之一。它必须经过广泛和系统的测试。

最佳实践是扩展特征,将它们存储和记录在模式文件或特征商店中,并保持代码、模型和训练数据的同步。

你可以通过对现有的特征进行离散化,对训练样本进行聚类,对现有的特征进行简单的变换,或者将它们组合成对,来合成新的特征。

在开始研究一个模型之前,确保数据符合模式,然后将其分成三组:训练、验证和测试。定义一个可实现的表现水平,并选择一个表现指标。它应该将模型的表现归结为一个数字。

大多数机器学习算法、模型和流水线都有超参数。它们可以显著影响学习的结果。然而,这些不是从数据中学习的。分析师在超参数调整期间设置它们的值。特别是,调整这些值可以控制两个重要的折中:查准率-查全率和偏差-方差。通过改变模型的复杂度,你可以达到所谓的“解的区域”,即偏差和方差都相对较低的情况。优化表现指标的解通常是在解的区域附近找到的。网格搜索是最简单也是应用最广泛的超参数调整技术。

与其从头开始训练一个深度模型,不如从一个预训练的模型开始。使用预训练的模型来构建自己的模型被称为迁移学习。事实上,深度模型允许迁移学习是其最重要的特性之一。

训练深度模型可能很棘手。从数据准备,到定义神经网络拓扑结构,很多阶段都可能发生实现错误。建议从小开始。例如,使用高级库实现一个简单的模型。将默认的超参数值应用于放入内存的小型标准化数据集。一旦你有了第一个简单化模型架构和数据集,就暂时将训练数据集进一步缩小,缩小到一个小批次的大小。然后开始训练。确保你的简单模型能够过拟合这个训练小批次。

你的机器学习系统的表现可能会从模型堆叠中受益。理想情况下,用于堆叠的基础模型是从不同性质的算法或模型中获得的,例如随机森林、梯度提升、支持向量机和深度模型。许多现实世界的生产系统都是基于堆叠模型的。

机器学习模型的错误可以是均匀的,以相同的比例适用于所有使用场景,也可以是聚焦的,更高频地适用于某些使用场景。通过修复聚焦错误,你可以针对许多样本一次修复。

可以利用一个简单的迭代过程来完善模型。

(1)使用到目前为止确定的超参数的最佳值来训练模型。

(2)将模型应用于验证集的一个小子集来测试模型。

(3)在这个小的验证集上找到最频繁的误差模式。

(4)生成新的特征,或者添加更多的训练数据来修正观察到的误差模式。

(5)重复以上步骤,直到没有观察到频繁的误差模式。

在部署前必须仔细评估模型,并在部署后持续评估。当模型最初训练时,基于历史数据来执行离线模型评估。在线模型评估包括在生产环境中使用在线数据对模型进行测试和比较。两个流行的在线模型评估技术是A/B测试和多臂老虎机。它们允许我们确定新模型是否比旧模型更好。

一个模型可以按照以下几种模式部署:静态部署(作为可安装软件包的一部分),在用户的设备或服务器上动态部署,或者通过模型流。此外,还可以选择单一部署、静默部署、金丝雀部署和多臂老虎机等策略。每种模式和策略都有其优缺点,应该根据你的业务应用来选择。

算法效率也是模型部署的一个重要考虑因素。像NumPy、SciPy和scikit-learn这样的Python科学软件包是由有经验的科学家和工程师以效率为前提构建的。它们有很多方法是用C语言实现的,以达到最高效率。如果可以复用一个流行和成熟的库或包,就要避免编写自己的生产代码。为了提高效率,要选择合适的数据结构和缓存。

对于某些应用,预测速度至关重要。在这种情况下,生产代码用编译语言编写,如Java或C/C++。如果数据分析师用Python或R建立了一个模型,那么生产部署有几种选择:用生产环境的编译编程语言重写代码,使用PMML或PFA等模型表示标准,或者使用MLeap等专门的执行引擎。

机器学习模型以批量或按需模式提供。在按需服务时,一个模型通常被包装成一个REST API。服务机器通常是通过使用流式架构来完成的。

当一个软件系统暴露在现实世界中时,其架构必须准备好对错误、变化和人性做出有效的反应。一个模型必须不断监控。监控必须让我们能够确保模型被正确地服务,并且其表现保持在可接受的范围内。

记录足够的信息,以便在未来的分析中重现任何不稳定的系统行为,这是很重要的。如果模型是提供给前端用户的,那么在模型服务时保存用户的上下文是很重要的。

有些用户可能会试图滥用你的模型来达到自己的商业目的。为了防止滥用,不要相信来自一个用户的数据,除非类似的数据来自多个用户。给每个用户分配一个声誉分数,不要相信从声誉低的用户那里获得的数据。将用户的行为分为正常或异常,必要时对用户的行为实行逐步延长的暂停,或屏蔽一些用户。

通过分析用户的行为和输入数据,定期更新你的模型,使它更加健壮。之后,根据端到端测试集和置信度测试集运行新模型。确保输出与之前一样,或者变化与预期一样。验证新模型不会产生明显的更高成本的错误。确保错误均匀分布在各个用户类别中。如果新模型对来自少数群体或特定地点的大多数用户产生了负面影响,这是不可取的。

目录结构

第 1章 概述 1

1.1 符号和定义 1

1.2 什么是机器学习 3

1.3 数据和机器学习术语 6

1.4 何时使用机器学习 11

1.5 何时不使用机器学习 14

1.6 什么是机器学习工程 15

1.7 机器学习项目生命周期 16

1.8 小结 17

第 2章 项目开始前 19

2.1 机器学习项目的优先级排序 19

2.2 估计机器学习项目的复杂度 212

2.3 确定机器学习项目的目标 22

2.4 构建机器学习团队 24

2.5 机器学习项目为何失败 26

2.6 小结 29

第3章 数据收集和准备 31

3.1 关于数据的问题 31

3.2 数据的常见问题 37

3.3 什么是好数据 48

3.4 处理交互数据 50

3.6 数据划分 53

3.7 处理缺失的属性 55

3.8 数据增强 57

3.9 处理不平衡的数据 60

3.10 数据采样策略 63

3.11 存储数据 64

3.12 数据处理最佳实践 70

3.13 小结 71

第4章 特征工程 73

4.1 为什么要进行特征工程 73

4.2 如何进行特征工程 74

4.3 叠加特征 88

4.4 好特征的属性 90

4.5 特征选择 92

4.6 合成特征 96

4.7 从数据中学习特征 100

4.8 降维 104

4.9 缩放特征 105

4.10 特征工程中的数据泄露问题 107

4.11 存储特征和编写文档 108

4.12 特征工程最佳实践 112

4.13 小结 115

第5章 监督模型训练(第 一部分) 117

5.1 开始模型工作之前 117

5.2 为机器学习表示标签 122

5.3 选择学习算法 124

5.4 建立流水线 126

5.5 评估模型表现 127

5.6 超参数调整 137

5.7 浅层模型训练 141

5.8 偏差-方差折中 143

5.9 正则化 146

5.10 小结 148

第6章 监督模型训练(第二部分) 150

6.1 深度模型训练策略 150

6.2 堆叠模型 165

6.3 应对分布偏移 167

6.4 处理不平衡数据集 168

6.5 模型校准 170

6.6 故障排除与误差分析 172

6.7 最佳实践 179

6.8 小结 185

第7章 模型评估 187

7.1 离线和在线评估 188

7.2 A/B测试 190

7.3 多臂老虎机 195

7.4 模型表现的统计界限 198

7.5 评估测试集的充分性 201

7.6 模型属性的评估 202

7.7 小结 204

第8章 模型部署 206

8.1 静态部署 206

8.2 在用户设备上动态部署 207

8.3 在服务器上动态部署 209

8.4 部署策略 214

8.5 自动部署、版本管理和元数据 216

8.6 模型部署最佳实践 217

8.7 小结 225

第9章 模型服务、监测和维护 227

9.1 模型服务运行时的属性 227

9.2 模型服务模式 230

9.3 现实世界中的模型服务 233

9.4 模型监测 238

9.5 模型维护 243

9.6 小结 246

第 10章 结论 249

10.1 学习收获 249

10.2 后续阅读 253

10.3 致谢 253

 

你可能感兴趣的:(机器学习,人工智能,特征工程)