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

人邮异步社区 人邮异步社区     2023-03-03     320

关键词:

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

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

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

目标读者

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

 

基于kubevela的机器学习实践(代码片段)

本文主要介绍如何使用KubeVela的AI插件,来帮助工程师更便捷地完成模型训练及模型服务。作者:KubeVela社区在机器学习浪潮迸发的当下,AI工程师除了需要训练、调试自己的模型之外,还需要将模型进行部署上线,从而验证模型... 查看详情

基于kubevela的机器学习实践(代码片段)

...者:TianxinDong,KubeVela团队在机器学习浪潮迸发的当下,AI工程师除了需要训练、调试自己的模型之外,还需要将模型进行部署上线,从而验证模型的效果(当然,有的时候,这部分工作由AI系统工程师来完成)。这一部分工作对... 查看详情

机器学习算法和架构在mlops框架下的工程实践

本文主要介绍机器学习(以下简写为ML)算法和架构在MLOps框架下的工程实践。当从业者具备了足够丰富的知识储备时,就可以开始尝试ML了。通常情况下,ML实践会涉及研究和生产两个主要环境。研究环境可以在... 查看详情

机器学习实战|机器学习特征工程最全解读(代码片段)

本篇内容给大家详细讲解了特征工程的知识,包括数据清洗(数据对齐、缺失值处理、异常值处理),特征构建,特征变换,特征选择与实战特征工程经验等内容。作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/41本... 查看详情

唐宇迪-机器学习/深度学习系列课程福利大发送!不单优惠还送机器学习必备实战书籍!

决胜AI就在今天Hi同学们,给大家推荐一本机器学习的入门佳品:机器学习实战。这本书可以说是我看过最通俗易懂的机器学习书籍了,并没有上来直接阐述一些看着就头疼的各种数学公式,而是以实际案例为出发点一步步带领... 查看详情

机器学习英雄访谈录之dl实践家:dominicmonn

...minicMonn,一位伟大的领袖、缔造者、社区领导者、自驾车工程师和远程工作的DL工程师。1Sanyam:嗨,Dominic!感谢你接受这次采访,我很高兴能够采访你。Dominic:嗨,Sanyam,很高兴和你谈话!Sanyam:你是我在2018年见过最好的(AI)实... 查看详情

入门机器学习需要掌握哪些数据技能?

...到了网络搜索上。 但在那个时候,机器学习还和普通的工程师无缘。开发一个机器学习系统,需要读个PhD,还得找到一群想法类似、志同道合的朋友。 现在,机器学习终于更强大也更亲民了。 一个普通的软件工程师,不需要去... 查看详情

分享《机器学习与应用》pdf+雷明+资料学习

《机器学习与应用》是机器学习和深度学习领域的入门与提高教材,系统、深入地讲述机器学习与深度学习的主流方法与理论,并紧密结合工程实践与应用。下载:https://pan.baidu.com/s/1Yaxt7vVeCZF1uzobz8Fdgw《机器学习与应用》高清PDF... 查看详情

假期归来,都有哪些编程书上了新书榜?

...来展示下。1、机器学习的数学一周新书榜第2。机器学习工程师们都应该阅读的一本书。豆瓣评论:一本吃透机器学习的基础良作机器学习火了好几年了,而且目测随着5G和计算机算力的发展这个热度还能持续好久,比如大数据... 查看详情

微软资深算法工程师为ai初学者量身打造的机器学习入门书上市啦!

随着人工智能技术的发展,机器学习已成为软件 /互联网行业的常用技能,并开始向更多行业渗透。对越来越多的IT技术人员及数据分析从业者而言,机器学习正在成为必备技能之一。今天我们就来聊聊机器学习的“... 查看详情

如何准备机器学习工程师的面试?

如何准备机器学习工程师的面试?2018届校招面经精选1、菜鸟图像图形算法内推一面2、机器学习算法面经3、百度面试一面4、京东云算法工程师一面分享5、京东算法工程师一面面经6、京东云机器学习面试分享7、京东AI与大数据... 查看详情

从软件工程的角度写机器学习5——svm(支持向量机)实现

...了SVM的纯属扯淡)。SVM算法总体流程本系列文章旨在讲解机器学习算法的工程实现方法,不在于推导数学原理。因此想深入了解原理的请移步去看《支持向量机通俗导论(理解SVM的三层境界)》:http://www.cnblogs.com/v-July-v/archive/20... 查看详情

算法工程师(机器学习)面试题目3---机器学习算法

说明:这些是自己整理回答的答案可以借鉴也可能存在错误欢迎指正机器学习机器学习算法1、处理分类问题常用算法1、交叉熵公式2、LR公式3、LR的推导,损失函数4、逻辑回归怎么实现多分类5、SVM中什么时候用线性核什... 查看详情

机器学习工程师-udacity机器学习基础

一、评估指标1.混淆矩阵: 查看详情

普通码农入门机器学习,必须掌握这些数据技能

...用到了网络搜索上。但在那个时候,机器学习还和普通的工程师无缘。开发一个机器学习系统,需要读个PhD,还得找到一群想法类似、志同道合的朋友。现在,机器学习终于更强大也更亲民了。一个普通的软件工程师,不需要去... 查看详情

python机器学习算法学习的步骤机器学习的应用及流程(获取数据特征工程模型模型评估)(代码片段)

机器学习入门机器学习中需要理论性的知识,如数学知识为微积分(求导过程,线性回归的梯度下降法),线性代数(多元线性回归,高纬度的数据,矩阵等),概率论(贝叶斯算法),统计学(贯穿整个学习过... 查看详情

双十一不如买一本书吧

...深度学习知识,以便在实际产品或平台中应用的软件工程师。本书特色有些读者在学习时会有这样一种感觉:一门课学完了、考试过了,却不知道学了有什么用,尤其是数学类的课程。这 查看详情

机器学习的特征工程

...模特征=>数据抽取出来的对结果预测有用的信息特征工程师使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。特征工程的意味着更强的灵活度,不需复杂的模型,得到更好... 查看详情