百面机器学习02-模型评估

评估指标的局限性

场景描述:
在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不同的指标进行评估 。在诸多的评估指标中,大部分指标只能片面地反映模型的一部分性能 。 如果不能合理地运用评估指标 ,不仅不能发现模型本身的闯题,而且会得出错误的结论。下面以 Hulu 的业务为背景 ,假想几个模型评估场景 3 看看大家能否触类旁通,发现模型评估指标的局限性。

知识点:准确率( Accuracy ),精确率( Precision ),召回率( Recall ),均万根误差(Root Mean Square Error, RMSE)

问题1准确率的局限性

分析与解答:Hulu 的奢侈品广告主们希望把广告走向投放给奢侈昂用户 。 Hulu 通过第三万的数据管理平台( Data Management Platform , DMP )拿到了一部分奢侈品用户的数据 , 并以此为训练、集和测出集,训练和测试奢侈品用户的分类模型。该模型的分类准确率超过了95% , 但在实际广告投放过程中,该模型还是把大部分广告投给了非奢侈品用户, 这可能是什么原因造成的?

在解答该问题之前,我们先回顾一下台类准确率的定义 。 准确率是
指分类正确的样本占总牛羊本个数的比例,即: A ccurac ⁡ y = n correct  n total  A \operatorname{ccurac} y=\frac{n_{\text {correct }}}{n_{\text {total }}} Accuracy=ntotal ncorrect 

其中 n correct  n_{\text {correct }} ncorrect  为被正确分类的样本个数, n total  n_{\text {total }} ntotal  为总样本的个数。准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷。比如,当负样本占 99% 时,分类器把所有样本都预测为负样本也可以获得 99%的准确率。所以, 当不同类别的样本比例非常不均衡时 ,占比大的类别往往成为影响准确率的最主要因素。

明确了这一点,这个问题也就迎刃而解了。显然,奢侈品用户只占Hulu 全体用户的一小部分,虽然模型的整体分类准确率高,但是不代表对奢侈品用户的分类准确率也很高。在线上投放过程中,我们只会对模型剂“奢侈品用户”判定的准确率不够高的问题就被放大了。为了解决这个问题,可以使用更为有效的平均准确率(每个类别下的样本准确率的算术平均)作为模型评估的指标。

事实上,这是一道比较开放的问题,面试者可以根据遇到的问题一步步地排查原因。标准答案其实也不限于指标的选择,即使评估指标选择对了,仍会存在模型过拟合或欠拟合、测试集和训练集划分不合理、线下评估与线上测试的样本分布存在差异等一系列问题,但评估指标的选择是最容易被发现,也是最可能影响评估结果的因素。

问题2精确率与召回率的权衡

Hulu 提供视频的模糊搜索功能,搜索排序模型返回的 Top 5 的精确率非常高,但在实际使用过程中,用户还是经常找不到想要的视频,特别是一些比较冷门的剧集,这可能是哪个环节出了问题呢?

分析与解答:要回答这个问题,首先要明确两个概念,精确率和召回率。精确率是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例。召回率是指分类正确的正样本个数占真正的正样本个数的比例。在排序问题中,通常没有一个确定的阈值把得到的结果直接判定为正样本或负样本,而是采用 Top N 返回结果的 Precision 值和 Recall值来衡量排序模型的性能,即认为模型返回的 Top N 的结果就是模型判定的正样本,然后计算前 N 个位置上的准确率 Precision@N 和前 N N N个位置上的召回率 Recall@N。

Precision 值和 Recall 值是既矛盾又统一的两个指标,为了提高Precision 值,分类器需要尽量在“更有把握" 时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致 Recall 值降低。回到问题中来,模型返回的 Precision@5 的结果非常好,也就是说排序模型 Top 5 的返回值的质量是很高的。但在实际应用过程中,用户为了找一些冷门的视频,往往会寻找排在较靠后位置的结果,甚至翻页去查找目标视频。但根据题目描述,用户经常找不到想要的视频,这说明模型没有把相关的视频都找出来呈现给用户。显然,问题出在召回率上。如果相关结果有100 个,即使 Precision@5 达到了 100%,Recall@5 也仅仅是5%。在模型评估时,我们是否应该同时关注 Precision 值和 Recall 值?进一步而言,是否应该选取不同的 Top N 的结果进行观察呢?是否应该选取更高阶的评估指标来更全面地反映模型在 Precision 值和 Recall 值两方面的表现?

