分享

如何选择分类模型的评价指标

 python_lover 2022-10-08 发布于北京

作者|MUSKAN097
编译|VK
来源|Analytics Vidhya

简介

你已经成功地构建了分类模型。你现在该怎么办?你如何评估模型的性能,也就是模型在预测结果方面的表现。为了回答这些问题,让我们通过一个简单的案例研究了解在评估分类模型时使用的度量。

让我们通过案例研究深入了解概念

在这个全球化的时代,人们经常从一个地方旅行到另一个地方。由于乘客排队等候、办理登机手续、拜访食品供应商以及使用卫生间等设施,机场可能会带来风险。在机场追踪携带病毒的乘客有助于防止病毒的传播。

考虑一下,我们有一个机器学习模型,将乘客分为COVID阳性和阴性。在进行分类预测时,可能会出现四种类型的结果:

真正例(TP):当你预测一个观察值属于一个类,而它实际上属于那个类。在这种情况下,也就是预测为COVID阳性并且实际上也是阳性的乘客。

真反例(TN):当你预测一个观察不属于一个类,它实际上也不属于那个类。在这种情况下,也就是预测为非COVID阳性(阴性)并且实际上不是COVID阳性(阴性)的乘客。

假正例(FalsePositive,FP):当你预测一个观察值属于某个类,而实际上它并不属于该类时。在这种情况下,也就是预测为COVID阳性但实际上不是COVID阳性(阴性)的乘客。

假反例(FN):当你预测一个观察不属于一个类,而它实际上属于那个类。在这种情况下,也就是预测为非COVID阳性(阴性)并且实际上是COVID阳性的乘客。

混淆矩阵

为了更好地可视化模型的性能,这四个结果被绘制在混淆矩阵上。

准确度

对!你说得对,我们希望我们的模型能集中在真正的正例和反例。准确度是一个指标,它给出了我们的模型正确预测的分数。形式上,准确度有以下定义:

准确度=正确预测数/预测总数。

现在,让我们考虑平均每天有50000名乘客出行。其中有10个是COVID阳性。

提高准确率的一个简单方法是将每个乘客都归为COVID阴性。所以我们的混淆矩阵如下:

本案例的准确度为:

准确度=49990/50000=0.9998或99.98%

神奇!!这是正确的?那么,这真的解决了我们正确分类COVID阳性乘客的目的吗?

对于这个特殊的例子,我们试图将乘客标记为COVID阳性和阴性,希望能够识别出正确的乘客,我可以通过简单地将每个人标记为COVID阴性来获得99.98%的准确率。

显然,这是一种比我们在任何模型中见过的更精确的方法。但这并不能解决目的。这里的目的是识别COVID阳性的乘客。在这种情况下,准确度是一个可怕的衡量标准,因为它很容易获得非常好的准确度,但这不是我们感兴趣的。

所以在这种情况下,准确度并不是评估模型的好方法。让我们来看看一个非常流行的措施,叫做召回率。

召回率(敏感度或真正例率)

召回率给出你正确识别为阳性的分数。

现在,这是一项重要措施。在所有阳性的乘客中,你正确识别的分数是多少。回到我们以前的策略,把每个乘客都标为阴性,这样召回率为零。

Recall = 0/10 = 0

因此,在这种情况下,召回率是一个很好的衡量标准。它说,把每个乘客都认定为COVID阴性的可怕策略导致了零召回率。我们想最大限度地提高召回率。

作为对上述每个问题的另一个正面回答,请考虑COVID的每一个问题。每个人走进机场,模型都会给他们贴上阳性标签。给每位乘客贴上阳性标签是不好的,因为在他们登机前,实际调查每一位乘客所需的费用是巨大的。

混淆矩阵如下:

召回率将是:

Recall = 10/(10+0) = 1

这是个大问题。因此,结论是,准确度是个坏主意,因为给每个人贴上负面标签可以提高准确度,但希望召回率在这种情况下是一个很好的衡量标准,但后来意识到,给每个人贴上正面标签也会增加召回率。

所以独立的召回率并不是一个好的衡量标准。

还有一种测量方法叫做精确度

精确度

精确度给出了所有预测为阳性结果中正确识别为阳性的分数。

考虑到我们的第二个错误策略,即将每位乘客标记为阳性,其精确度将为:

Precision = 10 / (10 + 49990) = 0.0002

虽然这个错误的策略有一个好的召回值1,但它有一个可怕的精确度值0.0002。

这说明单纯的召回并不是一个好的衡量标准,我们需要考虑精确度。

