12个必须了解的机器学习模型评估指标

文摘   2024-08-18 12:00   湖南  

构建机器学习模型或深度学习模型的想法遵循建设性反馈原则。你构建一个模型,从指标中获取反馈,进行改进,并继续下去,直到达到理想的分类准确性。评估指标解释了模型的性能。评估指标(evaluation metrics)的一个重要方面是它们区分模型结果的能力。


本文解释了作为数据科学专业人士必须了解的 12 个重要评估指标。你将了解它们的用途、优点和缺点,这将帮助你相应地选择和实施它们。



在线工具推荐:Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器



1、背景知识



评估指标是用于评估统计或机器学习模型的性能和有效性的定量措施。这些指标可以深入了解模型的执行情况,并有助于比较不同的模型或算法。


在评估机器学习模型时,评估其预测能力、泛化能力和整体质量至关重要。评估指标提供了衡量这些方面的客观标准。评估指标的选择取决于特定的问题领域、数据类型和期望的结果。


我见过很多分析师和有抱负的数据科学家甚至懒得去检查他们的模型有多稳健。一旦他们完成模型的构建,他们就会匆忙地将预测值映射到看不见的数据上。这是一个不正确的做法。基本事实是建立预测模型不是你的动机。这是关于创建和选择一个模型,该模型可以在样本外数据上提供较高的accuracy_score。因此,在计算预测值之前检查模型的准确性至关重要。


在我们的行业中,我们考虑不同类型的指标来评估我们的机器学习模型。评估指标的选择完全取决于模型的类型和模型的实施计划。完成模型构建后,这 12 个指标将帮助你评估模型的准确性。考虑到交叉验证的日益普及和重要性,我还在本文中提到了它的原理。


1.1 预测模型的类型


当我们谈论预测模型时,我们谈论的是回归模型(连续输出)或分类模型(名义或二进制输出)。每个模型中使用的评估指标都不同。


在分类问题中,我们使用两种类型的算法(取决于它创建的输出类型):


  • 分类输出:SVM 和 KNN 等算法创建类输出。例如,在二元分类问题中,输出将为 0 或 1。今天我们拥有可以将这些类输出转换为概率的算法。但这些算法并没有被统计学界很好地接受。

  • 概率输出:逻辑回归、随机森林、梯度提升、Adaboost 等算法给出概率输出。将概率输出转换为类输出只是创建阈值概率的问题。


在回归问题中,我们的输出不会出现这种不一致的情况。输出本质上始终是连续的,不需要进一步处理。


对于分类模型评估指标的讨论,我使用了我对 Kaggle 上 BCI 挑战问题的预测。问题的解决方案不在我们这里讨论的范围之内。然而,本文使用了训练集的最终预测。针对该问题的预测是概率输出,假设阈值为 0.5,则将其转换为类输出。



2、常用评估指标



现在我们介绍机器学习中常用的评估指标。

2.1 混淆矩阵

混淆矩阵(confusion matrix)是一个 N X N 矩阵,其中 N 是预测类别的数量。对于当前的问题,我们有 N=2,因此我们得到一个 2 X 2 矩阵。它是机器学习分类问题的性能测量,其中输出可以是两个或多个类别。混淆矩阵是一个包含 4 种不同的预测值和实际值组合的表。它对于测量精确率、召回率、特异性、准确性以及最重要的 AUC-ROC 曲线非常有用。

以下是需要记住的混淆矩阵的一些定义:

  • 真阳性(true positive):预测为阳性,而且这是真的。

  • 真阴性(true negative):预测为阴性,而且它是真的。

  • 误报(false positive):1 类错误,预测为阳性,但结果是错误的。

  • 假阴性(false negative):2 类错误,预测为阴性,但结果是错误的。

  • 准确率(accuracy):正确预测总数占正确预测总数的比例。

  • 阳性预测值或精度(positive predictive value or precision):正确识别的阳性样本的比例。

  • 阴性预测值(negative predictive value):正确识别出阴性样本的比例。

  • 敏感性或召回率(sensitivity or recall):正确识别的实际阳性样本的比例。

  • 特异性(sepcificity):实际阴性样本被正确识别的比例。

  • 比率(rate):它是混淆矩阵中的一个测量因素。它还具有 TPR、FPR、TNR 和 FNR 4 种类型。

