构建机器学习模型或深度学习模型的想法遵循建设性反馈原则。你构建一个模型,从指标中获取反馈,进行改进,并继续下去,直到达到理想的分类准确性。评估指标解释了模型的性能。评估指标(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、常用评估指标
真阳性(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 种类型。
第 1 步:计算每个观测值的概率 第 2 步:按降序对这些概率进行排序。 第 3 步:构建十分位数,每组都有近 10% 的观测值。 第 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 曲线几乎与响应率无关。这是因为它有两个轴来自混淆矩阵的柱状计算。如果响应率发生变化,x 轴和 y 轴的分子和分母将以类似的比例变化。
p(yi) 是正类的预测概率 1-p(yi) 是负类的预测概率 yi = 1 表示正类,0 表示负类(实际值)
对数损失(1, 0.1) = 2.303 对数损失(1, 0.5) = 0.693 对数损失(1, 0.9) = 0.105
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 折交叉验证可以与任何建模技术一起使用。
此外,本文涵盖的指标是分类和回归问题中最常用的一些评估指标。