1.余弦距离的应用

为什么在一些场景中要使用余弦相似度而不是欧氏距离?

        对于两个向量A和B,其余弦相似度定义为: 

         

DeepJavaLibrary 余弦相似度 余弦相似度缺点_机器学习

         即两个向量夹角的余弦,关注的是向量之间的角度关系,并不关心它们的绝对大小,其取值范围是[-1,1]。当一对文本相似度的长度差距很大,但内容相近时,如果使用词频或词向量作为特征,它们在特征空间中的欧式距离通常很大;而如果使用余弦相似度的话,它们之间的夹角可能很小,因而相似度高。此外,当研究的对象的特征维度很高时,余弦相似度在高维情况下依然保持”相同时为1,正交时为0,相反时为-1“的性质,而欧氏距离的数值则受维度的影响,范围不固定,并且含义也比较模糊。

        总的来说,欧氏距离体现在数值上的绝对差异,而余弦相似度体现在方向上的相对差异。比如分析两个用户对于不同视频的篇好,更关注相对差异,应当使用余弦距离;而分析用户活跃度时,更关注数值的绝对差异,应当使用欧氏距离。

余弦距离是否是一个严格定义的距离?

余弦距离 

2.A/B测试的陷阱

         在对模型进行过充分的离线评估之后,为什么还要进行在线A/B测试?

        (1)离线评估无法完全消除模型过拟合的影响,因此,得出的离线评估结果无法完全替代线上评估结果。

        (2)离线评估无法完全还原线上的工程环境,一般来说,离线评估往往不会考虑线上环境的延迟 、数据丢失、标签数据缺失等情况。因此,离线评估的结果是理想工程环境下的结果。

        (3)线上系统的某些商业指标在离线评估中无法计算。离线评估一般是针对模型本身进行评估,而与模型相关的其他指标,往往无法直接获得。比如上线了新的推荐算法,离线评估往往关注的是ROC曲线、P-R曲线等的改进,而线上评估可以全面了解该推荐算法带来的用户点击率、留存时长、PV访问量等变化,这些都要由A/B测试来进行全面的评估。

如何进行线上A/B测试?

        进行A/B测试的主要手段是进行用户分桶,即将用户分成实验组和对照组,对实验组的用户施以新模型,对对照组的用户施以旧模型。在分桶的过程中,要注意样本的独立性和采样方式的无偏性,确保同一个用户每次只能分到同一个桶中,在分桶过程中所选取的user_id需要是一个随机数,这样才能保证桶中的样本是无偏的。

3.模型评估的方法

在模型评估过程中,有哪些主要的验证方法,它们的优缺点是什么?

Holdout检验。将原始的样本集合随机划分成训练集和验证集两部分。它的缺点是在验证集上计算出来的最后评估指标与原始分组有很大关系。

交叉验证k-fold交叉验证:首先将全部样本划分成k个大小相等的样本子集;依次遍历这k个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估;最后把k次评估指标的平均值作为最终的评估指标。

                留一验证:每次留下1个样本作为验证集,其余所有样本作为测试集。样本总数为n,依次对n个样本进行遍历,进行n次验证,再将评估指标求平均值得到最终的评估指标。

自助法。基于自主采样法的检验方法。对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出过的样本作为验证集,进行模型验证。

4.超参数调优

超参数有哪些调优方法?

网格搜索、随机搜索、贝叶斯优化等算法。超参数搜索算法一般包括以下三个要素。一是目标函数,即算法需要最大化/最小化的目标;二是搜索范围,一般通过上限和下限来确定;三是算法的其他参数,如搜索步长。

        网格搜索通过查找搜索范围内的所有的点来确定最优值。随机搜索是在搜索范围中随机选取样本点。贝叶斯优化通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。

5.过拟合与欠拟合 

在模型评估过程中,过拟合和欠拟合具体是指什么现象?

        过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。欠拟合指的是模型在训练和预测时表现都不好的情况。 如下图所示。 

DeepJavaLibrary 余弦相似度 余弦相似度缺点_机器学习_02

能否说出几种降低过拟合和欠拟合风险的方法 

降低过拟合风险的方法

        (1) 从数据入手,获得更多的训练数据。因为更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。

       (2)降低模型复杂度。适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如在神经网络模型中减少网络层数,神经元个数等;在决策时模型中降低树的深度,进行剪枝等。

        (3)正则化方法。给模型的参数加上一定的正则约束。

        (4)集成学习方法。集成学习是把多个模型集成在一起,来降低单一模型的过拟合风险,如Bagging方法。

降低欠拟合风险的方法:

        (1)添加新特征。当特征不足或者现有特征与样本标签的相关性不强时,模型容易出现欠拟合。

        (2)增加模型复杂度。通过增加模型的复杂度可以使模型拥有更强的拟合能力。如在神经网络在中添加网络层数或神经元个数。

        (3)减小正则化系数。正则化是用来防止过拟合的,但当模型出现欠拟合现象时,则需要有针对性地减小正则化系数。