我们手头问题的准确率为 88%。从上面两个表可以看出,阳性预测值很高,但阴性预测值很低。敏感性和特异性也是如此。这主要是由我们选择的阈值驱动的。如果我们降低阈值,这两对完全不同的数字将会更加接近。

一般来说,我们关心的是上面定义的指标之一。例如,在一家制药公司,他们会更关心最小的错误阳性诊断。因此,他们会更关心高特异性。另一方面,损耗模型将更关注敏感性。混淆矩阵通常仅与类输出模型一起使用。

2.2 F1分数

在上一节中,我们讨论了分类问题的精度和召回率,并强调了为我们的用例选择精度/召回率基础的重要性。如果对于某个用例,我们试图同时获得最佳精度和召回率怎么办?F1-Score 是分类问题的精度值和召回值的调和平均值。F1-Score的公式如下:


现在,我想到的一个明显的问题是为什么要采用调和(harmonic)平均值而不是算术(arithmetic)平均值。这是因为 HM 对极端值的惩罚更多。让我们通过一个例子来理解这一点。我们有一个二元分类模型,结果如下:

精度:0,召回率:1

在这里,如果我们取算术平均值,我们会得到 0.5。很明显,上述结果来自一个愚蠢的分类器,它忽略输入并预测其中一个类作为输出。现在,如果我们采用 HM,我们会得到 0,这是准确的,因为该模型对于所有目的都是无用的。

这看起来很简单。然而,在某些情况下,数据科学家希望对精确度或召回率给予更高的重要性/权重百分比。稍微改变一下上面的表达式,以便我们可以为此目的包含一个可调整的参数 beta,我们得到:

Fbeta 衡量模型对于用户的有效性,该用户对召回率的重视程度是精确度的 β 倍。
2.3 增益图和提升图

增益图和提升图主要涉及检查概率的排序。以下是构建提升/增益图的步骤:

  • 第 1 步:计算每个观测值的概率
  • 第 2 步:按降序对这些概率进行排序。
  • 第 3 步:构建十分位数,每组都有近 10% 的观测值。
  • 第 4 步:计算每个十分位数的良好(响应者)、不良(无响应者)和总数的响应率。

你将得到下表,需要从中绘制增益/提升图表:


这是一张信息非常丰富的表格。累积增益图表是累积 %Right 和累积 %Population 之间的图表。对于当前的情况,这是图表:


该图告诉你模型将响应者与非响应者区分开的效果如何。例如,第一个十分之一拥有 10% 的人口,拥有 14% 的响应者。这意味着我们在第一个十分位数处获得了 140% 的提升。

在第一个十分位中我们可以达到的最大升力是多少?从本文的第一个表中,我们知道响应者总数为 3850。此外,第一个十分位数将包含 543 个观察值。因此,第一个十分位数的最大升力可能是 543/3850 ~ 14.1%。因此,我们的这个模型已经非常接近完美了。

现在让我们绘制升力曲线。升力曲线是总升力和人口百分比之间的图。请注意,对于随机模型,该值始终保持在 100% 不变。这是当前案例的情节:


还可以用十分位数绘制十分位数的提升:


这张图告诉你什么?它指出我们的模型在第 7 个十分位之前表现良好。发布后,每十分之一都将偏向于无响应者。任何提升@十分位数高于 100% 直到最小第 3 个十分位数和最大第 7 个十分位数的模型都是一个好的模型。否则你可能会首先考虑过采样。

提升/增益图广泛用于营销活动定位问题。这告诉我们可以将特定营销活动的目标客户定位到哪个十分位。此外,它还告诉你期望从新目标群体中得到多少反应。

2.4 K-S图

K-S 或 Kolmogorov-Smirnov 图衡量分类模型的性能。更准确地说,K-S是正负分布分离程度的度量。如果分数将总体分为两个单独的组,其中一组包含所有正样本,另一组包含所有负样本,则 K-S 为 100。

另一方面,如果模型无法区分阳性和阴性,那么就好像模型从总体中随机选择案例。K-S 将为 0。在大多数分类模型中,K-S 将落在 0 到 100 之间,值越高,模型区分正例和负例的能力就越好。

对于本次案例,如下表:


我们还可以绘制%Cumulative Good和Bad来查看最大分离。以下是示例图:


这里介绍的评估指标主要用于分类问题。到目前为止,我们已经了解了混淆矩阵、提升和增益图以及K-S图。让我们继续学习一些更重要的指标。

2.5 ROC 曲线下面积 (AUC – ROC)

