目录
第 1章 概述 1
1.1 符号和定义 1
1.1.1 数据结构 1
1.1.2 大写西格玛记法 3
1.2 什么是机器学习 3
1.2.1 监督学习 4
1.2.2 无监督学习 5
1.2.3 半监督学习 6
1.2.4 强化学习 6
1.3 数据和机器学习术语 6
1.3.1 直接和间接使用的数据 7
1.3.2 原始数据和规整数据 7
1.3.3 训练集和留出集 8
1.3.4 基线 9
1.3.5 机器学习流水线 9
1.3.6 参数与超参数 10
1.3.7 分类与回归 10
1.3.8 基于模型学习与基于实例学习 11
1.3.9 浅层学习与深度学习的比较 11
1.3.10 训练与评分 11
1.4 何时使用机器学习 11
1.4.1 如果问题太复杂,无法进行编程 12
1.4.2 如果问题不断变化 12
1.4.3 如果它是一个感知问题 13
1.4.4 如果它是一种未曾研究过的现象 13
1.4.5 如果问题的目标简单 14
1.4.6 如果它有成本效益 14
1.5 何时不使用机器学习 14
1.6 什么是机器学习工程 15
1.7 机器学习项目生命周期 16
1.8 小结 17
第 2章 项目开始前 19
2.1 机器学习项目的优先级排序 19
2.1.1 机器学习的影响 19
2.1.2 机器学习的成本 20
2.2 估计机器学习项目的复杂度 21
2.2.1 未知因素 21
2.2.2 简化问题 21
2.2.3 非线性进展 22
2.3 确定机器学习项目的目标 22
2.3.1 模型能做什么 22
2.3.2 成功模型的属性 23
2.4 构建机器学习团队 24
2.4.1 两种文化 24
2.4.2 机器学习团队的成员 25
2.5 机器学习项目为何失败 26
2.5.1 缺乏有经验的人才 26
2.5.2 缺乏领导层的支持 26
2.5.3 数据基础设施缺失 27
2.5.4 数据标签的挑战 27
2.5.5 谷仓式组织和缺乏协作 28
2.5.6 技术上不可行的项目 28
2.5.7 技术团队和业务团队之间缺乏协调 28
2.6 小结 29
第3章 数据收集和准备 31
3.1 关于数据的问题 31
3.1.1 数据是否可获得 31
3.1.2 数据是否相当大 32
3.1.3 数据是否可用 34
3.1.4 数据是否可理解 35
3.1.5 数据是否可靠 36
3.2 数据的常见问题 37
3.2.1 高成本 37
3.2.2 质量差 39
3.2.3 噪声 39
3.2.4 偏差 40
3.2.5 预测能力低 45
3.2.6 过时的样本 45
3.2.7 离群值 46
3.2.8 数据泄露 47
3.3 什么是好数据 48
3.3.1 好数据是有信息的 48
3.3.2 好数据有好的覆盖面 48
3.3.3 好数据反映真实的输入 48
3.3.4 好数据没有偏差 49
3.3.5 好数据不是反馈环路的结果 49
3.3.6 好数据有一致的标签 49
3.3.7 好数据足够大 49
3.3.8 好数据总结 50
3.4 处理交互数据 50
3.5 数据泄露的原因 51
3.5.1 目标是一个特征的函数 51
3.5.2 特征隐藏目标 52
3.5.3 特征来自未来 52
3.6 数据划分 53
3.7 处理缺失的属性 55
3.7.1 数据填补技术 55
3.7.2 填补过程中的泄露问题 57
3.8 数据增强 57
3.8.1 图像的数据增强 57
3.8.2 文本的数据增强 59
3.9 处理不平衡的数据 60
3.9.1 过采样 60
3.9.2 欠采样 62
3.9.3 混合策略 62
3.10 数据采样策略 63
3.10.1 简单随机采样 63
3.10.2 系统采样 64
3.10.3 分层采样 64
3.11 存储数据 64
3.11.1 数据格式 65
3.11.2 数据存储级别 66
3.11.3 数据版本化 68
3.11.4 文档和元数据 69
3.11.5 数据生命周期 70
3.12 数据处理最佳实践 70
3.12.1 可重复性 70
3.12.2 数据第 一,算法第二 70
3.13 小结 71
第4章 特征工程 73
4.1 为什么要进行特征工程 73
4.2 如何进行特征工程 74
4.2.1 文本的特征工程 74
4.2.2 为什么词袋有用 77
4.2.3 将分类特征转换为数字 78
4.2.4 特征哈希 80
4.2.5 主题建模 81
4.2.6 时间序列的特征 85
4.2.7 发挥你的创造力 88
4.3 叠加特征 88
4.3.1 叠加特征向量 88
4.3.2 叠加单个特征 89
4.4 好特征的属性 90
4.4.1 高预测能力 90
4.4.2 快速计算能力 90
4.4.3 可靠性 91
4.4.4 不相关 91
4.4.5 其他属性 91
4.5 特征选择 92
4.5.1 切除长尾 92
4.5.2 Boruta 93
4.5.3 L1正则化 95
4.5.4 特定任务的特征选择 95
4.6 合成特征 96
4.6.1 特征离散化 96
4.6.2 从关系数据中合成特征 97
4.6.3 通过数据合成特征 99
4.6.4 通过其他特征合成特征 99
4.7 从数据中学习特征 100
4.7.1 单词嵌入 100
4.7.2 文档嵌入 102
4.7.3 任何东西的嵌入 103
4.7.4 选择嵌入维度 104
4.8 降维 104
4.8.1 用PCA快速降维 104
4.8.2 用于可视化的降维 105
4.9 缩放特征 105
4.9.1 归一化 105
4.9.2 标准化 106
4.10 特征工程中的数据泄露问题 107
4.10.1 可能出现的问题 107
4.10.2 解决方案 107
4.11 存储特征和编写文档 108
4.11.1 模式文件 108
4.11.2 特征商店 109
4.12 特征工程最佳实践 112
4.12.1 生成许多简单的特征 112
4.12.2 复用遗留系统 112
4.12.3 在需要时使用ID作为特征 112
4.12.4 但在可能时要减少基数 113
4.12.5 谨慎使用计数 113
4.12.6 必要时进行特征选择 114
4.12.7 认真测试代码 114
4.12.8 保持代码、模型和数据的同步性 115
4.12.9 隔离特征提取代码 115
4.12.10 将模型和特征提取器序列化在一起 115
4.12.11 记录特征的值 115
4.13 小结 115
第5章 监督模型训练(第 一部分) 117
5.1 开始模型工作之前 117
5.1.1 验证模式一致性 117
5.1.2 定义可实现的表现水平 118
5.1.3 选择表现指标 118
5.1.4 选择正确的基线 118
5.1.5 将数据分成三个集 121
5.1.6 监督学习的前提条件 122
5.2 为机器学习表示标签 122
5.2.1 多类分类 122
5.2.2 多标签分类 123
5.3 选择学习算法 124
5.3.1 学习算法的主要属性 124
5.3.2 算法抽查 125
5.4 建立流水线 126
5.5 评估模型表现 127
5.5.1 回归的表现指标 128
5.5.2 分类的表现指标 128
5.5.3 排名的表现指标 134
5.6 超参数调整 137
5.6.1 网格搜索 137
5.6.2 随机搜索 138
5.6.3 由粗到精搜索 139
5.6.4 其他技术 140
5.6.5 交叉验证 140
5.7 浅层模型训练 141
5.7.1 浅层模型训练策略 141
5.7.2 保存和恢复模型 142
5.8 偏差-方差折中 143
5.8.1 欠拟合 143
5.8.2 过拟合 143
5.8.3 折中 145
5.9 正则化 146
5.9.1 L1和L2正则化 147
5.9.2 其他形式的正则化 147
5.10 小结 148
第6章 监督模型训练(第二部分) 150
6.1 深度模型训练策略 150
6.1.1 神经网络训练策略 151
6.1.2 表现指标和成本函数 151
6.1.3 参数初始化策略 153
6.1.4 优化算法 154
6.1.5 学习率衰减安排表 158
6.1.6 正则化 159
6.1.7 网络规模搜索和超参数调整 160
6.1.8 处理多个输入 162
6.1.9 处理多个输出 162
6.1.10 迁移学习 163
6.2 堆叠模型 165
6.2.1 集成学习的类型 165
6.2.2 模型堆叠的一种算法 166
6.2.3 模型堆叠中的数据泄露问题 167
6.3 应对分布偏移 167
6.3.1 分布偏移的类型 167
6.3.2 对抗验证 168
6.4 处理不平衡数据集 168
6.4.1 类权重 169
6.4.2 重采样数据集的集成 169
6.4.3 其他技术 170
6.5 模型校准 170
6.5.1 良好校准的模型 171
6.5.2 校准技术 172
6.6 故障排除与误差分析 172
6.6.1 模范行为不良的原因 173
6.6.2 迭代模型的细化 173
6.6.3 误差分析 174
6.6.4 复杂系统的误差分析 175
6.6.5 使用切片指标 177
6.6.6 修复错误的标签 177
6.6.7 寻找其他的样本来标记 177
6.6.8 深度学习的故障排除 178
6.7 最佳实践 179
6.7.1 提供一个好模型 180
6.7.2 信任流行的开源实现方式 180
6.7.3 优化业务特定的表现指标 180
6.7.4 从头开始升级 180
6.7.5 避免修正级联 181
6.7.6 谨慎使用模型级联 181
6.7.7 编写高效的代码、编译和并行化 182
6.7.8 对较新和较旧数据都进行测试 183
6.7.9 更多的数据胜过更聪明的算法 183
6.7.10 新数据胜过巧妙的特征 184
6.7.11 拥抱微小进步 184
6.7.12 促进可重复性 184
6.8 小结 185
第7章 模型评估 187
7.1 离线和在线评估 188
7.2 A/B测试 190
7.2.1 G检验 190
7.2.2 Z检验 193
7.2.3 结语和警告 195
7.3 多臂老虎机 195
7.4 模型表现的统计界限 198
7.4.1 分类误差的统计区间 199
7.4.2 自举法统计区间 199
7.4.3 回归的自举法预测区间 201
7.5 评估测试集的充分性 201
7.5.1 神经元覆盖率 201
7.5.2 突变测试 202
7.6 模型属性的评估 202
7.6.1 健壮性 203
7.6.2 公平性 203
7.7 小结 204
第8章 模型部署 206
8.1 静态部署 206
8.2 在用户设备上动态部署 207
8.2.1 模型参数的部署 207
8.2.2 序列化对象的部署 208
8.2.3 部署到浏览器上 208
8.2.4 优点和缺点 208
8.3 在服务器上动态部署 209
8.3.1 在虚拟机上部署 209
8.3.2 在容器中部署 210
8.3.3 无服务器部署 211
8.3.4 模型流 212
8.4 部署策略 214
8.4.1 单一部署 214
8.4.2 静默部署 215
8.4.3 金丝雀部署 215
8.4.4 多臂老虎机 216
8.5 自动部署、版本管理和元数据 216
8.5.1 模型附带资产 216
8.5.2 版本同步 216
8.5.3 模型版本元数据 217
8.6 模型部署最佳实践 217
8.6.1 算法效率 218
8.6.2 深度模型的部署 221
8.6.3 缓存 221
8.6.4 模型和代码的交付格式 222
8.6.5 从一个简单的模型开始 224
8.6.6 对外测试 225
8.7 小结 225
第9章 模型服务、监测和维护 227
9.1 模型服务运行时的属性 227
9.1.1 安全性和正确性 227
9.1.2 部署的方便性 228
9.1.3 模型有效性的保证 228
9.1.4 易于恢复 229
9.1.5 避免训练/服务偏离 229
9.1.6 避免隐藏反馈环路 229
9.2 模型服务模式 230
9.2.1 批量模式服务 230
9.2.2 对人按需服务 231
9.2.3 对机器按需服务 232
9.3 现实世界中的模型服务 233
9.3.1 为错误做好准备 233
9.3.2 处理错误 234
9.3.3 做好准备,应对变化 236
9.3.4 做好准备,应对人性 237
9.4 模型监测 238
9.4.1 什么会出问题 238
9.4.2 监测的内容和方法 239
9.4.3 记录什么日志 241
9.4.4 监测滥用情况 242
9.5 模型维护 243
9.5.1 何时更新 243
9.5.2 如何更新 244
9.6 小结 246
第 10章 结论 249
10.1 学习收获 249
10.2 后续阅读 253
10.3 致谢 253