《百面机器学习》学习笔记:(二)模型评估

1. 基本评价指标

模型评估主要分为离线评估和在线评估两个阶段。针对分类、排序、回归、序列预测等不同类型的机器学习问题,评估指标的选择也有所不同。知道每种评估指标的精确定义、有针对性地选择合适的评估指标、根据评估指标的反馈进行模型调整,这些都是机器学习在模型评估阶段的关键问题,也是一名合格的算法工程师应当具备的基本功。

在这里插入图片描述
图来源:https://blog.csdn.net/lz_peter/article/details/78133069

  • TP:样本为正,预测结果为正;
  • FP:样本为负,预测结果为正;
  • TN:样本为负,预测结果为负;
  • FN:样本为正,预测结果为负。

准确率(accuracy):分类正确的样本占总样本个数的比例 T P + T N T P + F P + T N + F N \frac{TP + TN}{ TP + FP + TN + FN} TP+FP+TN+FNTP+TN
精准率(precision):分类正确的正样本个数占分类器判定为正样本的样本个数的比例 T P T P + F P \frac{TP}{TP + FP} TP+FPTP
召回率(recall):分类正确的正样本个数占真正的正样本个数的比例 T P T P + F N \frac{TP}{TP + FN} TP+FNTP

2. 评估指标的局限性

2.1 准确率的局限性

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

分析与解答:
先回顾一下分类准确率的定义,准确率是指分类正确的样本占总样本个数的比例,准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷。比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。所以,当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素

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

在实际生活中,即使评估指标选择对了,仍会存在模型过拟合或欠拟合、测试集和训练集划分不合理、线下评估与线上测试的样本分布存在差异等一系列问题,但评估指标的选择是最容易被发现,也是最可能影响评估结果的因素。

2.2 精确率与召回率的局限与权衡

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

分析与解答:

精确率是指:分类正确的正样本个数占分类器判定为正样本的样本个数的比例
召回率是指:分类正确的正样本个数占真正的正样本个数的比例

在排序问题中,通常没有一个确定的阈值把得到的结果直接判定为正样本或负样本,而是采用Top N返回结果的Precision值和Recall值来衡量排序模型的性能,即认为模型返回的Top N的结果就是模型判定的正样本,然后计算前N个位置上的准确率Precision@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值两方面的表现?

2.2.1 P-R(Precision-Recall)曲线

P-R曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R曲线是通过将阈值从高到低移动而生成的,原点附近代表当阈值最大时模型的精确率和召回率。
在这里插入图片描述
由图可见,当召回率接近于0时,模型A的精确率为0.9,模型B的精确率是1,这说明模型B得分前几位的样本全部是真正的正样本,而模型A即使得分最高的几个样本也存在预测错误的情况。并且,随着召回率的增加,精确率整体呈下降趋势。但是,当召回率为1时,模型A的精确率反而超过了模型B。这充分说明,只用某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过P-R曲线的整体表现,才能够对模型进行更为全面的评估

2.2.2 F1 score

F1 score是精准率和召回率的调和平均值: F 1 = 2 ∗ p r e c i s i o n ∗ r e c a l l p r e c i s i o n + r e c a l l F1=\frac{2*precision*recall}{precision+recall} F1=precision+recall2precisionrecall使用调和平均而不是简单的算术平均的原因是:调和平均可以惩罚极端情况。一个具有 1.0 的精度,而召回率为 0 的分类器,这两个指标的算术平均是 0.5,但是 F1 score 会是 0。F1 score 给了精度和召回率相同的权重,它是通用 F β F_β Fβ 指标的一个特殊情况,在 F β F_β Fβ 中,β 可以用来给召回率和精度更多或者更少的权重。Fβ的计算公式: F β = ( 1 + β 2 ) p r e c i s i o n ∗ r e c a l l β 2 ∗ p r e c i s i o n + r e c a l l F_β = (1+β^2)\frac{precision*recall}{β^2*precision+recall} Fβ=(1+β2)β2precision+recallprecisionrecall F1分数认为召回率和精确率同等重要,F2分数认为召回率的重要程度是精确率的2倍,而F0.5分数认为召回率的重要程度是精确率的一半。

Macro F1 (宏)

