分类模型评估指标:Accuracy、Precision、Recall、F1、ROC曲线、AUC、PR曲线

Accuracy & Precision & Recall & F1

准确率 Accuracy

A c c u r a c y = T T + T F A L L Accuracy = \frac{TT + TF}{ALL} Accuracy=ALLTT+TF

1.分类器到底分对了多少?

精确率 Precision

2.返回的图片中正确的有多少?

召回率 / 查全率 Recall

3.有多少张应该返回的图片没有找到?

这个问题可以通过Recall值来体现(因为Recall值 = 1 - 有多少张应该返回的图片没有找到 / 应该返回的图片总数,该公式中除了"有多少张应该返回的图片没有找到"的值是变量以外,其它均为常数)

召回率代表"本应返回的照片中,实际返回了多少"

Recall为返回的图片中汉堡的图片的数目 / 测试集样本中所有汉堡的图片的数目。

F1值

由上图可以看出(召回率100%的情况下精确率非常低):不能一味地要求召回率高,也不能一味地要求精确率高。否则会导致另一个值相对较低。因此此时我们就提出了一个新的值------F1值

总结

二分类:

多分类

  • 准确率 A c c u r a c y = 所有的绿色求和 A L L Accuracy = \frac{所有的绿色求和}{ALL} Accuracy=ALL所有的绿色求和
  • 精确率往往单独看每一类,比如C6, P r e c i s i o n = C 6 的这个绿色 C 6 整一行样本总数 Precision = \frac{C6的这个绿色}{C6整一行样本总数} Precision=C6整一行样本总数C6的这个绿色
  • 召回率同上, R e c a l l = C 6 的这个绿色 C 6 整一列样本总数 Recall = \frac{C6的这个绿色}{C6整一列样本总数} Recall=C6整一列样本总数C6的这个绿色
  • F1值是精确率和召回率的调和平均

如上,可以求出每一类的Precision、Recall、F1

如果想知道整体的Precision、Recall、F1,可以直接求平均或者求加权平均

实际上刚才求的是宏观macro的Precision、Recall、F1 ,相应地,我们也可以求微观micro的Precision、Recall、F1:

针对每一类,都有TP、FP、TN、FN。若要求整个模型的TP,可以把每一类的TP都加起来。这样就得到了针对整个模型的TP、FP、TN、FN。再套入公式,就可以得到微观micro的Precision、Recall、F1

注意如果模型针对一个输入只返回一个label,也就是说一个输入只能对应一个类别的话,这样求出的微观micro的Precision、Recall、F1都会是相等的,且都等于Accuracy

ROC曲线 & AUC值

这个视频里举的例子基于 逻辑回归,但RPC & AUC应用范围不止如此

y轴表示老鼠是否肥胖,x轴表示老鼠的体重

使用逻辑回归曲线对数据进行拟合的结果如上图

当我们进行逻辑回归时,y轴被转换为老鼠肥胖的概率。如下图:

如果现在有一只很重的老鼠,那么曲线会告诉我们这只老鼠肥胖的概率很高,如下图:

所以这个逻辑回归告诉我们:基于老鼠的重量,它们肥胖的概率。如下图

然而,如果我们想把老鼠归类为肥胖或者不肥胖,那么我们需要一种方法将概率转化为分类

对小鼠进行分类的一种方法是将阈值设置为0.5,把所有肥胖概率大于0.5的老鼠归类为肥胖,并将所有肥胖概率小于等于0.5的老鼠归类为非肥胖

为了来评估这个分类阈值为0.5的逻辑回归模型的效果,我们可以用已知肥胖或非肥胖的老鼠做测试:如下图:

这是四只已知非肥胖的新老鼠的重量,以及这是四只已知肥胖的新老鼠的重量

现在我们创建一个混淆矩阵confusion matrix来总结分类的结果,如下图

如下图,完成了混淆矩阵之后,我们可以计算敏感性和特异性,来评估这个肥胖阈值为0.5的逻辑回归模型

现在,当我们使用不同的阈值来决定样本是否肥胖时会发生什么?

比方说,正确分类每个真正肥胖的样本非常重要,我们可以将阈值设置为0.1:

这将导致四只肥胖老鼠都被正确分类,但是这也会增加假阳性的数量。较低的阈值,也会减少假阴性的数量

注意如果使用不是0.5的阈值的想法让你大吃一惊:想象一下现在我们不再将样本分类为肥胖或不肥胖,而是将其归类为感染了埃博拉病毒或没有感染埃博拉病毒。在这种情况下,正确分类每个感染埃博拉病毒的样本是绝对重要的。这样才能将病毒爆发风险降至最低,即使这会导致更多的假阳性