答案都是肯定的,为了综合评估一个排序模型的好坏,不仅要看模型在不同 Top N 下的 Precision@N 和 Recall@N,而且最好绘制出模型的P-R(Precision-Recall ) 曲线。这里简单介绍一下 P-R 曲线的绘制方法。P-R 曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其 P-R 曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条 P-R 曲线是通过将阈值从高到低移动而生成的。图 2.1 是 P-R 曲线样例图,其中实线代表模型 A A A 的 P-R 曲线,虚线代表模型 B 的 P-R 曲线。原点附近代表当间值最大时模型的精确率和召回率。

百面机器学习02-模型评估_第1张图片
由图可见,当召回率接近于 0 时,模型 A A A 的精确率为 0.9,模型 B的精确率是 1,这说明模型 B B B 得分前几位的样本全部是真正的正样本,而模型 A A A 即使得分最高的几个样本也存在预测错误的情况。并且,随着召回率的增加,精确率整体呈下降趋势。但是,当召回率为 1 时,模型A 的精确率反而超过了模型 B。这充分说明,只用某个点对应的精确率和召回率是不能全面地衡量模型的性能, 只有通过 P-R 曲线的整体表现,才能够对模型进行更为全面的评估。

除此之外,F1 score 和 ROC 曲线也能综合地反映一个排序模型的性能。F1 score 是精准率和召回率的调和平均值,它定义为
F 1 = 2 ×  precision ×  recall   precision  +  recall  \mathrm{F} 1=\frac{2 \times \text { precision} \times \text { recall }}{\text { precision }+\text { recall }} F1= precision + recall 2× precision× recall 
ROC 曲线会在后面的小节中单独讨论,这里不再叙述。

问题3平方根误差的“意外”

分析与解答:Hutu 作为 一家流媒体公司,拥有众多的美剧资源,预测每部美剧的流量趋势对于广告投版、用户增长都非常重要 。我们希望构建 个回归模型来预测某部美剧的流量趋势 , 但无论采用哪种回归模型 3 得到的RMSE 指标都非常高。然而事实是模型在 95%的时间区间内的预测误差都小于 1% , 取得了相当不锚的预测结果 。那么 ,造成 RMSE 指标居高不下的最可能的原因是什么?

RMSE 经常被用来衡量回归模型的好坏,但按照题目的叙述,RMSE 这个指标却失效了。先看一下 RMSE 的计算公式为
R M S E = ∑ i = 1 n ( y i − y ^ i ) 2 n R M S E=\sqrt{\frac{\sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}}{n}} RMSE=ni=1n(yiy^i)2
其中, y i y_{i} yi 是第 i i i 个样本点的真实值, y ^ i \hat{y}_{i} y^i 是第 i i i 个样本点的预测值, n n n 是样本点的个数。

一般情况下,RMSE 能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点Outlier时,即使离群点数量非常少,也会让 RMSE 指标变得很差。

回到问题中来,模型在 95% 的时间区间内的预测误差都小于 1% ,这说明,在大部分时间区间内,模型的预测效果都是非常优秀的。然而,RMSE 却一直很差,这很可能是由于在其他的 5% 时间区间内存在非常严重的离群点。事实上,在流量预估这个问题中,噪声点确实是很容易产生的,比如流量特别小的美剧、刚上映的美剧或者刚获奖的美剧,甚至一些相关社交媒体突发事件带来的流量,都可能会造成离群点。

针对这个问题,有什么解决方案呢?可以从三个角度来思考。第一,如果我们认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉。第二,如果不认为这些离群点是“噪声点”的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去这是一个宏大的话题,这里就不展开讨论了)。第三,可以找一个更合适的指标来评估该模型。关于评估指标,其实是存在比 RMSE 的鲁棒性更好的指标,比如平均绝对百分比误差(Mean Absolute Percent Error,MAPE ),Error,MAPE),它定义为
M A P E = ∑ i = 1 n ∣ y i − y ^ i y i ∣ × 100 n M A P E=\sum_{i=1}^{n}\left|\frac{y_{i}-\hat{y}_{i}}{y_{i}}\right| \times \frac{100}{n} MAPE=i=1nyiyiy^i×n100
相比 RMSE,MAPE 相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。

1:ROC 曲线

场景描述
二值分类器(Binary Classifier )是机器学习领域中最常见也是应用最广泛的分类器。评价二值分类器的指标很多,比如 precision、recall、F1 score、P-R 曲线等。上一小节已对这些指标做了一定的介绍,但也发现这些指标或多或少只能反映模型在某一方面的性能。相比而言,ROC 曲线则有很多优点,经常作为评估二值分类器最重要的指标之一。下面我们来详细了解一下 ROC 曲线的绘制方法和特点。

知识点:ROC 曲线,曲线下的面积( Aera Under Curve, AUC) , P - R 曲线

