图书简介
实用性是本书的第一个基本出发点,书中介绍了近年来在工业界被广泛应 用的机器学习算法,这些算法经受了时间的考验,不但效果好而且使用方便。此 外作者也十分注意理论的深度和完整性,组织各章节的内容时力求由浅入深、推 理完整、先后连贯、自成体系,先讲统计学、矩阵、优化方法这些基础知识,再 由简到繁地介绍线性模型、概率图模型、文本向量化算法、树模型和神经网络, 神经网络主要指的是各种深层网络。跟绝大多数机器学习类的图书不同,本书 还会介绍算法周边的一些工程架构及实现原理,比如如何实时地收集训练样本 和监控算法指标、参数服务器的架构设计、做 AB 测试的注意事项等等,了解 这些知识对算法工程师是大有裨益的。
本书充分照顾机器学习初学者的知识水平,理论体系完整、公式推导清晰, 本科毕业的理工科学生都能看懂。另外由于本书跟工业实践结合得很紧密,所 以也非常适合于从事算法相关工作的工程师。
前言
我曾经在字节跳动工作过一段时间,那是一家企业文化让我感到很舒适的公司,我说的舒适指的是平等和开放,公司很有野心,员工也都十分优秀,每年校招总能吸引一大批优秀的毕业生前来面试。在面试算法岗的同学里有很大一部分人面临这样的困境:他们很勤奋,也上过数据挖掘、机器学习的相关课程,但是对算法的思想、特点把握得不准,也看不到各个算法之间的通性和联系,有些同学直接问我有什么书可以推荐。我深深地感到对于那些有一定机器学习基础而经验尚不丰富的同学来说,一本从实际应用出发、深挖算法原理的图书是多么地重要。不久之后我就开始了本书的编写,没想到这一写就是一年半的时间,在整理知识的过程中我也得到了进一步的提升,希望在今后的日子里也能和读者一起进步。
这本书更是写给进入职场的算法工程师的,我确定这里需要一个“更”字。直到今天我一直都是一线码农,我写的都是实际工作中效果好、见效快的算法,如果你是一名算法工程师,在读本书的过程中相信会引起更多的共鸣。我刚参加工作那几年买了不少机器学习方面的书,现在想想当初是多么地焦虑,如果那时我拥有一本《实用算法宝典》会是多么地开心。因此现在写书时心里一直有个美好的愿望,希望我能写出一本工业界的算法宝典,帮广大读者省去四处求索的时间。当然算法工程师还有另一个重要的学习途径------看论文,论文是关于算法的第一手资料,里面有原作者创作的心路历程。但是看论文对读者的知识技能要求比较高,因为写论文的人一般都会对算法的优点大书特书,而对劣势轻描淡写,道行浅的人难以辨别其中的水份有多少。相比之下写书的人会比较客观,他会把不同的算法放在一起对比,而且被写进书里面的算法都经过了时间的考验,所以读书对于初级选手来说是一种更友好的学习方式。
在难易程度上,我对本书的定位是深入浅出。“深入浅出”这个词已经被大家用滥了,看到这个词读者心目中想到的可能只有“浅出”,默认忽略了“深入”。而我一直在提醒自己写书一定要深入,不能为了简单易懂而故意避讳冗长的公式推导,深入才是对读者的负责。对于每一位想成为算法工程师的同学而言,你们都选择了一条注定艰辛的道路,不要幻想着通过轻轻松松看完一本书就能够领会各大主流算法的精髓。然而如果写书只顾着深入,那就成了作者一个人的自嗨,同样是对读者的不负责。为了帮助读者加速理解、减少疑惑,我会尽量从实际应用出发,多举一些工程实践中的例子,详细列出公式的推导过程,给出核心算法的代码实现,道破不同算法的内在联系。
目录
第1章 概述 1
1.1 机器学习基本流程 .......................... 1
1.2 业界常用算法............................. 2
1.3 构建机器学习系统 .......................... 3
第2章 统计学 5
2.1 概率分布 ............................... 5
2.1.1 期望与方差 .......................... 5
2.1.2 概率密度函数......................... 8
2.1.3 累积分布函数......................... 10
2.2 极大似然估计与贝叶斯估计 ..................... 10
2.2.1 极大似然估计......................... 11
2.2.2 贝叶斯参数估计........................ 13
2.2.3 共轭先验与平滑的关系.................... 14
2.3 置信区间 ............................... 15
2.3.1 t分布............................. 15
2.3.2 区间估计 ........................... 16
2.3.3 Wilson置信区间 ....................... 18
2.4 相关性................................. 19
2.4.1 数值变量的相关性 ...................... 19
2.4.2 分类变量的相关性 ...................... 21
2.4.3 顺序变量的相关性 ...................... 26
2.4.4 分布之间的距离........................ 26
第3章 矩阵 29
3.1 矩阵的物理意义............................ 29
3.1.1 矩阵是什么 .......................... 29
3.1.2 矩阵的行列式......................... 30
3.1.3 矩阵的逆 ........................... 30
3.1.4 特征值和特征向量 ...................... 31
3.2 矩阵的数值稳定性 .......................... 32
3.2.1 矩阵数值稳定性的度量.................... 32
3.2.2 基于列主元的gaussjordan消元法 ............. 32
3.2.3 岭回归............................. 36
3.3 矩阵分解 ............................... 37
3.3.1 特征值分解与奇异值分解 .................. 37
3.3.2 高维稀疏矩阵的特征值分解 ................. 39
3.3.3 基于矩阵分解的推荐算法 .................. 43
3.4 矩阵编程实践............................. 44
3.4.1 numpy数组运算 ....................... 44
3.4.2 稀疏矩阵的压缩方法..................... 48
3.4.3 用MapReduce实现矩阵乘法 ................ 50
第4章 优化方法 51
4.1 无约束优化方法............................ 51
4.1.1 梯度下降法 .......................... 51
4.1.2 拟牛顿法 ........................... 53
4.2 带约束优化方法............................ 55
4.3 在线学习方法............................. 58
4.3.1 SGD.............................. 58 4.3.2
FTRL............................. 59
4.4 深度学习中的优化方法........................ 66
4.4.1 动量法............................. 66
4.4.2 AdaGrad ........................... 67
4.4.3 RMSprop ........................... 67
4.4.4 Adadelta ........................... 67
4.4.5 Adam ............................. 68
4.5 EM算法................................ 68
4.5.1 Jensen不等式 ........................ 69
4.5.2 EM算法 ........................... 69
4.5.3 高斯混合模型......................... 73
第5章 线性模型 75
5.1 广义线性模型............................. 75
5.1.1 指数族分布 .......................... 75
5.1.2 广义线性模型......................... 76
5.2 LR................................... 79
5.3 FM................................... 80
5.3.1 特征组合 ........................... 80
5.3.2 分解机制 ........................... 81
5.3.3 FM造新特征的思路 ..................... 83
5.4 FFM.................................. 84
5.5 算法实验对比............................. 91
第6章 概率图模型 93
6.1 隐马尔可夫模型............................ 94
6.1.1 模型介绍 ........................... 94
6.1.2 模型训练 ........................... 97
6.1.3 模型预测 ........................... 98
6.2 条件随机场 .............................. 99
6.2.1 CRF模型及特征函数 .................... 99
6.2.2 向前变量和向后变量.....................103
6.2.3 模型训练 ...........................105
6.2.4 模型预测 ...........................107
6.2.5 CRF与HMM的对比....................107
第7章 文本向量化 109
7.1 词向量.................................109
7.1.1 word2vec ...........................109
7.1.2 fastText............................113
7.1.3 GloVe.............................114
7.1.4 算法实验对比.........................116
7.2 文档向量 ...............................118
7.2.1 ParagraphVector.......................118
7.2.2 LDA..............................120
第8章 树模型 125
8.1 决策树.................................125
8.1.1 分类树.............................125
8.1.2 回归树.............................129
8.1.3 剪枝..............................132
8.2 随机森林 ...............................133
8.3 AdaBoost ...............................134
8.4 XGBoost ...............................136
8.5 LightGBM...............................140
8.5.1 GOSS.............................141
8.5.2 互斥特征捆绑.........................141
8.5.3 Leaf-Wise生长策略 .....................142
8.5.4 DART.............................143
8.6 算法实验对比.............................144
第9章 神经网络 149
9.1 神经网络概述.............................149
9.1.1 网络模型 ...........................149
9.1.2 反向传播 ...........................152
9.1.3 损失函数 ...........................153
9.1.4 过拟合问题 ..........................153
9.1.5 梯度消失 ...........................155
9.1.6 参数初始化 ..........................156
9.2 卷积神经网络.............................157
9.2.1 卷积..............................157
9.2.2 池化..............................159
9.2.3 CNN网络结构 ........................160
9.2.4 textCNN ...........................161
9.3 循环神经网络.............................162
9.3.1 RNN通用架构........................162
9.3.2 RNN的学习问题.......................164
9.3.3 GRU..............................167
9.3.4 LSTM.............................168
9.3.5 seq2seq ............................171
9.4 注意力机制 ..............................173
第 10 章 Keras 编程 177
10.1快速上手 ...............................177
10.2 Keras 层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
10.2.1 Keras 内置层 . . . . . . . . . . . . . . . . . . . . . . . . . 179
10.2.2自定义层 ...........................186
10.3调试技巧 ...............................190
10.3.1查看中间层的输出 ......................190
10.3.2回调函数 ...........................191
10.4CNN和RNN的实现 ........................194
第 11 章 推荐系统实战 201
11.1问题建模 ...............................201
11.2数据预处理 ..............................204
11.2.1 归一化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
11.2.2特征哈希 ...........................206
11.3模型探索 ...............................207
11.3.1 基于共现的模型 . . . . . . . . . . . . . . . . . . . . . . . . 207
11.3.2 图模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
11.3.3 DeepFM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
11.3.4 DCN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
11.4推荐服务 ...............................219
11.4.1 RPC 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
11.4.2 gRPC 的使用 . . . . . . . . . . . . . . . . . . . . . . . . . 220
11.4.3 服务发现与负载均衡 . . . . . . . . . . . . . . . . . . . . . 224
第 12 章 收集训练数据 227
12.1日志的设计 ..............................227
12.2日志的传输 ..............................229
12.3日志的合并 ..............................236
12.4样本的存储 ..............................246
第 13 章 分布式训练 249
13.1参数服务器 ..............................249
13.2基于PS的优化算法 .........................255
13.3在线学习 ...............................257
第14章 A/B测试 259
14.1试验分组 ...............................259
14.2指标监控 ...............................264
14.2.1 指标的计算 . . . . . . . . . . . . . . . . . . . . . . . . . . 264
14.2.2指标的上报与存储 ......................265
14.2.3指标的展现与监控 ......................267
14.3 试验结果分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270