阈值可以设置为0到1之间的任何值,我们如何确定哪个阈值是最好的呢?

首先,我们不需要测试每一个选项:例如,这些阈值会产生完全相同的混淆矩阵

但即使我们对每个重要的阈值都计算一个混淆矩阵,这也将导致令人头疼的大量混淆矩阵

所以与其被混淆矩阵弄得不知所措,

Receiver Operator Characteristic Curve

接收者操作特性receiver operator characteristic(ROC)图graphs 提供了一种简单的方法来总结所有信息

y轴显示真阳性率,也就是敏感性 。真阳性率 = 真阳性 / (真阳性 + 假阴性)

因此y轴告诉你被正确归类为肥胖的样本比例

x轴表示假阳性率,等于1-特异性

假阳性率 = 假阳性 / (假阳性 + 真阴性)

因此x轴告诉你多大比例的非肥胖样本被错误地分类

为了更好地了解ROC是如何运作的:

我们将从使用将所有样本归类为肥胖的阈值开始,首先得到如下这个混淆矩阵

现在来提高阈值,使得除了最轻的样本之外,所有的样本都被归为肥胖,得到如下的混淆矩阵

继续提高阈值,所以除了俩个最轻的样本之外,所有样本都被称为肥胖

如上图,新的点在绿色虚线的左边还要远的地方,这表明新的阈值进一步减少了被错误归类为肥胖的样本比例,也就是说新的阈值是目前为止最好的一个

继续提高阈值,

并绘制其点,如下图

继续提高阈值,

如上图,新点表示的阈值正确分类75%的肥胖样本和100%非肥胖的样本。

换句话说,这个阈值不会导致假阳性

继续提高阈值,

最后我们选择一个阈值使得所有样本都被归类为非肥胖

我们可以把这些点联系起来,这给了我们一个ROC图,如下图

ROC图总结了由每个阈值产生的所有的混淆矩阵,且无需盘点每个混淆矩阵就能看出某个阈值比另一个阈值更好

且这个ROC的最佳阈值就在两个点中产生

Area Under the Curve

接下来谈谈 曲线下面积AUC(Area Under the Curve)

AUC使比较两条ROC曲线变得容易

这里红色的AUC是0.9

红色ROC曲线的AUC大于蓝色ROC曲线的AUC,说明红色曲线更好。所以如果红色ROC曲线代表逻辑回归,蓝色的ROC曲线代表一个随机森林模型,你将使用逻辑回归

虽然ROC图的绘制使用了真阳性率和假阳性率来总结混淆矩阵,还有其他指标可以做同样的事情

例如,人们经常把真阳性率替换为精确度

精确度 = 真阳性 / (真阳性 + 假阴性)

精确度表示多大比例的阳性样本被正确分类

如果相对于肥胖样本的数量,有很多非肥胖的样本。那么精确度可能比假阳性率更有用。这是因为精确度在其计算中不包括真阴性的数量,并且不受不平衡数据的影响

在实践中,这种数据不平衡会发生在研究一种罕见疾病时,在这种情况下,这项研究将包含更多没有疾病的人,相比于有疾病的人

概括地说,

当设置不同阈值时,可以得到不同混淆矩阵,而每个混淆矩阵对应一个TPR值和FPR值。如果把所有的TPR值和FPR值映射到一个二维空间中,然后把这些点连起来,就可以得到ROC曲线

ROC曲线使得用于做决定的最佳阈值变得容易。AUC可以帮你决定哪种分类方法更好

ROC曲线 & AUC值

假设有一个分类器可以判断一张图片是否是汉堡,那么分类器会先计算这张图片是汉堡的概率,进而预测到底是否是汉堡

每个阈值会对应一个混淆矩阵

那么,有没有一种方法能把所有的混淆矩阵表示在同一个二维空间内呢?

------Receiver Operator Characteristic(ROC)曲线

对于一个混淆矩阵,可以求出TPR和FPR两个指标。如果把TPR作为y轴、FPR作为x轴,就可以把每个混淆矩阵和这个二维矩阵中唯一的一个点对应

判断哪个分类器效果更好?

TPR和FPR的分母,对于同一个数据集是固定不变的,

由于我们希望TP尽可能大、FP尽可能小,也就是说我们想要TPR尽可能大、FPR尽可能小

因此曲线越靠近左上角,效果越好

那么我们能否通过一个数值来看,而不是单纯通过图片呢?

------曲线与x轴的面积,也就是AUC值
AUC的值在0-1之间,越大越好

多分类

对于多分类,可以求得宏观macro和微观micro的AUC