问题1什么是 ROC 曲线?

ROC 曲线是 Receiver Operating Characteristic Curve 的简称中文名为“受试者工作特征曲线”。ROC 曲线源于军事领域,而后在医学领域应用甚广,“受试者工作特征曲线”这一名称也正是来自于医学领域。

ROC 曲线的横坐标为假阳性率(False Positive Rate,FPR ) ; 纵坐标为真阳性率(True Positive Rate, TPR )。FPR 和 TPR 的计算方法分别为
F P R = F P N T P R = T P P \begin{aligned} F P R &=\frac{F P}{N} \\ T P R &=\frac{T P}{P} \end{aligned} FPRTPR=NFP=PTP

上式中, P 是真实的正样本的数量 , N是真实的负样本的数量 , TP 是P 个正样本中被分类器预测为E样本的个数, FP 是 N 个负样本中被分类器预测为正样本的个数。只看定义确实有点绕 , 为了更重观地说明这个问题,我们举一个医院诊断病人的例子 。 假设有10位疑似癌症患者,其中有 3 位很不幸确实患了癌症( P=3 ),另外 7 位不是癌症患者( N=7 ) 。医院对这10 位疑似患者做了诊断,诊断出 3 位癌症患者,真中有2 位确实是真正的患者( TP=2 ) 。 那么真阳性率 TPR=TP/P=2/3 , 对于 7 位非癌症患者来说 3 有一位很不幸被误诊为癌症患者( FP= 1 ),那么假阳性率FPR=FP/N=1/7 。 对于“该医院”这个分类器来说,这组分类结果就对应 ROC 曲线上的一个点( 1/7, 2/3 )。

问题2如何绘制 ROC 曲线?

事实上, ROC 曲线是通过不断移动分类器的“截断点”来生成曲线上的一组关键点的,通过下面的例子进一步来解释“截断点”的概念。

在二值分类问题中,模型的输出一般都是预测样本为正例的概率 。假设测试集中有 20 个样本,表 2.1 是模型的输出结果 。 样本按照预测概率从高到低排序。在输出最终的正例、负例之前,我们需要指定一个阈值3 预测概率大于该阈值的样本会被判为正例,小于该阈值的样本则会被判为负例 。 比如,指定阈值为 0.9 ,那么只有第一个样本会被预测为正例 ,其他全部都是负例 。 上面所说的 “截断点”指的就是区分正负预测结果的阈值 。

通过动态地调整截断点 ,从最高的得分开始(实际上是从正无穷开始,对应着 ROC 曲线的零点),逐渐调整到最低得分 , 每一个截断点都会对应一个 FPR 和 TPR ,在 ROC 图上绘制出每个截断点对应的位置,再连接所有点就得到最终的 ROC 曲线。

百面机器学习02-模型评估_第2张图片

就本例来说,当截断点选择为正无穷时,模型把全部样本预测为负例,那么 FP 和 TP 必然都为 0, FPR 和 TPR 也都为 0 ,因此曲线的第一个点的坐标就是( 0 , 0 ) 。 当把截断点调整为 0.9 时 ,模型预测 1号样本为正样本,并且该样本确实是正样本,因此, TP=1, 20 个样本中 ,所有正例数量为 P=10 ,故 TPR=TP/P= 1/10;这里没有预测错的正样本,即 FP=O ,负样本总数 N=10 ,故 FPR=FP/N=0/10=0 ,对应 ROC 曲线上的点( 0,0.1 )。依次调整截断点,直到画出全部的关键点,再连接关键点即得到最终的 ROC 曲线,如图 2 . 2 所示 。

百面机器学习02-模型评估_第3张图片
其实 , 还有一种更直观地绘制 ROC 曲线的方法 。 首先,根据样本标签统计出正负样本的数量 ,假设正样本数量为 P , 负样本数量为 N; 接下来,把横轴的刻度间隔设置为 1 /N , 纵轴的刻度间隔设置为 1 /P; 再根据模型输出的预测概率对样本进行排序(从高到低) ;依次遍历样本,同时从零点开始绘制ROC 曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,直到遍历完所有样本,曲线最终停在( 1,1 )这个点,整个 ROC 曲线绘制完成 。

问题3如何计算 AUC?

顾名思义, AUC 指的是 ROC 曲线下的面积大小, 该值能够量化地反映基于 ROC 由线衡量出的模型性能 。 计算 AUC 值只需要沿着ROC 横轴做积分就可以了 。 由于 ROC 曲线一般都处于 y=x 这条直线的上方(如果不是的话,只要把模型预测的概率反转成 1-p 就可以得到一个更好的分类器),所以 AUC 的取值一般在 0.5 ~ 1 之间 。 AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好 。

