百面机器学习--机器学习面试问题系列(二)模型评估

本文是在学习《百面机器学习 算法工程师带你去面试》过程中的学习笔记,将面试问题进行记录以方便查阅,根据目录分成系列。持续更新中…

二、模型评估

不同类型的机器学习问题,选择不同的评估指标。恰当的评估指标才能快速发现模型的问题以进行有话。模型评估主要分为离线评估和在线评估两个阶段。

1. 评估指标的局限性:
  • 准确率的局限性:一个模型在训练集和测试集的准确率达到了95%,但是在实际应用中效果很差。如果训练集中不同类别占比非常不均衡,假如99%都是负样本,那模型只要将所有样本都归为负样本就能达到99%的准确率。所以可以使用平均准确率(每个类别下的样本准确率的算术平均)作为评估指标更有效。当然在实际应用中模型效果不好还可能是模型过拟合、欠拟合、测试集训练集划分不合理、线下评估与线上测试的样本分布存在差异等。

  • 精确率与召回率的权衡(P-R曲线):

    精确率Precision:分类正确的正样本个数占分类器判定为正样本的样本个数比例。

    召回率Recall:分类正确的正样本个数占真正正样本个数的比例。

    Precision和Recall是矛盾又统一的两个指标。Precision越高,说明分类器判定一个样本为正样本时越严格,所以往往因为更保守而漏掉没有把握的正样本,导致了Recall值降低。为了综合评估一个排序模型的好坏,最好绘制出模型的P-R曲线。横轴代表R,纵轴代表P,整条曲线通过将阈值从高到底移动而生成的,超出阈值判定为正样本,低于阈值为负样本。F1 score和ROC曲线也能综合反应排序模型的性能,F1 score是P值和R值的调和平均值,定义为:

    F 1 = 2 ∗ P ∗ R P + R F1=\frac{2*P*R}{P+R} F1=P+R2PR

    ROC曲线在后文单独介绍。

  • 平方根误差RMSE的局限:均方误差MSE大家应该都很熟悉,RMSE在均方误差上开个根号。在回归模型中经常用到这两个误差。但是如果模型在95%区间的样本中,预测误差都小于1%,但整体RMSE误差居高不下,有可能是偏离程度非常大的离群点(Outlier)导致的,即便离群点数量非常少,也会使RMSE指标变得很差。解决方案:1. 如果离群点是噪声点的话,过滤。2. 不是噪声点,那需要提高模型预测能力。3. 找到更合适的指标评估模型,如平均绝对百分比误差(MAPE)。

2. ROC曲线:ROC曲线经常用来评估二值分类器最重要的指标之一。
  • ROC曲线定义:横坐标为假阳性率(False Positive Rate)FPR,纵坐标为真阳性率(Ture Positive Rate)TPR:

    F P R = 负 样 本 被 分 类 器 判 定 为 正 样 本 的 数 量 / 真 正 负 样 本 数 量 FPR=负样本被分类器判定为正样本的数量/真正负样本数量 FPR=/

    T P R = 正 样 本 被 分 类 器 预 测 为 正 样 本 的 数 量 / 真 正 正 样 本 数 量 TPR=正样本被分类器预测为正样本的数量/真正正样本数量 TPR=/

  • 绘制ROC曲线:通过不断移动分类器的阈值来生成曲线上的关键点。比如,模型预测概率大于阈值判定为正样本,小于阈值判定为负样本,每一个阈值对应一个FPR和TPR,连接所有的关键点得到ROC曲线。

  • AUC:指的是ROC曲线下的面积大小,一般取值在0.5~1之间。AUC越大,说明分类器越有可能把真正的正样本排在前面,分类性能越好。

  • ROC与P-R曲线各自的特点:当正负样本分布(如正负样本比例发生改变)发生变化时,ROC曲线形状基本保持不变,P-R曲线一般会发生剧烈变化。所以ROC曲线能够降低不同测试集带来的干扰,更加稳定的反应模型好坏,适用场景更多如排序、推荐、广告等。如果想看到模型在特定数据集上的表现,P-R曲线能够更直观的反应其性能。

