【ML面试题目】9-

9.结合你的学习和研究经历,探讨为什么在一些场景下要使用余弦相似度而不是欧式距离?

场景描述

在机器学习问题中,通常把特征表示为向量的形式,所以在分析两个特征向量之间相似度时,常使用余弦相似度来表示。余弦相似度取值范围是[-1,1]。相同的两个向量相似度为1,将1减去余弦相似度就得到余弦距离。因此,余弦距离的取值范围是[0,2],两个相同向量的余弦距离为0。

分析与解答

对于两个向量A和B,其余弦相似度为 c o s ( A , B ) = A B A 2 B 2 cos(A,B)=\frac{A*B}{||A||_2||B||_2} ,即两个向量夹角的余弦。当一对文本长度相差很大,但内容相似。如果使用词频或词向量作为特征,他们在特征空间上的欧式距离会很大。如果使用余弦相似度,夹角会很小,因此相似度高。

此外在文本、图像视频等高维情况下,余弦相似度依然保持"相同时为1,正交时为0,相反时为-1"的性质,而欧式距离数值受维度影响。

总体来说,欧式距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。

例如统计两部剧的用户观看行为,用户A的观看向量为(0,1),用户b的观看向量为(1,0)。此时余弦距离很大,欧式距离很小,当分析两个用户对于不同视频的偏好,更关注相对差异,使用余弦距离。当分析用户活跃度时,余弦距离会认为(1,10),(10,100)两个用户距离很近,显然这两个用户活跃度是有着很大的差异,应该使用欧式距离。

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

首先看距离的定义:在一个集合中,如果每一对元素都可唯一确定一个实数,使得三条距离公理(正定性,对称性,三角不等式)成立,则该实数可称为这对元素之间的距离。

余弦距离满足正定性和对称性,但是不满足三角不等式,因此不是严格定义的距离。

根据余弦距离的定义有:
d i s t ( A , B ) = 1 c o s θ = A 2 B 2 A B A 2 B 2 dist(A,B)=1-cos\theta =\frac{||A||_2||B||_2-AB}{||A||_2||B||_2}

  • 正定性: c o s θ cos\theta 介于[-1,1],所以 d i s t ( A , B ) 0 dist(A,B)\geq0 恒成立。特别的有,因此满足正定性
    在这里插入图片描述
  • 根据余弦距离的定义,有下图,所以满足对称性。
    在这里插入图片描述
  • 三角不等式。该性质不成立。下面给出一个反例。给定A=(1,0),B=(1,1),C=(0,1)。有 d i s t ( A , B ) = 1 2 2 dist(A,B)=1-\frac{\sqrt{2}}{2}
    d i s t ( B , C ) = 1 2 2 dist(B,C)=1-\frac{\sqrt{2}}{2}
    d i s t ( A , C ) = 1 dist(A,C)=1
    因此有 d i s t ( A , B ) + d i s t ( B C ) < d i s t ( A , C ) dist(A,B)+dist(B,C)<dist(A,C) 不满足三角不等式

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

场景描述

A/B测试是验证新模块是否有效,新模型效果是否有提升的主要测试方法。在机器学习领域中,A/B测试是验证模型最终效果的主要手段

分析解答

需要进行在线A/B测试的原因如下:

  • 离线评估无法评估模型过拟合的影响。因此离线评估无法代替线上评估结果
  • 离线评估无法完全还原线上的工程环境。线上环境的延迟、数据丢失、标签数据缺失等情况。离线评估是理想工程环境下的结果
  • 线上系统某些商业指标在离线中无法评估。离线评估是针对模型本身进行评估(ROC
    等)。线上评估可以全面算法的用户点击率、留存时间、PV访问量等全面评估,这些需要由A/B测试完成

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

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

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

在机器学习中,通常把样本划分为训练集和测试集。训练集用于训练模型,测试集用于评估模型。在样本划分和模型验证过程中,存在着不同的抽样方法和验证方法

Holdout检验

Holdout检验是最简单也是最直接的验证方法。它将原始的样本集合随机划分成训练集和验证集两部分。比如70%的样本用于模型训练,30%样本验证,包括绘制ROC曲线、计算精确率和召回率等指标。

缺点在于验证集上计算出来的评价指标与原始分组有很大关系。为了消除随机性,研究者们引入了"交叉验证"的思想

交叉验证

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

留一验证:每次留下1个样本作为验证集,其余所有样本作为测试集。样本总数为n,依次对n个样本进行遍历,进行n次验证。最后将评估指标求平均值。缺点在于样本总数较多时开销较大。