问题4ROC 曲线比 P-R 曲线有什么特点?

本章第一小节曾介绍过同样被经常用来评估分类和排序模型的 P -R曲线。相比 P -R 曲线, ROC 曲线奇一个特点,当正负样本的分布发生变化时, ROC 曲线的形状能够基本保持不变,而 P -R 曲线的形状一般会发生较剧烈的变化。

举例来说, 图 2.3 是 ROC 曲线和 P -R 曲线的对比图 , 其中图 2.3 ( a)和图 2.3 ( c )是 ROC 曲线,图 2.3 ( b )和图 2.3 ( d )是 P-R 由线,图 2.3( c )和图2.3 ( d )则是将测试集中的负样本数量增加 10 倍后的曲线图。

百面机器学习02-模型评估_第4张图片
可以看出, P-R 曲线发生了明显的变化,而 ROC 曲线形状基本不变 。 这个特点让 ROC 曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能 。 这高什么实际意义呢?在很多实际问题中 , 正负样本数量往往很不均衡 。 比如,计算广告领域经常涉及转化率模型,正样本的数量往往是负样本数量的 1/1000 甚至 1/10000 。 若选择不同的测试集, P -R 曲线的变化就会非常大,而 ROC 由线则能够更加稳定地反映模型本身的好坏。所以, ROC 曲线的适用场景更多,被广泛用于排序、推荐 、 广告等领域。 但需要注意的是,选择 P-R 曲线还是 ROC 曲线是因实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现, P-R 曲线则能够更直观地反映其性能。

3:余弦距离的应用

场景描述

本章的主题是模型评估 ,但真实在模型训练过程中,我们也在不断地评估着样本间的距离,如何评估样本距离也是定义优化目标和训练方法的基础 。在机器学习问题中,通常将特征表示为向量的形式,所以在分析两个特征向量之间的相似性时 ,常使用余弦相似度来表示 。余弦相似度的取值范围是[-1,1 ],相同的两个向量之间的相似度为 1 。 如果希望得到类似于距离的表示,将 1 减去余弦相似度即为余弦距离 。因此余弦距离的取值范围为[ 0,2],相同的两个向量余弦距离为 0。

涉及到的知识点:余弦相似度,余弦距离,欧氏距离,距离的定义

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

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

在一些场景,例如 Word2Vec 中,其向量的模长是经过归一化的,此时欧氏距离与余弦距离有着单调的关系,即
∥ A − B ∥ 2 = 2 ( 1 − cos ⁡ ( A , B ) ) \|A-B\|_{2}=\sqrt{2(1-\cos (A, B))} AB2=2(1cos(A,B))
其中 ∥ A − B ∥ 2 \|A-B\|_{2} AB2 表示欧氏距离, cos ⁡ ( A , B ) \cos (A, B) cos(A,B) 表示余弦相似度, ( 1 − cos ⁡ ( A , B ) ) (1-\cos (A, B)) (1cos(A,B)) 表示余弦距离。在此场景下,如果选择距离最小(相似度最大)的近邻,那么使用余弦相似度和欧氏距离的结果是相同的。总体来说,欧氏距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。例如,统计两部剧的用户观看行为,用户 A 的观看向量为(0,1),用户 B 为 (1,0); 此时二者的余弦距离很大,而欧氏距离很小; 我们分析两个用户对于不同视频的偏好,更关注相对差异,显然应当使用余弦距离。而当我们分析用户活跃度,以登陆次数 ( 单位: 次 ) 和平均观看时长(单位: 分钟) 作为特征时,余弦距离会认为 (1,10)、(10,100) 两个用户距离很近; 但显然这两个用户活跃度是有着极大差异的,此时我们更关注数值绝对差异,应当使用欧氏距离。特定的度量方法适用于什么样的问题,需要在学习和研究中多总结和思考,这样不仅仅对面试有帮助,在遇到新的问题时也可以活学活用。

问题2:余弦距离是否一个严格定义的距离

