第 1 章-特征工程
01 特征归一化
问题:为什么需要对数值类型的特征做归一化?
对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。这样做的目的是消除数据特征之间的量纲影响,使得不同的指标之间具有可比性,帮助在进行迭代优化(如梯度下降)时更快地收敛至最优解。最常用的归一化方法有以下两种:
- 线性函数归一化:对原始数据进行线性变换,将结果映射到 [0, 1] 的范围
- 零均值归一化:将原始数据映射到均值为 0,标准差为 1 的分布上
在实际应用中,通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但是对于决策树、随机森林、朴素贝叶斯等优化时不依赖原始数据值的算法,不需要进行特征归一化。
02 类别型特征
问题:在对数据进行预处理时,应该怎样处理类别型特征?
类别型特征主要指只在有限选项内取值的特征,其原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回顾、支持向量机等模型来说,类别型特征必须经过处理转换为数值型特征才能正确工作。
关于类别型特征的处理,主要有如下三种方式:
- 序号编码:处理类别间具有大小关系的数据
- 独热编码:处理类别间不具有大小关系的特征,当类别值较多时需要注意稀疏性和特征选择问题
- 二进制编码:先用序号编码给每个类别赋予一个类别 ID,再将其对应的二进制编码作为结果(与独热编码比一般可以节省存储空间)
03 高维组合特征的处理
问题:什么是组合特征?如何处理高维组合特征?
为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。对于高维组合特征,直接组合会导致参数规模过大,这种情况下可以先将高维特征向量降维,再进行组合(在推荐系统中这等价于矩阵分解)。
04 组合特征
问题:怎样有效地找到组合特征?
上一节介绍了如何利用降维方法来减少两个高维特征组合后需要学习的参数。但是在很多实际问题中,不是所有的特征组合都是有意义的,我们需要一种有效地方法来帮助我们找到应该对哪些特征进行组合。一种可行的方法是基于决策树寻找特征组合,基于训练好的决策树的节点来选择特征组合(具体不作阐述)。
05 文本表示模型
问题:有哪些文本表示模型?它们各有什么优缺点?
这里介绍了三类文本表示模型,分别是:
- 词袋模型和 N-gram 模型。最早出现的一种表示文本的模型,将每篇文章看成一袋子词,并忽略词语顺序,即将每篇文章表示为一个长向量,向量的每一维表示一个单词,该维对应的权重反映词语在文章中的重要程度,常用 TF-IDF 来计算。N-gram 模型指将连续出现的 n 个词组成的词组作为一个单独的特征放到向量表示中去。
- 主题模型。用于从文本库中发现有代表性的主题,并且能够计算出每篇文章的主题分布,代表模型有 LDA。
- 词嵌入。用于将一个词语映射到低维空间上的一个稠密向量,向量的每一维可以看作一个隐含的主题。当前词嵌入可以分为静态词嵌入和动态上下文词嵌入两种,静态的代表模型有 Word2Vec,动态的代表模型有 BERT。
06 Word2Vec
问题:Word2Vec 是如何工作的?它和 LDA 有什么区别和联系?
Word2Vec 实际上是一种浅层的神经网络模型,它有两种网络结构,分别是 CBOW 和 Skip-gram。CBOW 的目标是根据上下文出现的词语来预测当前词的生成概率,而 Skip-gram 则是根据当前词来预测上下文中各词的生成概率,如下图所示:
两者是由输入层、映射层和输出层组成的神经网络。其中
是当前所关注的词,这里假设上下文滑动窗口的大小为 2(一般 5 左右?)。输入层中每个词由 one-hot 编码表示,为
维向量(
为词典长度)。在映射层中,
个隐藏单元的取值由
维输入向量及连接输入和隐含单元的
权重矩阵计算得到。在 CBOW 中,还需要对所有输入进行求和平均。同理,输出层向量通过一个
的矩阵计算输出一个
维向量(实际计算的时候可能都是取的转置来得到列向量),再经过 softmax 转换为概率。softmax 定义为:
基于输出的概率,我们通过使得语料库中所有单词的整体概率最大化来训练权重(等价于交叉熵函数),即两个层与层之间的权重矩阵。这里通过反向传播算法实现,每次迭代将权重沿着梯度更优的方向进行一小步更新。然而由于 softmax 函数总存在归一化项,迭代时需要对词汇表中所有单词进行遍历,使得迭代过程非常缓慢,由此产生了 Negative sampling 和 Hierarchical softmax 两种改进方法,前者通过采集部分负样本减少计算量,后者通过构建二叉树减少计算量。训练完成后,我们可以选择两个权重矩阵中的任意一个来输出
维词嵌入。
关于 Word2Vec 和 LDA 的区别和联系,从具体方法来看,LDA 是利用文档中单词的共现关系来对单词按主题聚类,可以理解为对“文档-单词”矩阵进行分解,得到“文档-主题”和“主题-单词”两个概率分布;而 Word2Vec 则是对“上下文-单词”矩阵进行学习,其中上下文由目标单词周围的几个单词组成。而这只是这两种具体模型之间的区别,本质上来看,主题模型是一种基于概率图模型的生成式模型,其似然函数可以写成若干条件概率连乘的形式,其中包括需要推测的隐含变量;而词嵌入模型一般表达为神经网络的形式,似然函数基于网络的输出定义,需要通过学习网络的权重得到单词的稠密向量表示。
07 图像数据不足时的处理方法
问题:在图像分类任务中,训练数据不足会带来什么问题?如何缓解数据量不足带来的问题?
在图像分类任务上,训练数据不足带来的问题主要表现在过拟合方面,即模型在训练样本上的效果可能还不错,但是在测试集上的泛化效果不佳。处理方法大致可以分为三类,一是基于模型的方法,采用措施来降低过拟合风险,包括简化模型、添加正则项、集成学习、Dropout 超参数等;二是基于数据的方法,对原始数据进行适当变换以达到扩充数据集的效果;三是进行迁移学习,可以借用一个在大规模数据集上预训练好的通用模型,在针对目标任务的小数据集上进行微调。
第 2 章-模型评估
01 评估指标的局限性
在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不同的指标进行评估,而大部分的评估指标往往只能反映模型的一部分性能。下面通过几个模型评估场景介绍评估指标的局限性。
问题 1:准确率的局限性。在广告定向投放场景中,一个奢侈品用户分类模型的分类准确率超过了 95%,但在实际广告投放过程中,该模型还是把大部用户识别为了非奢侈品用户,这可能是什么原因造成的?
准确率是指分类正确的样本占总样本个数的比例,即:
在本题中,线上效果不佳的主要原因可能为不同样本类别比例的不均衡。当某一样本比例明显较多时(如负样本占 99%),分类器将所有样本都预测为负样本可以获得 99% 的准确率,但是实际上并不能正确地识别正样本。
在本问题中,奢侈品用户对应为比例较小的正样本。虽然模型的整体分类准确率比较高,但是不代表对奢侈品用户的分类准确率也很高。为了解决这个问题,可以使用更为有效的平均准确率(每个类别下的样本准确率的算术平均,实际上就是每个类别精准率的平均)作为模型评估的指标。
问题 2:精准率和召回率的权衡。在视频模糊搜索场景中,搜索排序模型返回的 Top 5 的精确率非常高,但是实际使用过程中,用户还是经常找不到想要的视频,特别是一些比较冷门的剧集,这可能是哪个环节出了问题呢?
首先明确一下精准率和召回率的概念。精准率(precision)是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例;而召回率(recall)则是指分类正确的正样本个数占真正的正样本个数的比例。精准率和召回率是既矛盾又统一的两个指标,提升其中的一个往往会引起另一个的下降。下图对这两个概念进行了非常形象的说明。
在排序问题中,通常没有一个确定的阈值来把结果直接判定为正负样本,而是采用前 N 个(Top N)返回结果的精准率和召回率来衡量排序模型的性能,即认为模型返回的 Top N 的结果就是正样本,记作 Precision@N 和 Recall@N。
在本问题中,模型返回的 Precision@5 的效果非常好,但是用户体验不佳,找不到想要的视频,说明模型没有把相关的视频全部找出来呈现给用户,即问题出在召回率上。对于 Top 5 的结果来说,假设相关结果有 100 个,即使 Precision@5 达到了 100%,Recall@5 也只有 5%。因此在模型评估时,我们有时需要同时关注精准率和召回率,同时选取不同的 Top N 结果进行观察。
我们还可以选取一些更高阶的评估指标来更全面地反映模型在精准率和召回率量两方面的表现,即模型的 P-R 曲线(Precision-Recall)。P-R 曲线的横轴为召回率,纵轴为精准率,整条曲线是通过将阈值从高到低移动生成的,原点附近代表当阈值最大时模型的精准率和召回率。下图给出了两种模型的 P-R 曲线示意图,我们需要基于曲线的整体表现来对模型进行更为全面的评估。
此外,我们还可以通过 F1 值、ROC 曲线和平均精度(AP)来综合地评估排序模型的性能。F1 值是精准率和召回率的调和平均,其定义为:
ROC 曲线将在下一节中进行详细介绍。而 AP 常用于信息检索和目标检测领域,其计算公式如下:
AP 可以理解为在同一召回率时最高的准确率的均值。如果包含多个序列,则将每个序列的 AP 再平均即可得到 MAP。下图对 AP 和 MAP 的计算方式进行了比较形象的说明:
问题 3:均方根误差的意外。在美剧流量趋势预测场景中,无论采用哪种回归模型,得到的 RMSE 指标都非常高。然而实际上,模型在 95% 的时间区间内的预测误差都小于 1%,造成 RMSE 指标居高不下的最可能原因是什么?
RMSE(均方根误差)经常被用来衡量回归模型的好坏,其计算公式为:
在本问题中,RMSE 指标居高不下的最可能原因是存在个别偏离程度非常大的离群点(Outlier),导致整体的指标变得很差。针对这个问题,可以从三个角度来提出解决方案:
- 认定离群点为噪声,在数据预处理阶段将这些噪声点去除
- 将离群点考虑到模型的预测中去(较难)
- 找到一个更合适的指标来评估模型
针对第三点,一个比 RMSE 鲁棒性更好的指标是 MAPE(平均绝对百分比误差),其计算公式为:
与 RMSE 相比,MAPE 相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。
02 ROC 曲线
ROC 曲线是评估二值分类器的重要指标之一,本节将介绍 ROC 曲线的绘制方法和特点。
问题 1:什么是 ROC 曲线?
ROC 曲线是 Receiver Operating Characteristic Curve 的简称,中文名为“受试者工作特征曲线”,其源于军事领域,而后在医学领域应用较为广泛。
ROC 曲线的横坐标为假阳性率(FPR),纵坐标为真阳性率(TPR)。它们的计算公式分别为:
其中
为真实的正样本的数量,
为真实的负样本的数量,
为
个正样本中被分类器预测为正样本的个数,
为
个负样本中被分类器预测为正样本的个数。
问题 2:如何绘制 ROC 曲线?
ROC 曲线绘制的标准方法为通过不断移动分类器的“截断点”来生成曲线上的关键点。具体来说,二分类中模型的输出一般为预测样本为正例的概率,我们将样本按照预测概率从高到低排序,将每个样本的输出概率设置为区分正负预测结果的阈值(截断点),并从高到低逐渐移动截断点,得到一系列的 FPR 和 TPR,将其绘制在 ROC 图中,连接所有的点就可以得到 ROC 曲线,如下图所示:
另一种 ROC 曲线的绘制方法为:根据样本真实标签统计出正负样本的数量,假设正样本数量为
,负样本数量为
;把横轴的刻度间隔设为
,纵轴的刻度间隔设为
;根据模型输出的预测概率对样本从高到低排序,依次遍历样本,从零点开始绘制 ROC 曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,直到遍历完所有样本,曲线最终停在
这个点,即绘制完成。
问题 3:如何计算 AUC?
AUC 指 ROC 曲线下面积的大小,能够量化地反映基于 ROC 曲线衡量出的模型性能。AUC 的计算方法为沿着 ROC 横轴对曲线积分即可。由于 ROC 曲线一般位于
这条直线的上方(如果不是的话将概率反转即可得到更好的分类器),所以 AUC 的取值一般在 0.5-1 之间。AUC 越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
问题 4:ROC 曲线相比 P-R 曲线有什么特点?
ROC 曲线和 P-R 曲线的绘制方式均为动态移动阈值生成不同的点,区别在于 ROC 曲线的横纵坐标分别为假阳性率和真阳性率,而 P-R 曲线则为召回率和精准率。相比 P-R 曲线,ROC 曲线的特点为对于同一个模型,当测试集中正负样本的分布发生变化时,ROC 曲线的形状能够基本保持不变,而 P-R 曲线的形状一般会发生比较剧烈的变化,如下图所示:
基于这个特点,ROC 曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。而 P-R 曲线则能更直观地反映模型在特定数据集上的表现。
03 余弦距离的应用
在模型训练的过程中,有时我们需要评估样本之间的距离(相似度)。在机器学习问题中,通常将特征表示为向量的形式,最常用的两种度量相似性的方法为欧式距离和余弦相似度(距离),欧式距离(即 L2 范数)的计算公式为(以二维为例):
余弦相似度的定义为:
其取值范围为
,将 1 减去余弦相似度即为余弦距离,其取值范围为
。
问题 1:欧式距离和余弦距离的主要区别是什么?
欧式距离关注数值上的绝对差异,而余弦距离则关注方向上的相对差异。在高维情况下,余弦相似度可以保持“相同时为1,正交时为0,相反时为−1”的性质,而欧氏距离则范围不固定,且含义较模糊。而在某些场景(例如 Word2Vec 中,其向量模长是经过归一化的,此时欧式距离和余弦距离有着单调的关系:
余弦相似度的一个缺陷在于其无法衡量不同维度上的数值的差异,在某些场景(如推荐系统)下我们需要将这种差异考虑进来。调整余弦相似度通过将每个维度上的数值减去其所有维度上的均值,达到消除维度间差异的目的:
在推荐领域另一个常用的度量指标为皮尔逊相关系数,其与调整余弦相似度非常接近,区别在于其减去的均值基于两个用户共同评分的项目,而非每个用户各自评分的项目。
问题 2:余弦距离是否是一个严格定义的距离?
距离的定义为:在一个集合中,如果每一对元素均可唯一确定一个实数,使得三条距离公理(正定性、对称性、三角不等式)成立,则该实数可以称为这对元素之间的距离。余弦距离满足正定性和对称性,但是不满足三角不等式,因此并不是严格定义的距离。关于三条公理的证明如下:
正定性。根据余弦距离的定义,有:
由于
,因此
恒成立,当且仅当
(方向相同)时等号成立。
对称性。根据余弦距离的定义,有:
因此余弦距离满足对称性
三角不等式。在上一个问题中,我们知道单位圆上欧式距离和余弦距离满足:
即:
由于欧式距离为合法距离,而余弦距离与欧式距离有二次关系,自然不满足三角不等式。我们可以假设单位圆上有三个非常接近的点,其中 A 与 B,B 与 C 的欧式距离为极小量
,对应的余弦距离为
;由于三点之间近似为一条直线,所以 A 与 C 的欧式距离接近于
,而对应的余弦距离为
,大于 A 与 B、B 与 C 的余弦距离之和。
在机器学习领域,被俗称为距离却不满足三条距离公理的不仅有余弦距离,还有 KL 距离,也称为相对熵,其常用于计算两个分布之间的差异,但不满足对称性和三角不等式。
04 A/B 测试的陷阱
在机器学习领域,A/B 测试是验证模型最终效果的主要手段。
问题 1:在对模型进行过充分的离线评估后,为什么还要进行在线 A/B 测试?
需要进行在线 A/B 测试的原因如下:
- 离线评估无法完全消除模型过拟合的影响,不能完全替代线上评估结果
- 离线评估无法完全还原线上的工作环境
- 线上系统的某些商业指标在离线评估中无法计算,如用户点击率、留存时长等
问题 2:如何进行线上 A/B 测试?
进行 A/B 测试的主要手段是进行用户分桶,即将用户分成实验组和对照组,对实验组的用户施以新模型,对对照组的用户施以旧模型。在分桶的过程中,要注意样本的独立性和采样方式的无偏性,确保同一个用户每次只能分到同一个桶中,且 user_id 的选取应该是随机的(还要注意总体的选择)。
05 模型评估的方法
在样本划分和验证的过程中,存在着不同的抽样方法和验证方法。注意这里只考虑训练集和验证集,不考虑额外的测试集。
问题 1:在模型评估过程中,有哪些主要的验证方法,其优缺点是什么?
这里介绍三种常用的验证方法:Holdout 检验,交叉检验和自助法。
Holdout 检验。Holdout 检验是最简单也最直接的验证方法,即将原始的样本集合随机划分成训练集和验证集两部分。划分的比例视数据集大小而定,传统机器学习领域常用的划分比例是 70% 的样本用于模型训练,30% 的样本用于模型验证;在深度学习领域则训练集的比例会更大(因为数据总量更大,没有必要用 30% 的样本作为验证集)。Holdout 检验的主要缺点是:在验证集上计算出来评估指标与原始分组有很大关系,为了消除随机性,研究者们引入了”交叉检验“的思想。
交叉检验。将全部样本划分成 k 个大小相等的样本子集;依次遍历这 k 个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估;最后把 k 次评估指标的平均值作为最终的评估指标。在实际实验中,k 经常取 10。这种方法也称为 k-fold 交叉验证。
当每个子集仅包含 1 个样本时,即每次留下 1 个样本作为验证集,其余所有样本作为训练集。假设样本总数为 n,依次对 n 个样本进行遍历,进行 n 次验证,再将评估指标求平均值得到最终的评估指标。这种方法称为留一验证,一般适用于样本总数较少的情况(否则时间开销极大)。如果每次留下 p 个样本作为验证集,则为留 p 验证,由于从 n 个元素中选择 p 个元素有
种可能,因此其时间开销更是远远高于留一验证,在实际工程中很少使用。留一验证既可以看做 k-fold 交叉验证的特例,也可以理解为留 p 验证的特例。
自助法。上述两类方法都是基于划分训练集和验证集进行模型评估的,当样本规模较小时,将样本集进行划分会进一步减小训练集,可能影响模型的训练效果。自助法是一种可以维持训练集样本规模的验证方法,其基于自助采样法。对于总数为 n 的样本集合,进行 n 次有放回的随机抽样,得到大小为 n 的训练集。n 次采样的过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证(通过多次自助采样生成多个训练集和验证集)。
问题 2:在自助法的采样过程中,对 n 个样本进行 n 次自助采样,当 n 趋向于无穷大时,最终有多少数从未被选择过?
一个样本在一次抽样过程中未被抽中的概率为
,
次抽样均未抽中的概率为
,当
趋于无穷大时,概率为
。根据重要极限
,我们有:
因此,当样本数很大时,大约有 36.8% 的样本从未被选择过,可作为验证集。
06 超参数调优
问题:超参数有哪些调优方法?
超参数搜索算法一般包括如下几个要素:
- 目标函数:算法需要最大化/最小化的目标(注意该函数是超参数的函数,并不是损失函数)
- 搜索范围:一般通过上限和下限来确定
- 其他参数:如搜索步长
本节介绍三种常用的超参数调优方法:网格搜索、随机搜索和贝叶斯优化。
网格搜索。通过查找搜索范围内所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网格搜索有较大概率找到全局最优值,但这种方法比较消耗计算资源和时间。在实际应用中,一种改进方法是先使用较广的搜索范围和较大的步长,寻找全局最优可能的位置;然后逐渐缩小搜索范围和步长,来寻找更精确的最优值。这种方法可以降低计算时间和计算量,但是由于目标函数一般非凸(存在局部最优),可能会错过全局最优值。
随机搜索。随机搜索和网格搜索类似,只是不再测试上界和下界间的所有值,而是在搜索范围内随机选取样本点(超参数)。如果样本点集足够大,那么通过随机采样也能大概率找到全局最优值或其近似值。随机搜索一般会比网格搜索更快,但与网格搜索的改进版一样,最终的结果也是无法保证最优。
贝叶斯优化。贝叶斯方法的调优方式和前面两种完全不同,其充分利用了之前测试的信息。贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。具体来说,其学习目标函数形状的方法是:
- 根据先验分布,假设一个搜集函数
- 每次使用新的采样点来测试目标函数时,利用当前信息来更新目标函数的先验分布
- 测试由后验分布给出的全局最优值最可能出现的位置的点(超参数)
为了防止陷入局部最优,该方法会在探索和利用之间找到一个平衡点:探索指在还未取样的区域内获取采样点,利用则是根据后验分布最可能出现全局最值的区域进行采样。
07 过拟合与欠拟合
问题 1:在模型评估过程中,过拟合和欠拟合具体是指什么现象?
过拟合是指模型对于训练数据拟合呈现过当的情况,反映到评估指标上,即模型在训练集上的表现很好,但在新数据上的表现较差。欠拟合则是模型在训练和预测时表现都不好的情况。下图展示了二维数据下过拟合和欠拟合的直观表现:
问题 2:请说出几种降低过拟合和欠拟合风险的方法?
降低过拟合风险的方法:
- 使用更多的训练数据。更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。如果直接增加数据很困难,可以通过该一定的规则来扩充训练数据(参考第一章 07-图像数据不足的处理方法)。
- 降低模型复杂度。当数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。如在神经网络中减少网络层数、在决策树中降低树的深度等。
- 正则化方法。给模型的参数加上一定的正则约束(贝叶斯角度理解即为后验概率最大化),常用的有 L1 和 L2 正则化。
- 集成学习方法。集成学习中的 Bagging 方法可以降低单一模型的过拟合风险。
降低欠拟合风险的方法:
- 添加新特征。当特征不足或现有特征与样本标签的相关性不强时,模型容易出现欠拟合(对部分不需要构建特征的深度学习领域不适用,如 CV)。可以通过特征工程发现添加新的特征,当前一些新兴模型可以帮助完成特征工程,如因子分解机(FM)、梯度提升决策树(GBDT)、Deep-crossing 等。
- 增加模型复杂度。简单模型的学习能力较差,通过增加模型复杂度可以使模型拥有更强的拟合能力。
- 减小正则化系数。当模型出现欠拟合时,可能是正则化系数设置过大,需要有针对性地减小系数。
思维导图
- To Be Continued -