3. 余弦距离的应用:余弦距离是用来评估样本间的距离。评估样本距离是定义优化目标和训练方法的基础。
  • 为什么一些场景中使用余弦相似度而不是欧式距离:对于两个向量A,B,其余弦相似度定义如下:

    c o s ( A , B ) = A ⋅ B ∥ A ∥ 2 ∥ B ∥ 2 cos(A,B)=\frac{A\cdot B}{\left \| A \right \|_2 \left \| B \right \|_2} cos(A,B)=A2B2AB

    即两个向量夹角的余弦。关心的是向量之间的角度关系,而不关心绝对大小,取值范围为[-1,1]。在文本、图像、视频等领域,对象的特征维度很高,余弦相似度在高维的情况下依然能保持“相同时为1,正交时为0,相反时为-1”,欧式距离的值受维度影响,范围不固定,含义也比较模糊。在一些向量模长经过归一化的场景中,欧式距离与余弦距离具有单调的关系,使用哪一个结果都是相同的:

    ∥ A − B ∥ 2 = 2 ( 1 − c o s ( A , B ) ) \left \| A-B \right \|_2=\sqrt{2(1-cos(A,B))} AB2=2(1cos(A,B))

    ( 1 − c o s ( A , B ) ) (1-cos(A,B)) (1cos(A,B)) 代表余弦距离。总结:欧式距离体现数值上的绝对差异,余弦距离体现方向上的相对差异。根据不同的应用场景选择合适的距离评估方式。

  • 余弦距离是否是一个严格定义的距离:首先明确距离是如何定义的:在一个集合中,如果每一对元素均可唯一确定一个实数,使得三条距离公理(正定性、对称性、三角不等式)成立,则该实数可称为这对元素之间的距离。

    来看余弦距离:

    • 正定性: d i s t ( A , B ) = 1 − c o s ( A , B ) dist(A,B)=1-cos(A,B) dist(A,B)=1cos(A,B) ,恒>=0,并且dist(A,B)=0时A=B。满足。
    • 对称性: d i s t ( A , B ) = d i s t ( B , A ) dist(A,B)=dist(B,A) dist(A,B)=dist(B,A),满足。
    • 三角不等式:一个反例,A=(1,0),B=(1,1),C=(0,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) dist(A,B)+dist(B,C)<dist(A,C),不满足。

    所以余弦距离不是严格定义的距离。此外KL距离也不是距离,不满足对称性和三角不等式。

4. A/B测试陷阱:A/B测试是在线验证模型最终效果的主要手段。
  • 模型进行充分的离线评估后,为何仍需要在线的A/B 测试?
    • 离线评估无法完全消除模型过拟合的影响。
    • 离线评估无法完全还原线上的工程环境。如线上环境延迟、数据丢失、标签数据缺失等情况。离线评估是理想工程环境下的结果。
    • 线上系统的某些商业指标在离线评估中无法计算。离线评估往往关注ROC曲线、P-R曲线的改进。线上评估可以全面了解模型的其他指标,尤其商业指标,如推荐算法带来的用户点击率、留存时长、PV访问量的变化。
  • 如何进行A/B测试:进行用户分桶。将用户分成实验组和对照组,实验组施以新模型,对照组施以旧模型。在分桶过程中,需要注意样本的独立性和采样方式的无偏性。独立性是同一个用户每次只能分到一个桶中。无偏性是选取的user_id是随机选取的。
  • 如何划分实验组和对照组:注意提出的新模型针对的用户类型,如果针对“美国用户”,user_id只在美国用户中随机选取进行分桶,而不是在全体用户中。