该题主要考察面试者对距离的定义的理解,以及简单的反证和推导。首先看距离的定义:在一个集合中,如果每一对元素均可唯一确定一个实数,使得三条距离公理(正定性,对称性,三角不等式)成立,则该实数可称为这对元素之间的距离。余弦距离满足正定性和对称性,但是不满足三角不等式,因此它并不是严格定义的距离。具体来说,对于向量 A A A B , B, B, 三条距离公理的证明过程如下。

  • 正定性
    根据余弦距离的定义,有
    dist ⁡ ( A , B ) = 1 − cos ⁡ θ = ∥ A ∥ 2 ∥ B ∥ 2 − A B ∥ A ∥ 2 ∥ B ∥ 2 \operatorname{dist}(A, B)=1-\cos \theta=\frac{\|A\|_{2}\|B\|_{2}-A B}{\|A\|_{2}\|B\|_{2}} dist(A,B)=1cosθ=A2B2A2B2AB
    孝虑到|| A ∥ 2 ∥ B ∥ 2 − A B ⩾ 0 , A\left\|_{2}\right\| B \|_{2}-A B \geqslant 0, A2B2AB0, 因此有 dist ⁡ ( A , B ) ⩾ 0 \operatorname{dist}(A, B) \geqslant 0 dist(A,B)0 坦成立。特别地,有
    dist ⁡ ( A , B ) = 0 ⇔ ∥ A ∥ 2 ∥ B ∥ 2 = A B ⇔ A = B \operatorname{dist}(A, B)=0 \Leftrightarrow\|A\|_{2}\|B\|_{2}=A B \Leftrightarrow A=B dist(A,B)=0A2B2=ABA=B
    因此余弦距离满足正定性。
  • 对称性
    根据余弦距离的定义,有
    dist ⁡ ( A , B ) = ∥ A ∥ 2 ∥ B ∥ 2 − A B ∥ A ∥ 2 ∥ B ∥ 2 = ∥ B ∥ 2 ∥ A ∥ 2 − A B ∥ B ∥ 2 ∥ A ∥ 2 = dist ⁡ ( B , A ) \begin{aligned} \operatorname{dist}(A, B) &=\frac{\|A\|_{2}\|B\|_{2}-A B}{\|A\|_{2}\|B\|_{2}}=\frac{\|B\|_{2}\|A\|_{2}-A B}{\|B\|_{2}\|A\|_{2}} \\ &=\operatorname{dist}(B, A) \end{aligned} dist(A,B)=A2B2A2B2AB=B2A2B2A2AB=dist(B,A)
    因此余弦距离满足对称性。
  • 三角不等式
    该性质并不成立,下面给出一个反例。给定 A = ( 1 , 0 ) , B = ( 1 , 1 ) , A=(1,0), B=(1,1), A=(1,0),B=(1,1),
    C = ( 0 , 1 ) , C=(0,1), C=(0,1), 则有
    dist ⁡ ( A , B ) = 1 − 2 2 dist ⁡ ( B , C ) = 1 − 2 2 dist ⁡ ( A , C ) = 1 \begin{array}{r} \operatorname{dist}(A, B)=1-\frac{\sqrt{2}}{2} \\ \operatorname{dist}(B, C)=1-\frac{\sqrt{2}}{2} \\ \operatorname{dist}(A, C)=1 \end{array} dist(A,B)=122 dist(B,C)=122 dist(A,C)=1
    因此有
    dist ⁡ ( A , B ) + dist ⁡ ( B , C ) = 2 − 2 < 1 = dist ⁡ ( A , C ) . \operatorname{dist}(A, B)+\operatorname{dist}(B, C)=2-\sqrt{2}<1=\operatorname{dist}(A, C) . dist(A,B)+dist(B,C)=22 <1=dist(A,C).
    假如面试时候紧张,一时想不到反例,该气么办呢?此时可以思考余弦距离和欧氏距离的关系。从问题 1 中,我们知道单位圆上欧氏距离和余弦距离滿足
    ∥ A − B ∥ = 2 ( 1 − cos ⁡ ( A , B ) ) = 2 dist ⁡ ( A , B ) \|A-B\|=\sqrt{2(1-\cos (A, B))}=\sqrt{2 \operatorname{dist}(A, B)} AB=2(1cos(A,B)) =2dist(A,B)
    即有如下关系
    dist ⁡ ( A , B ) = 1 2 ∥ A − B ∥ 2 \operatorname{dist}(A, B)=\frac{1}{2}\|A-B\|^{2} dist(A,B)=21AB2

显然在单位圆上 , 余弦距离和 欧式氏距离的范围都是[0 , 2 ]。我们已知欧式距离是一个合法的距离,而余弦是离与欧氏距离有二次关系,自然不满足三角不等式。具体来说,可以假设 A A A B 、 B B 、 B BB C C C 非常近,其欧氏距离为极小量 u ; u ; u; 此时 A , B , C A, B, C A,B,C 虽然在圆弧上,但近似在一条直线上,所以 A 与 C 的因氏距离接近于 2u。因此,A 与 B 、 B B 、 B BB 与 C 的余弦距离为 u 2 / 2 ; A u^{2} / 2 ; A u2/2;A C C C 的余弦距离接近于 2 u 2 , 2 u^{2}, 2u2, 大于 A A A B 、 B B_{、} B BB C C C 的余弦距离之和。

