新書推薦:
《
1911:危亡警告与救亡呼吁
》
售價:HK$
76.8
《
旷野人生:吉姆·罗杰斯的全球投资探险
》
售價:HK$
75.9
《
笼中王国 : 18世纪法国的珍禽异兽与社会文化
》
售價:HK$
74.8
《
思考的框架3:风靡华尔街的思维训练法
》
售價:HK$
64.9
《
被记忆的西周史(中山大学中珠学术译丛)
》
售價:HK$
151.8
《
森林疗法:拥抱大自然、获得幸福的季节性方法
》
售價:HK$
74.8
《
希腊人(伊恩·莫里斯文明史系列)
》
售價:HK$
185.9
《
亚马逊六页纸 如何高效开会、写作、完成工作
》
售價:HK$
76.8
|
編輯推薦: |
既然发现了学习和教学中的缺陷,就应该去改进。我在网络上查找了很多书,发现由Ben Wilson编写的Machine Learning Engineering in Action是一本很不错的介绍机器学习工程学的书。他通过亲身经历,介绍了如何在机器学习和数据科学的工作中使用工程学技术,让你成为一名“受欢迎”的数据科学家和机器学习工程师。本书的内容与我之前使用过(作为教材)或翻译过的关于机器学习的书都不-样,没有大篇幅的代码解释和具体的技术介绍,而是以一个项目为主线,从头介绍如何完成一个成功的机器学习项目,并且在书中介绍了很多有趣的示例,从冰淇淋优惠券的高效投递,到给狗狗做美味的意大利面。如果你是数据科学家或机器学习工程师,我推荐你阅读这本有趣的书。读完本书之后,你可能就会理解为什么在以往的项目中,业务部门]的领导对数据科学家辛苦做出的成果不屑一顾,隔壁组的软件开发人员抱怨机器学习工程师给出的解决方案让他们不得不加班到深夜。本书没有介绍花哨的技术实现,但通过Ben介绍他在工作中走过的弯路和踩过的深坑,可以让你避免犯他曾经犯过的错误,成为公司中受欢迎的数据科学家。
|
內容簡介: |
《机器学习项目交付实战》将介绍如何从模型和数据中获取**性能,帮助你构建稳定的数据管道。通过高效的可复用技术集合,来确保应用程序工作流程的顺利执行,以及提高模型的可维护性。基于数十年的良好软件工程实践,机器学习工程可确保你的机器学习系统具有弹性、适应性和可执行性。 《机器学习项目交付实战》将介绍设计、构建和交付成功的机器学习项目的核心原则和上佳实践。你将了解很多软件工程技术,例如对原型进行实验和实施模块化设计,从而产生弹性架构和一致的跨团队沟通。基于作者丰富的经验,本书中的每一种方法都被成功地用于解决现实世界中的问题。 ● 根据预期和预算确定机器学习项目的范围 ● 为你的项目选择正确的技术路线 ● 使你的代码库更易于理解,提升可维护性和可测试性 ● 实现故障排除和日志系统的自动化
|
關於作者: |
Ben Wilson是一名机器学习工程师,曾担任过核工程技术员、半导体工艺工程师和数据科学家。十多年来,他一直在解决数据和开源工具方面的问题,在过去的4年里他帮助其他人完成相同的工作。他喜欢构建机器学习框架代码,帮助人们思考有挑战性的数据科学问题,并喜欢开怀大笑。
|
目錄:
|
第Ⅰ部分 机器学习工程简介
第1章 什么是机器学习工程 3
1.1 为什么使用机器学习工程 4
1.2 机器学习工程的核心原则 7
1.2.1 规划 7
1.2.2 范围界定和研究 9
1.2.3 实验 11
1.2.4 研发 12
1.2.5 部署 15
1.2.6 评估 18
1.3 机器学习工程的目标 20
1.4 本章小结 21
第2章 数据科学工程 23
2.1 用提高项目成功率的过程增强复杂的专业 24
2.2 简单的基础 25
2.3 敏捷软件工程的工作原则 27
2.3.1 沟通与合作 28
2.3.2 拥抱并期待改变 30
2.4 机器学习工程的基础 31
2.5 本章小结 32
第3章 在建模之前:规划和确定项目范围 33
3.1 规划:你要我预测什么 36
3.1.1 项目的基本规划 40
3.1.2 首次会议 45
3.1.3 规划演示——进行大量演示 47
3.1.4 通过解决方案构建进行实验:磨刀不误砍柴工 49
3.2 实验范围:设定预期和界限 51
3.2.1 什么是实验范围 52
3.2.2 机器学习团队的实验范围:研究 52
3.2.3 机器学习团队的实验范围:实验 54
3.3 本章小结 63
第4章 建模之前:项目的沟通与逻辑 65
4.1 沟通:定义问题 67
4.1.1 理解问题 68
4.1.2 设置严格的讨论界限 78
4.2 不要浪费时间:与跨职能团队交流 84
4.2.1 实验变更会议:我们知道自己在做什么吗 85
4.2.2 SME 评审/原型评审:我们能解决这个问题吗 86
4.2.3 开发进度评审:这会奏效吗 87
4.2.4 MVP评审:是否生成了我们要求的内容 88
4.2.5 预投产评审:我们真希望没有搞砸 89
4.3 为实验设定限制 90
4.3.1 设置时限 90
4.3.2 可以投入生产吗? 你想维护它吗 92
4.3.3 机器学习项目的TDD、RDD、PDD和CDD 93
4.4 为混乱的业务规则做计划 96
4.4.1 通过计划“拥抱混乱” 96
4.4.2 “人机回环”设计 98
4.4.3 你的备选方案是什么 99
4.5 对结果进行讨论 99
4.6 本章小结 101
第5章 进行实验:规划和研究机器学习项目 103
5.1 设计实验 104
5.1.1 进行基础的研究和规划 105
5.1.2 扔掉博客——仔细阅读API文档 108
5.1.3 抽签决定内部黑客马拉松 112
5.1.4 公平竞争环境 113
5.2 执行实验准备工作 114
5.2.1 执行数据分析 115
5.2.2 从脚本转向可重用代码 121
5.2.3 为实验构建可重用代码的最后说明 128
5.3 本章小结 131
第6章 进行实验:测试与评估 133
6.1 测试想法 135
6.1.1 在代码中设置准则 136
6.1.2 运行快速预测测试 143
6.2 减少可能性 158
6.2.1 正确评估原型 159
6.2.2 决定前进的方向 161
6.2.3 接下来做什么 163
6.3 本章小结 164
第7章 实践实验:从原型到MVP 165
7.1 调整:自动化那些恼人的过程 166
7.1.1 调优选项 168
7.1.2 Hyperopt入门 172
7.1.3 使用Hyperopt调优复杂的预测问题 175
7.2 为平台和团队选择合适的技术 179
7.2.1 使用Spark的理由 181
7.2.2 用SparkTrials处理来自Driver的调优 183
7.2.3 用pandas_udf处理来自Worker的调优 186
7.2.4 为团队使用新范式:平台和技术 190
7.3 本章小结 191
第8章 动手实战:使用MLflow和运行时优化实现MVP 193
8.1 日志记录:代码、指标和结果 194
8.1.1 MLflow跟踪 194
8.1.2 不要通过打印记录日志 196
8.1.3 版本控制、分支策略和与他人合作 198
8.2 可伸缩性和并发性 200
8.2.1 什么是并发 200
8.2.2 哪些内容可以(或不可以)异步运行 203
8.3 本章小结 203
第Ⅱ部分 为投产做准备:创建可维护的机器学习项目
第9章 机器学习中的模块化:编写可测试且易读的代码 207
9.1 单片脚本及其缺点 209
9.1.1 “巨石”是如何形成的 210
9.1.2 文本墙 210
9.1.3 单片脚本的注意事项 213
9.2 调试文本墙 215
9.3 对机器学习代码进行模块化设计 221
9.4 机器学习的测试驱动开发 222
9.5 本章小结 226
第10章 编码标准和创建可维护的机器学习代码 227
10.1 机器学习的代码异味 228
10.2 命名、结构和代码体系结构 230
10.2.1 命名约定和结构 231
10.2.2 别耍小聪明 232
10.2.3 代码体系结构 233
10.3 元组解包和可维护的替代方案 235
10.3.1 元组解包示例 235
10.3.2 元组解包的可靠替代方案 237
10.4 对问题视而不见:“饮食异常”和其他不良做法 239
10.4.1 精准使用try/catch 239
10.4.2 精心设计的异常处理 241
10.4.3 正确处理错误 242
10.5 使用全局可变对象 244
10.5.1 易变性会如何伤害你 245
10.5.2 封装以防止可变性带来的副作用 246
10.6 过多的嵌套的逻辑 248
10.7 本章小结 254
第11章 模型测量及其重要性 255
11.1 测量模型归因 256
11.1.1 测量预测性能 258
11.1.2 明确相关性与因果关系 264
11.2 利用A/B检验进行归因计算 268
11.2.1 A/B检验基础 268
11.2.2 连续评估指标 271
11.2.3 使用替代显示和检验 276
11.2.4 评估分类指标 280
11.3 本章小结 283
第12章 通过观察漂移以保持你的收益 285
12.1 检测漂移 285
12.2 解决漂移问题 296
12.2.1 我们可以做些什么 296
12.2.2 应对漂移 298
12.3 本章小结 299
第13章 机器学习中的开发“傲慢” 301
13.1 优雅的复杂性与过度设计 302
13.1.1 轻量级脚本风格(命令式) 304
13.1.2 “精心设计”的混乱 307
13.2 无意混淆:如果不是你写的,你能否读懂 311
13.2.1 关于混淆 311
13.2.2 总结不良编码习惯 322
13.3 不成熟的泛化、不成熟的优化以及其他显示你有多聪明的糟糕方式 323
13.3.1 泛化和框架:除非不得已,否则不要使用它们 323
13.3.2 过早优化 325
13.4 你真的想作为“煤矿中的金丝雀”吗?Alpha测试和开源“煤矿”中的危险 332
13.5 技术驱动的开发与解决方案驱动的开发 335
13.6 本章小结 337
第Ⅲ部分 开发生产机器学习代码
第14章 编写生产代码 341
14.1 你见到了你的数据吗 342
14.1.1 确保你有数据 344
14.1.2 检查数据来源 345
14.1.3 找到真相的来源并与之保持一致 348
14.1.4 不要将数据清理嵌入生产代码中 349
14.2 监控你的特征 351
14.3 监控模型生命周期中的所有其他内容 355
14.4 保持一切尽可能简单 359
14.4.1 问题定义的简洁性 361
14.4.2 简单的实现 361
14.5 机器学习项目的线框图 363
14.6 避免机器学习中的货物崇拜行为 368
14.7 本章小结 373
第15章 质量和验收测试 375
15.1 数据一致性 376
15.1.1 训练和推理偏差 376
15.1.2 特征存储简介 378
15.1.3 过程胜于技术 379
15.1.4 数据孤岛的危险 380
15.2 回退和冷启动 382
15.2.1 严重依赖现有技术 383
15.2.2 冷启动问题 385
15.3 最终用户与内部使用测试 387
15.3.1 有偏见的测试 390
15.3.2 自己公司的员工测试自研的产品(dogfooding) 391
15.3.3 SME评估 392
15.4 模型的可解释性 393
15.4.1 Shapley加法解释 394
15.4.2 使用shap包 396
15.5 本章小结 401
第16章 生产环境基础设施 403
16.1 工件管理 404
16.1.1 MLflow的模型注册 405
16.1.2 使用模型注册进行连接 407
16.2 特征库 412
16.2.1 特征库的用途 413
16.2.2 使用特征库 415
16.2.3 评估特征库 418
16.3 预测服务体系结构 419
16.3.1 确定服务需求 421
16.3.2 批量外部交付 427
16.3.3 微批量流式传输 429
16.3.4 实时服务器端 430
16.3.5 集成模型(边缘部署) 433
16.4 本章小结 434
附录A Big O以及如何考虑运行时性能 435
附录B 设置开发环境 461
|
內容試閱:
|
我还是小男孩时,就非常固执。当人们提出简单的做事方法时,我总会忽略他们的建议,选择以艰难的方式去做。几十年后,随着我转向越来越具有挑战性的工作,并最终进入数据科学(Data Science,DS)和机器学习(Machine Learning,ML)工程领域,以及现在的机器学习软件开发领域,我的处事原则并没有太大变化。作为业界的数据科学家,我总是觉得有必要构建十分复杂的解决方案,独立地工作,以我认为最好的方式解决给定的问题。
我取得了一些成功,但也经历过很多失败,并且在我换工作时,通常会留下一些无法维护的代码。这不是我特别引以为傲的事情。离职多年后,前同事联系了我,他们告诉我:我写的代码仍然每天都在运行。当我问他们为什么时,我得到了令人沮丧的答案,这让我对我的做法感到后悔:“没人能弄清代码的内容并对代码进行修改,而这套系统又十分重要,无法关闭。”
我一直是个糟糕的数据科学家,是个更糟糕的机器学习工程师。我花了很多年才知道为什么会这样。这种固执和抗拒以最简单的方式解决问题的态度给其他人带来了很多麻烦:我在公司时,由于我的原因取消了大量的项目;我离开公司之后,又给别人留下了无法维护的代码与项目。
直到我最近在Databricks担任常驻解决方案架构师(本质上是供应商现场顾问),我才开始了解我哪里出了问题,并改变了我解决问题的方式。可能是因为我现在作为顾问帮助其他在数据科学问题上苦苦挣扎的人,我能够通过对他们的问题进行抽象,看到我自己的缺点。在过去的几年里,我帮助不少团队避免了许多我经历过的陷阱(以及我自己的固执和傲慢造成的问题)。我认为,写下我为其他人提供的建议,可以使更广泛的受众获益,比只在我的工作环境中与特定的团队单独对话更好。
毕竟,当你阅读应用机器学习概念的例子和书籍时,将机器学习应用到真实用例非常困难。当你介绍端到端项目工作的惊人复杂性(这是本书的重点)时,许多公司未能意识到机器学习在其业务中的潜力也就不足为奇了。这项工作十分艰难。不过,如果你有个好向导,就轻松了。
本书并不是要成为应用机器学习的指南。书中不会讨论为什么一个模型比另一个模型更好,或者一个算法优于其他算法,也不会深入研究所有细节来解决个别问题。相反,本书可以帮你避免掉进许多团队都陷入过的陷阱(这些陷阱也是我作为一名从业者不得不努力摆脱的陷阱)。这是一种使用数据科学技术解决问题的通用方法,让你或者你的客户(公司内部的客户)以及你的同行在项目中不会做出让自己后悔的决定。阅读本书,可以帮助你避免犯一些我曾经犯过的愚蠢的错误。
用我最近很喜欢的两个谚语来说:
向有经验者请教,不要向博学之人讨教。
——阿拉伯谚语
最好是通过别人的经验学到智慧。
——拉丁谚语
关 于 本 书
本书介绍的是我过去几年与客户分享的建议、来之不易的智慧和一般技巧的延伸。这不是一本理论书,也不会让你为特定的问题建立最佳模型。这些内容已经由其他伟大的作家撰写。这是一本关于“其他内容”的书。
本书读者对象
本书旨在覆盖机器学习社区中的大多数读者。它既不是专门为机器学习软件工程师编写的,也不是为初学者编写的。我以我处理问题的方式编写本书,旨在让使用机器学习解决业务问题的任何人都可以阅读并理解它。
在本书的编写过程中,我对一些早期反馈感到惊喜。我问那些联系过我的人的第一个问题是:“你的职业是什么?”我收到的职位和行业比我想象的要广泛得多——拥有经济学博士学位的风险投资家,在一些最负盛名的科技公司拥有20年行业经验的机器学习工程师,硅谷初创公司的产品经理,以及大一的本科生。这让我知道,在使用机器学习工程成功构建项目方面,本书为每个人提供了需要的内容。
本书内容的组织路线图
本书包括3个主要部分,介绍了机器学习项目中的各个里程碑。从“我们试图解决什么”到最后阶段的“如何在未来几年保持这个解决方案的相关性”,本书回顾了每个重要的开发过程,其逻辑顺序与你在完成一个项目时考虑这些主题的顺序相同。
● 第Ⅰ部分(第1~8章)主要侧重于从团队负责人、经理或项目负责人的角度管理机器学习项目。它为范围界定、实验、原型设计和包容性反馈部署了蓝图,从而帮助你避免陷入构建解决方案的陷阱。
● 第Ⅱ部分(第9~13章)介绍了机器学习项目的开发过程。通过机器学习解决方案开发的示例(无论好坏),介绍构建、调整、记录和评估机器学习解决方案的最佳实践,从而确保构建尽可能简单和最易维护的代码。
● 第 Ⅲ 部分(第 14~16章)侧重于“之后”:具体而言,是与简化项目的产品发布、再训练、监控和归因相关的内容。通过专注于A/B测试、特征存储和被动再训练系统的示例,介绍如何实现系统和体系结构,以确保可以通过最简单的机器学习解决方案解决业务问题。
关于本书代码
本书包含许多示例源代码,包括带有编号的代码清单和内嵌普通文本的代码。在这两种情况下,源代码通过固定宽度字体(如fixed-with)显示,以将其与普通文本分开。
在许多情况下,原始源代码已被重新格式化,我们添加了换行符并重新设计了缩进格式,以适合印刷。在许多代码清单中,包含了大量的注释,用来突出显示重要的概念。
你可以通过https://livebook.manning.com/book/machine-learning-engineering-in-action,从本书的liveBook(在线)版本中获取可执行的代码片段。书中示例的完整代码可从上述网址和GitHub下载,GitHub网址为https://github.com/BenWilson2/ML- Engineering。也可通过扫封底二维码下载源代码。
|
|