考虑到另一种情况(这将是最后一种情况,我保证:P)将排名靠前的乘客标记为COVID阳性,即标记出患COVID的可能性最高的乘客。假设我们只有一个这样的乘客。这种情况下的混淆矩阵为:

精确度为:1/(1+0)=1

在这种情况下,精度值很好,但是让我们检查一下召回率:

Recall = 1 / (1 + 9) = 0.1

在这种情况下,精度值很好,但召回值较低。

场景 准确度 召回率 精确度
将所有乘客分类为阴性
将所有乘客分类为阳性
排名靠前的乘客标记为COVID阳性

在某些情况下,我们非常确定我们想要最大限度地提高召回率或精确性,而代价是其他人。在这个标记乘客的案例中,我们真的希望能正确地预测COVID阳性的乘客,因为不预测乘客的正确性是非常昂贵的,因为允许COVID阳性的人通过会导致传播的增加。所以我们更感兴趣的是召回率。

不幸的是,你不能两者兼得:提高精确度会降低召回率,反之亦然。这称为准确度/召回率权衡。

准确度/召回率权衡

一些分类模型输出的概率介于0和1之间。在我们将乘客分为COVID阳性和阴性的案例中,我们希望避免遗漏阳性的实际案例。特别是,如果一个乘客确实是阳性的,但我们的模型无法识别它,这将是非常糟糕的,因为病毒很有可能通过允许这些乘客登机而传播。所以,即使有一点怀疑有COVID,我们也要贴上阳性的标签。

所以我们的策略是,如果输出概率大于0.3,我们将它们标记为COVID阳性。

这会导致较高的召回率和较低的精确度。

考虑与此相反的情况,当我们确定乘客为阳性时,我们希望将乘客分类为阳性。我们将概率阈值设置为0.9,即当概率大于或等于0.9时,将乘客分类为正,否则为负。

所以一般来说,对于大多数分类器来说,当你改变概率阈值时,会在召回率和精确度之间进行权衡。

如果需要比较具有不同精确召回值的不同型号,通常可以方便地将精度和召回合并为一个度量。对的!!我们需要一个同时考虑召回率和精确度的指标来计算性能。

F1分数

它被定义为模型精度和召回率的调和平均值。

你一定想知道为什么调和平均而不是简单平均?我们使用调和平均值是因为它对非常大的值不敏感,不像简单的平均值。

比方说,我们有一个精度为1的模型,召回率为0给出了一个简单的平均值为0.5,F1分数为0。如果其中一个参数很低,第二个参数在F1分数中就不再重要了。F1分数倾向于具有相似精确度和召回率的分类器。

因此,如果你想在精确度和召回率之间寻求平衡,F1分数是一个更好的衡量标准。

ROC/AUC曲线

ROC是另一种常用的评估工具。它给出了模型在0到1之间每一个可能的决策点的敏感性和特异性。对于具有概率输出的分类问题,阈值可以将概率输出转换为分类。所以通过改变阈值,可以改变混淆矩阵中的一些数字。但这里最重要的问题是,如何找到合适的阈值?

对于每个可能的阈值,ROC曲线绘制假正例率与真正例率。

假正例率:被错误分类为正例的反例实例的比例。

真正例率:正确预测为正例的正例实例的比例。

现在,考虑一个低阈值。因此,在所有按升序排列的概率中,低于0.1的被认为是负的,高于0.1的都被认为是正的。选择阈值是自由的

但是如果你把你的门槛设得很高,比如0.9。

以下是同一模型在不同阈值下的ROC曲线。

从上图可以看出,真正例率以更高的速率增加,但在某个阈值处,TPR开始逐渐减小。每增加一次TPR,我们就要付出代价—FPR的增加。在初始阶段,TPR的增加高于FPR

因此,我们可以选择TPR高而FPR低的阈值。

现在,让我们看看TPR和FPR的不同值告诉了我们关于这个模型的什么。

对于不同的模型,我们会有不同的ROC曲线。现在,如何比较不同的模型?从上面的曲线图可以看出,曲线在上面代表模型是好的。比较分类器的一种方法是测量ROC曲线下的面积。

AUC(模型1)>AUC(模型2)>AUC(模型2)

因此模型1是最好的。

总结

我们了解了用于评估分类模型的不同度量。何时使用哪些指标主要取决于问题的性质。所以现在回到你的模型,问问自己你想要解决的主要目的是什么,选择正确的指标,并评估你的模型。

原文链接:https://www./blog/2020/10/how-to-choose-evaluation-metrics-for-classification-model/

欢迎关注磐创AI博客站:
http:///

sklearn机器学习中文官方文档:
http:///

欢迎关注磐创博客资源汇总站:
http://docs./

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多