在多分类问题中:

  • TPi是指类别 i i i 的True Positive;
  • FPi是指分类 i i i 的False Positive;
  • TNi是指分类 i i i 的True Negative;
  • FNi是指分类 i i i 的False Negative

分别计算每个类的精度 p r e c i s i o n i precision_i precisioni 及召回率 r e c a l l i recall_i recallimacro 精度就是所有分类的精度平均值 p r e c i s i o n m a = ∑ n p r e c i s i o n i n precision_{ma}=\frac{\sum^nprecision_i}{n} precisionma=nnprecisioni macro 召回就是所有分类的召回平均值 r e c a l l m a = ∑ n r e c a l l i n recall_{ma}=\frac{\sum^nrecall_i}{n} recallma=nnrecalli套用F1score的计算方法,macro F1 score就是: F 1 m a = 2 ∗ p r e c i s i o n m a ∗ r e c a l l m a p r e c i s i o n m a + r e c a l l m a F1_{ma}=\frac{2*precision_{ma}*recall_{ma}}{precision_{ma}+recall_{ma}} F1ma=precisionma+recallma2precisionmarecallma

Micro F1 (微)

如果各个类的分布不均衡的话,使用micro F1score比macro F1score 比较好,显然macro F1score没有考虑各个类的数量大小
在一个三分类问题中,计算 micro precision p r e c i s i o n m i = T P 1 + T P 2 + T P 3 T P 1 + F P 1 + T P 2 + F P 2 + T P 3 + F P 3 precision_{mi}=\frac{TP_1+TP_2+TP_3}{TP_1 + FP_1+TP_2 + FP_2+TP_3 + FP_3} precisionmi=TP1+FP1+TP2+FP2+TP3+FP3TP1+TP2+TP3 micro recall r e c a l l m i = T P 1 + T P 2 + T P 3 T P 1 + F N 1 + T P 2 + F N 2 + T P 3 + F N 3 recall_{mi}=\frac{TP_1+TP_2+TP_3}{TP_1 + FN_1+TP_2 + FN_2+TP_3 + FN_3} recallmi=TP1+FN1+TP2+FN2+TP3+FN3TP1+TP2+TP3macro F1 score F 1 m i = 2 ∗ p r e c i s i o n m i ∗ r e c a l l m i p r e c i s i o n m i + r e c a l l m i F1_{mi}=\frac{2*precision_{mi}*recall_{mi}}{precision_{mi}+recall_{mi}} F1mi=precisionmi+recallmi2precisionmirecallmi

2.2.3 ROC曲线

详见第三章

2.3 平方根误差

2.3.1 MSE, RMSE, MAE

对于简单线性回归,在计算误差时,为了保证其每项为正,且可导,往往会用到平方根误差: ∑ m ( y − y ^ ) 2 \sum^m(y-\hat y)^2 m(yy^)2,但问题是,这个衡量标准和m相关。(当10000个样本误差累积是100,而1000个样本误差累积却达到了80,虽然80<100,但我们却不能说第二个模型优于第一个)

改进=> 对式子除以m,使得其与测试样本m无关:均方误差MSE 1 m ∑ i m ( y − y ^ ) 2 \frac{1}{m}\sum^m_i(y-\hat y)^2 m1im(yy^)2之前算这个公式时为了保证其每项为正,且可导(所以没用绝对值的表示方法),我们对式子加了一个平方。但这可能会导致量纲的问题,如房子价格为万元,平方后就成了万元的平方。

改进=> 对MSE开方,使量纲相同:均方根误差RMSE(MSE与RMSE的区别仅在于对量纲是否敏感) 1 m ∑ i m ( y − y ^ ) 2 \sqrt{\frac{1}{m}\sum^m_i(y-\hat y)^2} m1im(yy^)2

在计算误差时(对train数据集),没用求绝对值的方法是因为其不是处处可导,不方便用来求极值。但评价模型时,对test数据集我们完全可以使用求绝对值的方式,即:平方绝对误差MAE 1 m ∑ i m ∣ y − y ^ ∣ \frac{1}{m}\sum^m_i|y-\hat y| m1imyy^

RMSE 与 MAE 的量纲相同,但求出结果后我们会发现RMSE比MAE的要大一些。这是因为RMSE是先对误差进行平方的累加后再开方,它其实是放大了较大误差之间的差距,而MAE反应的就是真实误差。因此在衡量中使RMSE的值越小其意义越大,因为它的值能反映其最大误差也是比较小的。