面试者在碰到这类基础证明类的问题时,佳往会遇到一些困难。比如对面试官考察的重点“距离" 的定义就不一定清晰地记得。这个时候,就需要跟面试官多沟通,在距离的定义上达成一玫(要知道,面试考察的不仅是知识的掌握程度,还有面试者沟通和分析问题的能力)。要想给出一个完美的解答,就需要清晰的邀辑、严谨的思维。比如在正定性应该给出一些推导。最后,三角不等式的证明 / 证伪中,不应表述为“我觉得满足 / 不满足”,而是应该积极分针给定三个点时的三角关系,或者推导其和欧氏距离的关系,这样照怕一时找不到反例而误认为其是合法距离,也比“觉得不满足" 这样蒙对正确菩案要好。

笔者首次注意到余弦距离不符合三角不等式是在研究电视剧的标签时,发现在通过影视语样库训练出的词向量中,comedy 和 funny、funny 和 happy 的余弦距离都很近,小于 0.3,然而 comedy 和 happy的余弦距离却高达 0.7。这一现象明显不符合距离的定义,引起了我们的注意和讨论,经过思考和推导,得出了上述结论。

在机器学习领域,被俗称为距离,却不满足三条距离公理的不仅仅有余弦距离,还有 KL 距离(Kullback-Leibler Divergence),也叫作相对熵,它常用于计算两个分布之间的差异,但不满足对称性和三角不等式。

4:A/B 测试的陷阱

场景描述
在互联网公司中, A/B 测试是验证新模块、新功能、新产晶是否高效,新算法、新模型的效果是否育提升,新设计是否受到用户欢迎,新更改是否影响用户体验的主要测试方法。在机器学习领域中, A/B 测试是验证模型最终效果的主要手段 。

知识点:A/B 测试, 实验组 , 对照组

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

需要进行在结 A/B 测试的原因如下 。

  1. 离结评估无法完全消除模型过拟台的影响,因此 得出的离线评估结果无法完全替代线上评估结果。
  2. 离线评估无法完全还原线上的工程环境。 一般来讲,离结评估往往不会考虑线上环境的延迟 、数据丢失、标签数据缺失等情况 。 因此,离线评估的结果是理想工程环境下的结果 。
  3. 线上系统的某些商业指标在离结评估中无法计算。离结评估一般是针对模型本身进行评估,而与模型相关的其他指标,特别是商业指标,往往无法直接获得 。 比如,上线了新的推荐算法, 离线评估往往关注的是 ROC 由线、 P -R 曲线等的改进, 而线上评估可以全面了解该推荐算法带来的用户点击率、留存时长、PV 访问量等的变化 。 这些都要由 A/B 测试来进行全面的评估。

问题:如何进行线上A/B测试

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

问题:如何划分实验组相对照组?

H 公司的算法工程师最近针对系统中的“美国用户”研发了一套全新的视频推荐模型 A ,而目前正在使用的针对全体用户的推荐模型是B 。 在正式上线之前,工程师们希望通过 A/B 测试来验证新推荐模型的效果 。 下面有三种实验组相对照组的划分方法, 请指出哪种划分方法是正确的?

  1. 根据 user_id ( user_id 完全随机生成)个位数的奇偶性将用户划分为实验组和对照组 ,对实验组施以推荐模型 A , 对照组施以模型 B
  2. 将 user_id 个位数为奇数且为美国用户的作为实验组 ,其余用户为对照组;
  3. 将 user_id 个位数为奇数且为美国用户的作为实验组, user_id 个位数为偶数的用户作为对照组

上述 3 种 A/B 测试的划分方法都不正确。我们用包含关系图来说明三种划分方法,如图 2.4 所示。方法 1(见图 2.4(a))没有区分是否为美国用户,实验组和对照组的实验结果均有稀释; 方法 2(见图2.4(b))的实验组选取无误,并将其余所有用户划分为对照组,导致对照组的结果被稀释; 方法 3(见图 2.4(c )) 的对照组存在偏差。正确的做法是将所有美国用户恨据 user_id 个位数划分为试验组合对照组(见图 2.4(d)),分别施以模型 A A A B , B, B, 才能够验证模型 A A A 的效果。

百面机器学习02-模型评估_第5张图片

5:模型评估的方法