这又是业内流行的评估指标之一。使用ROC曲线的最大优点是它独立于响应者比例的变化。此声明将在以下部分中变得更加清晰。

我们首先尝试了解一下 ROC(接收者操作特性)曲线是什么。如果我们查看下面的混淆矩阵,我们会发现对于概率模型,每个指标都会得到不同的值。


因此,对于每个敏感度,我们都会得到不同的特异性。两者的区别如下:


ROC 曲线是敏感性和(1-特异性)之间的图。(1-特异性)也称为假阳性率,敏感性也称为真阳性率。以下是当前案例的 ROC 曲线。


我们以阈值 = 0.5 为例(参考混淆矩阵)。这是混淆矩阵:


如你所见,此阈值的灵敏度为 99.6%,(1-特异性)约为 60%。该坐标成为 ROC 曲线中的点。为了将该曲线简化为一个数字,我们找到该曲线下的面积 (AUC)。

请注意,整个正方形的面积为 1*1 = 1。因此 AUC 本身就是曲线下面积与总面积的比率。对于当前的案例,我们得到的 AUC ROC 为 96.4%。以下是一些经验法则:

  • .90-1 = 优秀 (A)
  • .80-.90 = 良好 (B)
  • .70-.80 = 一般 (C)
  • .60-.70 = 差 (D)
  • .50-.60 = 失败 (F)

我们发现我们属于当前模型的优秀范围。但这可能只是过度拟合。在这种情况下,进行及时和超时验证变得非常重要。


需要记住的要点:

  • 对于以类别作为输出的模型,将在 ROC 图中表示为单个点。
  • 此类模型无法相互比较,因为判断需要针对单个指标进行,而不是使用多个指标。例如,参数为 (0.2,0.8) 的模型和参数为 (0.8,0.2) 的模型可以来自同一个模型;因此,不应直接比较这些指标。
  • 在概率模型的情况下,我们很幸运地得到了一个数字,即 AUC-ROC。但我们仍然需要审视整个曲线才能做出决定性的决定。也有可能一种模型在某些地区表现更好,而另一种模型在其他地区表现更好。
使用 ROC 的优点:

  • 提升程度取决于人群的总响应率。因此,如果总体的响应率发生变化,同一模型将给出不同的提升图。解决这个问题的方法可以是真实的提升图(找到每个十分位数的提升与完美模型提升的比率)。但这样的比率对于企业来说几乎没有意义。

  • 另一方面,ROC 曲线几乎与响应率无关。这是因为它有两个轴来自混淆矩阵的柱状计算。如果响应率发生变化,x 轴和 y 轴的分子和分母将以类似的比例变化。


2.6 对数损失

AUC ROC 考虑预测概率来确定我们模型的性能。然而,AUC ROC 存在一个问题,它只考虑概率的顺序,因此没有考虑模型预测更有可能为正的样本的更高概率的能力。在这种情况下,我们可以使用对数损失,它只不过是每个实例的校正预测概率的对数的负平均值。


  • p(yi) 是正类的预测概率
  • 1-p(yi) 是负类的预测概率
  • yi = 1 表示正类,0 表示负类(实际值)


让我们计算一些随机值的对数损失,以获得上述数学函数的要点

  • 数损失(1, 0.1) = 2.303
  • 对数损失(1, 0.5) = 0.693
  • 对数损失(1, 0.9) = 0.105

如果我们绘制这种关系,我们将得到如下曲线:


从向右缓慢下降的斜率可以明显看出,随着预测概率的提高,对数损失逐渐下降。然而,朝相反方向移动,当预测概率接近 0 时,对数损失会非常迅速地增加。

因此,对数损失越低,模型就越好。然而,没有绝对的衡量良好对数损失的方法,并且它取决于用例/应用程序。

虽然 AUC 是根据具有不同决策阈值的二元分类计算的,但对数损失实际上考虑了分类的“确定性”。

2.7 基尼系数

基尼系数有时用于分类问题。基尼系数可以直接从 AUC ROC 数得出。基尼系数只不过是ROC曲线和对角线之间的面积与上面三角形的面积之比。以下是使用的公式:
Gini = 2*AUC – 1

基尼系数在60%以上就是一个好的模型。对于本例,我们得到的基尼系数为 92.7%。

2.8 一致/不一致比率