求宏观macro AUC:

针对每一个类别都可以画一个ROC曲线,然后求出对应AUC值。然后对每一个类别的AUC求某种平均就得到了整个模型宏观的AUC值

求微观micro的AUC:

假设概率预测结果如下表所示,

例如样本1的真实类别为C1,样本2的真实类别为C3。

每行概率之和为1,因此我们可以得到一个经过转换的预测结果。可以根据这个表得到针对整个模型的ROC曲线,以及它对应的AUC值

ROC曲线 & PR曲线

现在如果我们用Precision值来代替前面ROC曲线中的TPR值,用Recall值来代替FPR值。并且将这些点连起来得到一个新的曲线,就是PR曲线,也就是Precision-Recall曲线

因为对于每一个混淆矩阵,都有唯一的TPR值-FPR值的数值对,也可以计算出唯一的Precision值-Recall值的数值对,所以可以说:每一个ROC曲线都有唯一的一个PR曲线与之对应,也就是它们之间可以相互转换,且是一一对应的

上一节中提到ROC曲线越靠近左上角效果越好

而对于PR曲线而言,因为是希望Precision和Recall值同时越大越好 ,所以 PR曲线越靠近右上角效果越好

ROC曲线与PR曲线的关系

ROC曲线与PR曲线有什么关系呢?

L1曲线 dominates L2 -> L1曲线上所有点都在L2曲线上方

证明上述结论:

得到了AB之间Precision、Recall值的关系后,再代入到PR曲线中:

就可以判断出在Precision中L1也dominatesL2

ROC曲线与PR曲线应用场景

ROC曲线与PR曲线分别在什么情况下使用?

如上图,根据定义可知, TPR值等于Recall值

因此这两个曲线最大的区别就是FPR值和Precision值

如上图,假设同一个数据集有两个分类器,因此两个分类器的TP值和FN值都是相同的

可以看出,当FP值不同时,Precision值更能反应两个分类器的差异

因此得出结论:

ROC曲线:对正负两类同样关心;

PR曲线:对正例更加关心

下面来更直观地看一个例子,极度不平衡的数据

从左边的ROC图看起来效果很好,但从右边的PR图看起来效果很差

(注意这里图片左下角错了,是493个负例)

如果我们更关心正类的预测结果,且数据非常不平衡时,我们应选用PR曲线而不是ROC曲线

AUROC & AUPR

(1)AUROC

AUROC即为area under ROC curve,意为ROC 曲线下面积。在前面有提到曲线越靠左上代表模型表现能力越好,代表着曲线的面积也越大,即AUROC数值越高模型表现能力越好。

(2) AUPR

AUPR 即为area under Precision-Recall curve,意为在横轴为Precision 纵轴为Recall所绘出的曲线,通常会希望Precision 及Recall都是高的,所以曲线越靠近右上代表模型表现能力越好,相同的AUPR数值越高代表模型能力也越好。

结语: 模型的好坏不单单只是看训练的准确率,更应该关注在模型的泛化能力,那以上的评估指标就相当的重要。

Reference

【官方双语】ROC & AUC 详细解释!
【小萌五分钟】机器学习 | 模型评估: 准确率 Accuracy 精确率 Precision 召回率 Recall F1值

相关推荐
靴子学长8 分钟前
基于字节大模型的论文翻译(含免费源码)
人工智能·深度学习·nlp
AI_NEW_COME1 小时前
知识库管理系统可扩展性深度测评
人工智能
海棠AI实验室1 小时前
AI的进阶之路:从机器学习到深度学习的演变(一)
人工智能·深度学习·机器学习
hunteritself1 小时前
AI Weekly『12月16-22日』:OpenAI公布o3,谷歌发布首个推理模型,GitHub Copilot免费版上线!
人工智能·gpt·chatgpt·github·openai·copilot
IT古董2 小时前
【机器学习】机器学习的基本分类-强化学习-策略梯度(Policy Gradient,PG)
人工智能·机器学习·分类
centurysee2 小时前
【最佳实践】Anthropic:Agentic系统实践案例
人工智能
mahuifa2 小时前
混合开发环境---使用编程AI辅助开发Qt
人工智能·vscode·qt·qtcreator·编程ai
四口鲸鱼爱吃盐2 小时前
Pytorch | 从零构建GoogleNet对CIFAR10进行分类
人工智能·pytorch·分类
落魄君子2 小时前
ELM分类-单隐藏层前馈神经网络(Single Hidden Layer Feedforward Neural Network, SLFN)
神经网络·分类·数据挖掘
蓝天星空2 小时前
Python调用open ai接口
人工智能·python