场景描述
在机器学习中,我们通常把样本分为训练集和测试集,训练集用于训练模型,测试集用于评估模型。在样本划分和模型验证的过程中 ,存在着不同的抽样方法和验证方法 。 本小节主要考察面试者是否熟知这些方法及真优缺点、是否能够在不同问题中挑选合适的评估方法。

知识点:Holdout 检验,交叉验证,自由法( Bootstrap ),微积分

  • Holdout 检验

    • Holdout 检验是最简单也是最直接的验证方法, 它将原始的样本集合随机划分成训练集和验证集两部分。比方说,对于一个点击率预测模型,我们把样本按照 70% ~ 30% 的比例分成两部分, 70% 的样本用于模型训练; 30% 的样本用于模型验证,包捂绘制 ROC 曲线、计算精确率和召回率等指标来评估模型性能。Holdout 检验的缺点很明显,即在验证集上计算出来的最后评估指标与原始分组有很大关系。为了消除随机性,研究者们引入了“交叉检验”的思想 。
  • 交叉检验

    • k-fold 交叉验证: 首先将全部样本划分成 k个大小相等的样本子集;依次遍历这 k 个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估:最后把 k 次评估指标的平均值作为最终的评估指标。在实际实验中,k经常取 10。
    • 留一验证: 每次留下 1 个样本作为验证集,其余有样本作为测试集,样本总数为 n,依次对 n 个样本进行追历,进行 n 次验证,再将评估指标求平均值得型最终的评估指标。在样本总数较多的情况下,留一然证法的时间开销极大。事实上,留一验证是留 p p p 验证的特例。留 p p p 验证是每次留下 p p p 个样本作为验证集,而从 n n n 个元素中选择 p p p 个元素有 C n p C_{n}^{p} Cnp种可能,因此它的时间开销更是远远高于留一验证,故而很少在实际工程中被应用。
  • 自助法

    • 不管是 Holdout 检验还是交检验,都是基于划分训练集和测试集的方法进行模型评估的。然而,当样本规模比较小时,将样本集进行也分会让训练集进一步减小,这可能会影响模型训练效果。有没有能维持训练样本规模的验证方法呢?

    • 自助法可以比较好地解决这个问題。自助法是基于自助采样法的检验方法。对于总数为 n n n 的样本集合,进行 n 次有放回的随机抽样,得到大小为 n 的训练集 。 n 次采样过程中 ,有的样本会被重复采样,有的样本沒有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证,这就是自助法的验证过程。

在自助法的采样过程中,对 n个样本避行 n 次自助抽样,当 n趋于无穷大肘,最终有多少数据从来未被选择过?

一个样本在一次抽样过程中未被抽中的概率为 ( 1 − 1 n ) , n \left(1-\frac{1}{n}\right), n (1n1),n 次抽样均未抽中的概率为 ( 1 − 1 n ) n \left(1-\frac{1}{n}\right)^{n} (1n1)n 。当 n n n 趋于无穷大时,概率为 lim ⁡ n → ∞ ( 1 − 1 n ) n \lim _{n \rightarrow \infty}\left(1-\frac{1}{n}\right)^{n} limn(1n1)n根据重要极限, lim ⁡ n → ∞ ( 1 + 1 n ) n = e , \lim _{n \rightarrow \infty}\left(1+\frac{1}{n}\right)^{n}=\mathrm{e}, limn(1+n1)n=e, 所以有
lim ⁡ n → ∞ ( 1 − 1 n ) n = lim ⁡ n → ∞ 1 ( 1 + 1 n − 1 ) n = 1 lim ⁡ n → ∞ ( 1 + 1 n − 1 ) n − 1 ⋅ 1 lim ⁡ n → ∞ ( 1 + 1 n − 1 ) = 1 e ≈ 0.368 \begin{aligned} \lim _{n \rightarrow \infty}\left(1-\frac{1}{n}\right)^{n} &=\lim _{n \rightarrow \infty} \frac{1}{\left(1+\frac{1}{n-1}\right)^{n}} \\ &=\frac{1}{\lim _{n \rightarrow \infty}\left(1+\frac{1}{n-1}\right)^{n-1} \cdot \frac{1}{\lim _{n \rightarrow \infty}\left(1+\frac{1}{n-1}\right)}} \\ &=\frac{1}{\mathrm{e}} \approx 0.368 \end{aligned} nlim(1n1)n=nlim(1+n11)n1=limn(1+n11)n1limn(1+n11)11=e10.368
因此,当样本数很大时,大约有 36.8% 的样本从未被选择过,可作为验证集。

6:超参数调优