这又是任何分类预测问题最重要的评估指标之一。为了理解这一点,我们假设有 3 名学生今年有可能通过考试。以下是我们的预测:

  • A – 0.9
  • B – 0.5
  • C – 0.3


现在想象一下。如果我们从这三个学生中取出两对,我们会得到多少对?我们将有 3 对:AB、BC 和 CA。现在,年底后,我们看到 A 和 C 今年通过了,而 B 失败了。不,我们选择所有能找到一个响应者和另一个无响应者的对。我们有多少这样的对?

我们有两对 AB 和 BC。现在,对于 2 对中的每一对,一致对是响应者的概率高于非响应者的概率。而不一致的配对则反之亦然。如果两个概率相等,我们就说平局。让我们看看我们的案例中会发生什么:

  • AB:一致

  • BC:不一致

因此,在这个例子中我们有 50% 的一致案例。一致率超过60%被认为是一个好的模型。在决定要定位多少客户等时,通常不会使用此指标。它主要用于访问模型的预测能力。诸如目标数量之类的决定再次由 KS/提升图做出。

2.9 均方根误差 (RMSE)

RMSE 是回归问题中最常用的评估指标。它遵循这样的假设:误差是无偏的并且遵循正态分布。以下是 RMSE 需要考虑的关键点:

  • “平方根”的力量使该指标能够显示大量偏差。
  • 该指标的“平方”性质有助于提供更可靠的结果,从而防止抵消正误差值和负误差值。换句话说,该度量恰当地显示了误差项的合理大小。
  • 它避免使用绝对误差值,这在数学计算中是非常不希望的。
  • 当我们有更多样本时,使用 RMSE 重建误差分布被认为更可靠。
  • RMSE 受异常值的影响很大。因此,在使用此指标之前,请确保您已从数据集中删除了异常值。
  • 与平均绝对误差相比,RMSE 给予更高的权重并惩罚大的误差。

RMSE 指标由下式给出:

其中 N 是观察总数。

2.10 均方根对数误差

对于均方根对数误差,我们取预测值和实际值的对数。那么基本上,我们测量的方差有哪些变化?当我们不想惩罚预测值和实际值的巨大差异(当预测值和真实值都是巨大数字时),通常会使用 RMSLE。


  • 如果预测值和实际值都很小:RMSE 和 RMSLE 相同。
  • 如果预测值或实际值较大:RMSE > RMSLE
  • 如果预测值和实际值都很大:RMSE > RMSLE(RMSLE 几乎可以忽略不计)

2.11 R 平方

我们了解到,当 RMSE 降低时,模型的性能将会提高。但仅凭这些值并不直观。

对于分类问题,如果模型的准确度为 0.8,我们可以衡量我们的模型与准确度为 0.5 的随机模型相比有多好。所以随机模型可以作为基准。但当我们谈论 RMSE 指标时,我们没有可以比较的基准。

这是我们可以使用 R 平方度量的地方。R 平方的公式如下:

  • MSE(模型):预测值与实际值的均方误差
  • MSE(基线):平均预测与实际值的均方误差

换句话说,与仅预测训练集中目标的平均值作为预测的非常简单的模型相比,我们的回归模型有多好?

2.12 调整 R 平方

如果模型的性能等于基线,则 R 平方为 0。模型越好,r2 值就越高。具有所有正确预测的最佳模型的 R 平方值为 1。但是,在向模型添加新特征时,R 平方值要么增加,要么保持不变。R-Squared 不会因为添加对模型没有任何价值的特征而受到惩罚。因此,R-Squared 的改进版本是调整后的 R-Squared。调整后的 R 平方的公式由下式给出:


  • k:特征数量
  • n:样本数

正如你所看到的,该指标考虑了功能的数量。当我们添加更多特征时,分母 n-(k +1) 中的项会减少,因此整个表达式会增加。

如果 R-Squared 没有增加,则意味着添加的特征对我们的模型没有价值。所以总的来说,我们从 1 中减去一个更大的值,调整后的 r2 反过来会减少。

除了这 12 个评估指标之外,还有另一种方法来检查模型性能。这 7 种方法在数据科学中具有统计学意义。但是,随着机器学习的到来,我们现在有幸拥有更强大的模型选择方法。是的!我说的是交叉验证。

尽管交叉验证并不是真正公开用于传达模型准确性的评估指标,但交叉验证的结果提供了足够好的直观结果来概括模型的性能。

现在让我们详细了解交叉验证。



3、交叉验证