参考: https://blog.csdn.net/BigData_Mining/article/details/81122777

2.3.2 RMSE 局限

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

分析与解答:
一般情况下,RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点数量非常少,也会让RMSE指标变得很差。回到问题中来,模型在95%的时间区间内的预测误差都小于1%,这说明,在大部分时间区间内,模型的预测效果都是非常优秀的。然而,RMSE却一直很差,这很可能是由于在其他的5%时间区间内存在非常严重的离群点。

针对这个问题,有什么解决方案呢?

  1. 如果我们认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉。
  2. 可以找一个更合适的指标来评估该模型。关于评估指标,其实是存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差(Mean AbsolutePercent Error,MAPE),它定义为: M A P E = ∑ i n ∣ y i − y ^ i y i ∣ × 100 n MAPE=\sum^n_i|\frac{y_i-\hat y_i}{y_i}|\times \frac{100}{n} MAPE=inyiyiy^i×n100相比RMSE,MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响

3. ROC曲线

ROC曲线的横坐标为假阳性率(False Positive Rate,FPR);纵坐标为真阳性率(True Positive Rate,TPR)。FPR和TPR的计算方法分别为: F P R = F P N FPR=\frac{FP}{N} FPR=NFP T P R = T P P TPR=\frac{TP}{P} TPR=PTP TP是P个正样本中被分类器预测为正样本的个数,FP是N个负样本中被分类器预测为正样本的个数。

案例: 假设有10位疑似癌症患者,其中有3位很不幸确实患了癌症(P=3),另外7位不是癌症患者(N=7)。医院对这10位疑似患者做了诊断,诊断出3位癌症患者,其中有2位确实是真正的患者(TP=2)。那么真阳性率TPR=TP/P=2/3。对于7位非癌症患者来说,有一位很不幸被误诊为癌症患者(FP=1),那么假阳性率FPR=FP/N=1/7。对于“该医院”这个分类器来说,这组分类结果就对应ROC曲线上的一个点(1/7,2/3)。

3.1 如何绘制ROC曲线?

在二值分类问题中,模型的输出一般都是预测样本为正例的概率。样本按照预测概率从高到低排序。在输出最终的正例、负例之前,我们需要指定一个阈值,即截断点。ROC曲线是通过不断移动分类器的截断点来生成曲线上的一组关键点的。通过动态地调整截断点,从最高的得分开始(实际上是从正无穷开始,对应着ROC曲线的零点),逐渐调整到最低得分,每一个截断点都会对应一个FPR和TPR,在ROC图上绘制出每个截断点对应的位置,再连接所有点就得到最终的ROC曲线。

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

3.2 如何计算AUC?

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

3.3 ROC曲线相比P-R曲线有什么特点?

相比P-R曲线,ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。
在这里插入图片描述
(a)和图(c)是ROC曲线,(b)和(d)是P-R曲线,(c)和图(d)则是将测试集中的负样本数量增加10倍后的曲线图。可以看出,P-R曲线发生了明显的变化,而ROC曲线形状基本不变。这个特点让ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。所以,ROC曲线的适用场景更多,被广泛用于排序、推荐、广告等领域。但需要注意的是,选择P-R曲线还是ROC曲线是因实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映其性能。

4. 模型评估的方法

4.1 Holdout 检验

Holdout 检验是最简单也是最直接的验证方法,它将原始的样本集合随机划分
成训练集和验证集两部分。比方说按照比例将数据分成两部分,70% 的样本用于模型训练;30% 的样本用于模型验证,包括绘制ROC曲线、计算精确率和召回率等指标来评估模型性能。
缺点: 在验证集上计算出来的最后评估指标与原始分组有很大关系。

4.2 交叉检验

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

留一验证:每次留下1个样本作为验证集,其余所有样本作为测试集。在样本总数较多的情况下,留一验证法的时间开销极大。故而很少在实际工程中被应用。

4.3 自助法

以上方法都是基于划分训练集和测试集的方法进行模型评估的。然而,当样本规模比较小时,将样本集进行划分会让训练集进一步减小,这可能会影响模型训练效果。

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

5. 过拟合与欠拟合

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值