5. 模型评估的方法:
  • 模型评估主要的验证方法以及有缺点:
    • Holdout验证:最简单直接的方法。原始样本集随机划分为训练集和测试集。缺点:再验证集上计算出来的最后评估指标与原始分组有很大关系。为了消除随机性,引入了”交叉验证”的思想。
    • 交叉验证,也叫k-fold验证:全部样本划分为k个大小相等的子集,依次遍历这k个子集,每次把当前子集作为验证集,其余子集作为训练集。k次评估指标的平均值作为最终的评估指标。缺点:样本总数较多的时候,时间开销极大。若每次随机选取p个子集做测试集,其余做训练集,也叫做留p验证,留一验证时留p验证的特例。时间开销远高于留一验证。所以很少在实际工程中应用。
    • 自助法:当样本规模比较小时,上述两种方法划分样本集会让训练集进一步减小,影响模型训练效果.而自助法可以维持训练集样本规模.对于总数为n的样本集,进行n次有放回的随机抽样,得到大小为n的训练集。在抽样过程中,有的样本会被重复采样,有的样本没有被抽出过,没有抽到过的样本就构成了测试集。
  • 自助法中,n个样本进行n次抽样,n趋于无穷大时,有多少数据没被抽中过:这是一个数学问题。一个样本没有被抽中的概率是(1-1/n),n次都没抽中的概率是 ( 1 − 1 / n ) n (1-1/n)^n 11/nn ,所以要求的是 l i m n → ∞ ( 1 − 1 / n ) n lim_{n \rightarrow \infty }(1-1/n)^n limn(11/n)n 。根据重要极限已知 l i m n → ∞ ( 1 + 1 / n ) n = e lim_{n \rightarrow \infty} (1+1/n)^n = e limn(1+1/n)n=e 。所以:
    l i m n → ∞ ( 1 − 1 / n ) n = l i m n → ∞ 1 ( 1 + 1 n − 1 ) n = 1 / e ≈ 0.368 lim_{n \rightarrow \infty} (1-1/n)^n=lim_{n \rightarrow \infty} \frac{1}{(1+\frac{1}{n-1})^n}=1/e \approx 0.368 limn(11/n)n=limn(1+n11)n1=1/e0.368
6. 超参数调优:
  • 超参数的调优方法:超参数搜索算法一般包括三个要素,一是目标函数,二是搜索范围,一般通过上下限决定,三是算法其他参数,如搜索步长。
    • 网格搜索:查找搜索范围内的所有点来确定最优值,最简单应用范围最广的搜索算法。较大范围较小步长,大概率能找到全局最优值。但是十分消耗资源和时间。实际应用中,较大范围,较大步长搜索全局最优的可能位置,然后逐步缩小范围和步长寻找更精确的最优值。但由于目标函数是非凸的,很可能会错过全局最优。
    • 随机搜索:与网格搜索相似,但不测试上界和下界范围内的所有值,随机在搜索范围内选取样本点。随机搜索比网格搜索快一些,但结果无法保证。
    • 贝叶斯优化算法:网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息。而贝叶斯优化算法充分利用了之前的信息。通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。具体来说,首先根据先验分布,假设一个搜集函数;然后使用新的采样点测试目标函数时,同时更新目标函数的先验分布;最后算法测试由后验分布给出的全局最值最可能出现的位置点。但是,在局部最优值的区域会不断采样,陷入局部最优。所以贝叶斯算法会在探索与利用之间找到一个平衡点。
7. 过拟合与欠拟合:
  • 过拟合与欠拟合的现象:过拟合指的是模型对于训练数据拟合过当(比如模型过于复杂,把噪声也学习到模型中),在训练集上表现良好,在测试集和新数据上表现较差。欠拟合是在训练集和测试集上表现都不好。
  • 降低过拟合和欠拟合风险的方法:
    • 降低过拟合:这个在第一节中图像数据不足时的处理办法就讲过如何降低过拟合风险。一是从数据入手。获取更多的训练数据,使模型学到更多有效的特征。采集实验数据比较困难,所以也可以利用一些规则扩充数据,如图像的平移、旋转、缩放。也可以利用生成式对抗网络来合成大量数据。二是降低模型复杂度。三是正则化方法。四是继承学习方法,把多个模型集和在一起,减少单个模型的过拟合风险。
    • 降低欠拟合:一添加新特征。二增加模型复杂度。三减少正则化系数。

下一章传送门:百面机器学习–机器学习面试问题系列(三)经典算法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值