百面机器学习
1. 特征工程
在机器学习中,数据和特征是“米”,模型和算法是“巧妇”。
特征工程,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使 用。
实际工作中,特征工程旨在去除原始数据中的杂质和冗余,设计更高的特征以刻画求解的问题和预测模型之间的关系。
1.1. 特征归一化/正则化(Normalization)
消除数据特征之间的量纲影响,使得不同指标之间具有可比性。使各指标处于同一个数值量级,以便进行分析。
为什么要对数值类型的特征做归一化?常见的归一化有哪些方式?
对数值类型的特征做归一化可以将所有的特征统一到一个大致相同的数值区间内,常用的方法主要有以下两种:
- 线性函数归一化(Min-Max Scaling)
对原始数据映射到
- 零值归一化(Z-Score Normalization)
将原始数据映射到均值为0、标准差为1的分布上。
不同的特征如果取值范围不同,那么在学习速率相同的情况下,会出现更新速度不同的现象,需要迭代多次才能找到较优解。一般,需要通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但是,对于决策树模型则并不适用。比如C4.5,决策树在进行节点分裂时,主要依据数据集关于特征信息的增益比,这和特征是否经过归一化无关。因为归一化不会改变样本在特征上的信息增益。
1.2. 类别型特征(Categorical Feature)
主要指性别(男、女),血型(A、B、AB、O)等只在有限选项内取值的特征。 原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,一般类别特征必须转换成数值型特征才能正确工作。
主要的方式包括:
- 序号编码(Ordinal Encoding)
- 独热变化(One-hot Encoding)
- 二进制编码(Binary Encoding)
在对数据进行预处理时,应该怎样处理类别型特征?
- 序号编码
通常用于处理类别间具有大小关系的数据。按照大小关系对类别特征赋予一个数值ID,转换后依然保留大小关系。
- 独热编码
通常用于处理类别间不由有大小关系的特征。需要注意的是:
- 使用稀疏向量来节省空间。
- 配合特征选择来降低维度。
高维空间下两点之间的距离很难得到有效地衡量,在逻辑回归模型中,参数的数量会随着维度的增高而增加,容易过拟合。通常只有部分维度对分类、预测有帮助。
- 二进制编码
利用二进制对ID 进行哈希映射,且维度少于独热编码。
- 其他编码方式
- Helmert Constrast
- Sum Constrast
- Polynomial Constrast
- Backward Difference Constrast
1.3. 高维组合特征的处理
为了提高复杂关系的拟合能力,在特征工程中,经常会把一阶离散特征两两组合,构成高阶组合特征。
的维度等于 ,这对于高维参数几乎无法学习,这种情况下,一种方法是,将用户和物品分别用维的低维向量表示,这样 ,等价于矩阵分解。
1.4. 组合特征
简单地两两组合,依然容易存在参数过多、过拟合等问题,并且并不是所有的特征组合都是有意义的。因此,需要一种有效的方法来帮助我们找到应该对哪些特征进行组合。
有效地找到特征组合,可以参考决策树,根据原始输入和标签构造决策树,每一条从根节点到叶节点的路径,都可以看作是一种组合。可以采用梯度提升决策树来构造。该方法的思想是,每次都在构建的决策树残差上构建下一棵决策树。
1.5. 文本表示模型
- 词袋模型(Bag of Words)TF-IDF(Term Frequency-Inverse Document Frequency)
- 主题模型(Topic Model)
- 词嵌入模型(Word Embedding)
词袋模型:将每篇文章看成一个袋子词,并忽略每个词出现的顺序。这个词袋向量的每一个维度代表一个单词,而该维度的权重反映了这个词在原文中的重要程度。常用TD-IDF 来计算权重
表示单词在文档中出现的平率, 是逆文档频率,用来衡量单词对表达语义的重要性
如果一个词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此需要对权重进行惩罚。
N-Gram模型:可以连续出现的个词组成的词组(),也作为一个单独的特征向量放到向量表示中去,构成这个模型。在实际应用中,一般会对单词进行词干抽取(Word Stemming)处理,即将不同词性的单词统一成为同一词干的形式。
主题模型:主题模型用于从文本库中发现有代表性的主题(得到每个主题上面词的分布特性),并且能够计算出每篇文章的主题分布。
词嵌入与深度学习模型:词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成低维空间(50~300)上的一个稠密向量。K 维空间的每一维也可以看作一个隐含的主题,只不过不像主题模型中的主题那样直观。
通常,如果仅仅把词嵌入矩阵作为原文本的表示特征输入到机器学习模型中,很难得到令人满意的结果。因此,还需要在此基础上加工出更高层的特征。深度学习的结构在文本处理中取得了很好的效果,主要是由于它们能够更好地对文本进行建模,抽取出更高一些的语义特征。另一方面,也减少了网络中待学习的参数,提高了训练的速度也降低了过拟合的风险。
1.6. Word2Vec
实际上是一种浅层的神经网络模型,一般有CBOW 和 Skip-gram 两种网络结构。
- CBOW:目标是根据上下文出现的词频来预测当前词的生成概率
- Skip-gram:根据当前词来预测上下文各词的生成概率
这两个模型都可由输入层(独热)、映射层(隐含层,CBOW 中还需要将各隐含单元求和。)和输出层组成。
输出的每一个维度和词汇表中的一个 单词相对应。最后,对输出层向量应用Softmax激活函数,可以计算出每个单词的生成概率。
Input-Hidden ()
Hidden-Output ()
可以通过反向传播算法实现,每次迭代时,将权重沿梯度更优的方向进行一小步。但是,由于softmax 中存在归一化,推导出来的迭代公式需要对词汇表中的所有单词进行遍历,使得迭代的过程非常缓慢。由此,产生了 Hierarchical Softmax 和 Negative Sampling 两种改进方法。
- 与 LDA(隐狄利克雷模型)的区别和联系
LDA:利用文档中单词的共现关系来对单词按主题聚类,也可理解为对“文档-单词”矩阵进行分解,得到“文档-主题”和“主题-单词”的两个概率分布。
Word2Vec:对“上下文-单词”矩阵进行分解。其中上下文有周围的几个单词组成,由此得到的词向量表示等多地融入了 上下文共现的特征。
也就是说,如果两个单词所对应的Word2Vec向量相似度较高,那么它们很可能经常出现在同样的上下文中。
主题模型可以通过一定的结构调整,基于“上下文-单词”矩阵进行主题推理,词嵌入方法也可以根据“文档-单词”矩阵学习出词的隐含向量表示。
主题模型和词嵌入两类方法的不同在于:模型本身
- 主题模型是一种基于概率图模型的生成模型,其似然函数可以些成若干条件概率连乘的形式,其中包括需要推测的隐含变量(主题);
- 词嵌入模型一般表达为神经网络的形式,似然函数定义在网络的输出之上,需要通过学习网络的权重以得到单词的稠密向量表示。
1.7. 图像数据不足时的处理方法
(可能会过拟合)
迁移学习、生成对抗网络、上采样技术、数据扩充
一个模型所能提供的信息一般来源于:
- 训练数据中蕴含的信息
- 模型的形成过程中(构造、学习、推理),人提供的先验信息
训练数据不足,则说明从原始数据中获取的信息比较少。那就需要更多的先验信息。
- 用在模型上:结构、条件假设、添加约束
- 用在数据上:调整、变换、扩展等
手段:
- 基于模型方法(降低过拟合风险):
- 简化模型(非线性转化为线性)
- 添加约束项以缩小假设空间(L1/L2 正则项)
- 集成学习
- Dropout 超参数
- 基于数据
- 扩充数据(Data Augmentation),基于一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换。
- 随机旋转、平移、缩放、裁剪、填充、左右翻转等
- 在图像中的像素添加噪声扰动,比如椒盐噪声、高斯白噪声
- 颜色变换
- 改变图像的亮度、清晰度、对比度、锐度等
- 扩充数据(Data Augmentation),基于一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换。
- 先对图像进行特征抽取,然后在图像的特征空间内进行变换,利用一些数据扩充或者上采样技术,例如SMOTE(Synthetic Minority Over-sampling Technique)算法。
- 生成模型:GAN
- 迁移模型,比如借用一个在大规模数据集上预训练号的通用模型,并在针对目标任务的小数据集上进行微调。
2. 模型评估
只有选择和问题相匹配的评估方法,才能快速地发现模型选择或训练过程中出现的问题。
- 离线评估
- 在线评估
2.1. 评估指标的局限性
准确率的局限
当负样本占99%时,把所有样本都预测为负样本,也可以获得99%的准确率,这是不合理的。
当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的重要因素。
可以使用平均准确率作为模型评估的指标。
精确率与召回率的权衡
- 精确率:分类正确的正样本个数占分类其判定为正样本的个数的比例;通过将更有把握时才把样本预测为正样本来提高。往往会漏掉很多没有把握的正样本,导致recall 指下降
- 召回率:分类正确的正样本个数占真正正样本个数的比例
为了综合评估一个排序模型的好坏,不仅要看模型在不同 Top N 的 Precision@N 和 Recall@N,并且绘制 P-R 曲线。
F1 值是精准率和召回率的调和平均值:
平方根误差的“意外”
对于回归模型来预测某部美剧的流量趋势,但无论采用哪种回归模型,得到的 RMSE 指标都非常高。但实际上,95% 的时间区间内的 预测误差率都小于1%,为什么?
一般用于反映回归模型预测值与真实值的偏离程度。但如果实际问题中,存在个别偏离程度非常大的离群点(outlier)时,即使离群点数量非常少,也会让RMSE指标变得非常差。很可能,其他5% 时间区间内存在非常严重的离群点。比如流量特别小的美剧,刚上映的美剧或者刚获奖的。
解决方案:
- 如果认定离群点时 噪声的话,可以在数据预处理时把噪声过滤掉。
- 如果离群点不是噪声,需要进一步提高模型的预测能力,将离群点的产生机制建模进去。
- 找一个更合适的指标来评估该模型。比如平均绝对百分比误差(MAPE)
相对于 RMSE,MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差。
每个评估值都有其价值,如果只从单一的评估指标出发去评估模型,往往会得出片面甚至错误的结论;通过一组互补的指标去评估模型,可以更好地发现并解决模型存在的问题。
2.2. ROC 曲线
常常作为评估二值分类器最重要的指标之一。
什么是ROC曲线?
Receiver Operating Characteristic Curve 受试者工作特性曲线,起源于军事领域,在医学领域应用甚广。
- 横座标:假阳性率(False Positive Rate, FPR) FPR = FP/ N
- 纵座标:真阳性率(True Positive Ratem TPR) TPR = TP/P
如何绘制?
ROC 曲线是通过不断移动分类器的“截断点”来生成曲线上的一组关键点的。
- 截断点:区分正负预测结果的阈值。
实用步骤:
- 根据样本标签统计出正负样本数量(P,N)把横轴刻度间隔设置为 1/N,纵轴为 1/P ,再根据模型输出的预测概率对样本进行从高到低的排序
- 遍历样本,同时从ROC零点开始绘制。每遇到一个正样本就沿着纵轴防线绘制一个刻度区间,遇到负样本就沿着横轴绘制一个刻度区间。直到遍历完成。
如何计算 AUC ?
Area Under Curve 是ROC曲线下的面积大小,能够反映模型性能。 AUC 越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
ROC 和 P-R 相比又什么特点?
- 当负样本分布发生变化时,ROC曲线的形状能基本保持不变,而P-R 曲线的形状一般会发生剧烈变化。
在很多实际问题中,正负样本数量往往很不均衡,比如计算广告领域经常涉及转化率模型,正样本的数量往往是负样本的1/1000 甚至是 1/10000。选择不同的测试集合,P-R 曲线的变化就会非常大。
ROC的应用更广泛,于排序、推荐、广告。如果希望在特定数据集上的表现,那么实用 P-R 模型则更能够直观反映性能。
2.3. 余弦距 离的应用
评估样本距离也是定义优化目标和训练方法的基础。
余弦相似度的取值范围是,1减去余弦相似度即为余弦距离。
什么场合用余弦相似度,什么场合用欧式距离?
关于向量和,其余弦相似度定义为
即两个向量夹角的余弦,关注的是向量之间的角度关系,并不关心他们的绝对大小。
当一对文本相似度的长度差距很大、但内容相近时,如果使用词频或词向量作为特征,他们的欧式距离可能很大,但夹角可能很小,因而相似度很高。
文本、图像、视频等领域,研究的对象特征维度往往很高,余弦相似度在高维情况下依然保持相同为1,正交为0,相反为-1。
一般来说
- 表示欧式距离(强调绝对差异)
- 表示余弦相似度
- 表示余弦距离(强调相对差异)
余弦距离,并不是一个严格定义的距离。
- 正定性:满足,
- 对称性:满足
- 三角不等式,不一定。
KL 距离,也叫相对熵,不满足对称性和三角不等式
2.4. A/B 测试
A/B 测试是常用的验证新功能、新模块、新产品是否有提升的方法。常常是机器学习中验证模型最终效果的主要手段。
需要在线A/B测试的原因:
- 离线评估无法完全消除模型过拟合的影响,因此,得出的结果无法替代线上评估的结果
- 离线评估无法完全还原线上的工作环境。离线评估往往不会考虑线上环境的延迟、数据丢失、标签数据缺失等情况。因此,离线 评估的结果是理想工程环境下的结果。
- 线上系统的某些商业指标在离线评估中无法计算。离线评估(ROC曲线,P-R曲线等)往往针对模型本身,而商业指标(用户点击率,留存时长,PV访问量等),往往无法评估。
如何进行线上A/B测试:
- 进行用户分桶,实验组和对照组,样本的独立性和采样方式的无偏性,确保同一用户每次只能分到同一个桶中,在分桶的过程中选取的 user_id 需要是一个随机数。
划分对照组和实验组:
- 无偏
- 正确
2.5. 模型评估的方法
-
Holdout 检验
- 将原始样本集合随机划分成训练集和验证集两个部分。
- 缺点:验证集上计算出来的最后评估指标与原始分组有很大关系。
-
交叉检验
- k-fold 交叉验证:将全部样本划分成 个大小相等的样本,一次遍历这 个子集,每次把当前子集作为验证集,其余所有子集作为训练集。最后把 次评估指标的平均值作为最终的评估指标。常常
- 留一验证:每次留下1个样本作为验证集,其余样本作为测试集。n次验证后,取平均值作为最终的评估指标。
-
自助法
- 基于自助采样的检验方法,对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。采样过程中,有的样本被重复采样,有的样本没有被抽出,没有被抽出的作为验证集。
- 当对n个样本进行n次自助采样,当,一个样本未被抽中的概率为
2.6. 超参数调整优
目标函数,搜索范围,算法的其他参数,例如搜索步长等。
- 网格搜索:最简单,查找搜索范围内所有的点来确定最优值。耗时
- 随机搜索:与网格搜索类似,不再搜索上下界之间的所有值,而是在搜索范围内随机选取样本点。依据是,如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优。
- 贝叶斯优化:前面两种搜索会在测试新点时,忽略前一点的信息,而贝叶斯优化则充分利用之间的信息。通过对目标函数形状进行学习。容易陷入局部最优。先给出一个经验分布,然后每一次使用新点测试时,利用这个信息来更新目标函数的先验分布,最后算法测试由后验分布给出的全局最值可能出现的位置点。