我们先来了解一下交叉验证的重要性。由于这几天日程比较忙,我没有太多时间参加数据科学竞赛。很久以前,我参加了 Kaggle 上的 TFI 竞赛。在不深入研究我的比赛表现的情况下,我想向你展示我的公共排行榜分数和私人排行榜分数之间的差异。

对于TFI比赛,以下是我的三个解决方案和分数(越少越好)

你会注意到,公共得分最差的第三个条目却是私人排名中最好的模型。“submission_all.csv”上面有超过 20 个模型,但我仍然选择“submission_all.csv”作为我的最终条目(效果确实很好)。是什么原因造成了这种现象呢?我的公共和私人排行榜的差异是由于过度拟合造成的。

过度拟合没什么,但是当你的模型变得非常复杂时,它也会开始捕获噪声。这种“噪音”不会给模型增加任何价值,只会增加不准确性。

在下一节中,我将讨论在我们实际知道测试集结果之前如何知道解决方案是否过度拟合。

3.1 交叉验证的概念

交叉验证是任何类型的数据建模中最重要的概念之一。它只是说,在最终确定模型之前,尝试留下一个不训练模型的样本并在该样本上测试模型。

上图显示了如何使用实时样本验证模型。我们简单地将总体分为 2 个样本,并在一个样本上建立模型。其余人口用于及时验证。

上述方法是否有负面影响?

我认为这种方法的缺点是我们在训练模型时丢失了大量数据。因此,该模型的偏差非常高。这不会给出系数的最佳估计。那么下一个最佳选择是什么?

如果我们将训练群体和前 50 个群体的训练按照 50:50 的比例进行划分,然后对其余 50 个群体进行验证,结果会怎样呢?然后,我们对另外 50 个样本进行训练,并对前 50 个样本进行测试。通过这种方式,我们可以一次性在整个群体上训练模型,但一次性训练了 50%。这在一定程度上减少了样本选择带来的偏差,但提供了较小的样本来训练模型。这种方法称为二折(2-fodl)交叉验证。

3.2 K 折交叉验证

让我们从 2 折交叉验证中将最后一个示例推断为 k 折。现在,我们将尝试可视化 k 倍验证的工作原理。

这是7折交叉验证。

幕后发生的事情是这样的:我们将整个总体分为 7 个相等的样本。现在,我们在 6 个样本(绿色框)上训练模型并在 1 个样本(灰色框)上进行验证。然后,在第二次迭代时,我们使用不同的样本作为验证来训练模型。在 7 次迭代中,我们基本上已经在每个样本上建立了一个模型,并将每个样本作为验证。这是减少选择偏差并减少预测能力方差的一种方法。一旦我们拥有了所有 7 个模型,我们就会计算误差项的平均值来找出哪个模型最好。

这如何帮助找到最佳(非过度拟合)模型?

k 折交叉验证广泛用于检查模型是否过度拟合。如果 k 次建模中每次的性能指标彼此接近并且指标的平均值最高。在 Kaggle 竞赛中,你可能更多地依赖交叉验证分数而不是 Kaggle 公共分数。这样,你就可以确定公共分数不仅仅是偶然的。

但是我们如何选择k呢?

这是棘手的部分。我们在选择 k 时需要权衡。

  • 对于较小的 k,我们有较高的选择偏差,但性能方差较低。

  • 对于较大的 k,我们的选择偏差较小,但性能差异较大。

想想极端的情况:

  • k = 2:我们只有 2 个与 50-50 示例相似的样本。在这里,我们每次仅针对 50% 的人群构建模型。但由于验证是一个重要的群体,验证性能的方差很小。

  • k = 观测值数量 (n):这也称为“留一”。我们有 n 个样本,并且建模重复 n 次,只留下一个观察结果进行交叉验证。因此,选择偏差很小,但验证性能的方差非常大。

通常,对于大多数用途,建议使用 k = 10 的值。


4、结束语



测量训练样本的性能是没有意义的。将及时验证批次放在一边是一种数据浪费。K-Fold 为我们提供了一种使用每个数据点的方法,这可以在很大程度上减少这种选择偏差。此外,K 折交叉验证可以与任何建模技术一起使用。

此外,本文涵盖的指标是分类和回归问题中最常用的一些评估指标。

python爱好者大本营
python爱好者,从小白一同成长,记录学习,记录生活,我们还是天天happy的python工程师
 最新文章