自助法

Holdout检验和交叉验证都是基于划分训练集和测试集的方法进行模型评估。当样本规模较小的时候,对样本集进行划分会让训练集进一步减小,可能会影响模型训练效果。

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

14.在自助法的采样过程中,对n个样本进行n词自助采样,当n趋于无穷大时,最终有多少数据从未被选择过?

一个样本在一次抽样过程中未被抽中的概率是 ( 1 1 n ) (1-\frac{1}{n}) ,n次未被抽中的概率为 ( 1 1 n ) n (1-\frac{1}{n})^n
根据重要极限,有在这里插入图片描述
= 1 e 0.368 \frac{1}{e} \approx0.368
所以当样本数很大时,大约有36.8%的样本从没被选择过,可作为验证集。

15 超参数调优有哪些方法?

场景描述

超参数调优是件非常头疼的事,处理根据经验设定所谓的"合理值"之外,一般难以寻找超参数的最优取值。而与此同时,超参数对于模型效果的影响又至关重要。有哪些可行的方法来进行超参数的调优?

分析和解答

为了进行超参数调优,一般会采用网格搜索、随机搜索、贝叶斯优化等算法。首先需要明确超参数搜索算法一般都包括哪几个要素。一是目标函数,即算法需要最大化、最小化的目标。而是搜索范围,一般通过上下限来确定。三是算法的其他参数,如搜索步长

网格搜索

网格搜索可能是最简单、应用最广泛的超参数搜索算法。它通过查找搜索范围内的所以的点来确定最优值。如果采用较大搜索范围和较小步长,有很大范围找到全局最优解。然而这种搜索方案十分消耗计算资源和时间。

实际使用中,一般先使用较广的搜索范围和较大的步长,确定全局最优解可能的位置。然后逐渐缩小搜索范围和步长,来寻找更精确的最优值。 这种方案可以降低所需的时间和计算量。但由于目标函数非凸,很可能会错过全局最优解。

随机搜索

随机搜索和网格搜索的思想比较相似,只是不再测试上下界中所有的值。而是在搜索范围内随机选取样本点。它的理论依据是,如果样本集足够大,那么通过随机采样也能大概率地找到全局最优解。

随机搜索一般要比网格搜索快一些,但是结果无法保证

贝叶斯优化算法

贝叶斯优化算法在寻找最优最值函数时,采用了与随机搜索和网格搜索不同的方法。
随机搜索和网格搜索在测试一个新点时,会忽略前一个点的信息。而贝叶斯优化算法则充分利用了之前的信息。
贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。

具体来说:它学习目标函数形状的方法是:

  • 首先根据先验分布,假设一个搜集函数
  • 然后每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布
  • 最后,算法测试由后验分布给出的全局最值最可能出现的位置的点

有一个需要注意的点:贝叶斯优化算法一旦找到了一个局部最优值,它会在该区域不断采样,很容易陷入局部最优值。为此贝叶斯优化算法会在"探索"和"利用"之间找到一个平衡点。

"探索"就是在还未取样的区域获取采样点
"利用"则是根据后验分布在最可能出现全局最值的区域进行采样

16 过拟合和欠拟合具体指什么现象?

过拟合指模型在训练集上表现很好,在测试集上表现不好。不能很好拟合数据。
欠拟合指模型在训练集和测试集上表现都不好。模型过于复杂,泛化能力下降。
在这里插入图片描述

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

降低过拟合风险

  1. 从数据入手,获得更多训练数据。因为更多的样本能让模型学到更多更有效的特征。在图像分类上,可以通过图像的平移、旋转、缩放等方式扩充数据。更进一步可以通过生成对抗网络合成大量数据
  2. 降低模型复杂度。例如在神经网络模型中减少网络层数、神经元个数和Dropout等。决策树剪枝、降低树的深度
  3. 正则化。给模型的参数加上一定的正则约束,比如把权值的大小加入到损失函数中去。
  4. 集成学习。把多个模型集成在一起,来降低单一模型的过拟合风险。

降低欠拟合风险

  1. 添加新特征。当特征不足或与标签关联性不强的时候容易出现欠拟合。挖掘"上下文特征",“组合特征”等新特征,往往能取得更好的效果。可以使用因子分解机、梯度提升决策树(GBDT)、Deep-crossing等方法来丰富特征
  2. 增加模型复杂度。 添加高次项,在神经网络模型中添加网络层数和神经元个数
  3. 减小正则化系数

猜你喜欢

转载自blog.csdn.net/qq_17677907/article/details/87977245