场景描述
对于很多算法工程师来说,超参数调优是件非常头度的事。除了根据经验设定所谓的“合理值" 之外,一般很难找到合理的方法去寻扰超参数的最代取值。而与此同时,超参数对于模型效果的影响又至关重要要。有没有一些可行的办法去进行超参数的调优呢?

问题:超参数有哪些调优方法?

为了进行超参数调优,我们一般会采用网格搜索,随机机搜索、贝叶斯代化等算法。在具体介绍算法之前,需要明确超参数搜索算法一般包括第几个要素。一是目标函数, 即算法需要最大化/最小化的目标;二是搜素范围,一般通过上限和下限来确定; 三是算法的其他参数,如搜索步长。

  • 网格搜索
    网格搜索可能是最简单、应用最广泛的超参数搜索算法,它通过查找搜索范围内的所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网格搜索有很大概率找到全局最优值。然而,这种搜索方案十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。因此,在实际应用中,网格搜索法一般会先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的位置:然后会逐渐缩小搜素范围和步长,来寻找更精确的最优值。这种操作方案可以降低所需的时间和计算量,但由于目标函数一般是非凸的,所以很可能会错过全局最优值。

  • 随机搜索
    随机搜索的思想与网格搜索比较相似,只是不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。它的理论依据是,如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值,或其近似值。随机搜索一般会比网格搜索要快一些,但是和网格提索的快速版一样,它的结果也是没法保证的。

  • 贝叶斯优化算法
    贝叶斯优化算法在寻找最优最值参数时,采用了与网格搜索、随机搜索完全不同的方法。网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息; 而贝叶斯优化算法则充分利用了之前的信息。贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。具体来说,它学习目标函数形状的方法是,首先根据先验分布,假设一个搜集函数,然后每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布; 最后,算法通试由后验分布给出的全局最值最可能出现位置的点,一旦找到了一个局部最优值,它会在该区域不断采样,所以很容易陷入局部最优值。为了弥补这个缺陷,贝叶斯优化算法会在探索和利用之间找到一个平货点,“探索" 就是在还未取样的区域获取采样点; 而“利用”则是根据后验分布在最可能出现全局最值的区域进行采样。

7:过拟台与欠拟台

场景描述
在模型评估与调整的过程中 ,我们往往会遇到“过拟合”或“欠拟合”的情况 。 如何
有效地识别 “过拟台”和“欠拟合"现象 ,并有针对性地进行模型调整 ,是不断改进机器学习模型的关键 。 特别是在实际项目中,采用多种方法、从多个角度降低“过拟台”和“欠拟台”的风险是算法工程师应当具备的领域知识 。

知识点:过拟台 , 欠拟合

问题:在模型评估过程中,过拟合欠拟合真体是指什么现象?

过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上 ,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差 。 欠拟合指的是模型在训练和预测时表现都不好的情况 。 图2.5 形象地描述了过拟台和欠拟台的区别 。

可以看出,图 2.5 ( 2.5( 2.5( a ) ) ) 是欠拟合的情况,拟合的黄线没有很好地捕捉到数据的特征, 不能很好地拟合数据。图 2.5 ( c ) 2.5(\mathrm{c}) 2.5(c) 则是过拟合的情况,导致模型泛化能力下降,在后期应用过程中很容易输出错误的预测结果。
百面机器学习02-模型评估_第6张图片

问题:能否说出几种降低过拟台和欠拟合风险的方法?

  • 降低“过拟合”风险的方法
    (1)从数据入手,获得更多的训练数据。使用更多的训练数据是解决过拟合问题最有效的手段,因为更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。当然,直接增加实验数据一般是很困难的,但是可以通过一定的规则来扩充训练数据。比如在图像分类的问题上,可以通过图像的平移、旋转、缩放等方式扩充数据:更进一步地,可以使用生成式对抗网络来合成大量的新训练数据。
    (2)降低模型复杂度。在数据较少时,模型过于复杂是产生过拟合的主要因素, 适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等。
    (3)正则化方法。给模型的参数加上一定的正则约束,比如将权值的大小加入到损失函数中。以 L2 正则化为例:
    C = C 0 + λ 2 n ⋅ ∑ i w i 2 C=C_{0}+\frac{\lambda}{2 n} \cdot \sum_{i} w_{i}^{2} C=C0+2nλiwi2
    这样,在优化原来的目标函数 C 0 C_{0} C0, 的同时,也能避免权值过大带来的过拟合风险。
    (4)集成学习方法。集成学习是把多个模型集成在一起,来降低单一模型的过拟合风险,如 Bagging 方法。

参考

参考书籍:《百面机器学习》

你可能感兴趣的:(机器学习,算法,python,机器学习,数据挖掘)