type
status
date
slug
summary
tags
category
icon
password
引入:混淆矩阵(Confusion Matrix)
在谈及指标之前,我想先谈谈混淆矩阵(confusion matrix or error matrix)。混淆矩阵本质上就是以表格的形式对算法输出进行可视化。矩阵的每一行都表示实际类中的实例,而每列表示预测类中的实例。因此,矩阵的对角线代表了预测正确的所有实例。

而对于2x2的混淆矩阵,我们也可以表述为以下这种形式(也可以推广到更高维的矩阵,概念是一样的):

这里引入了四个非常重要的概念:
- True Positive (TP):真阳性,被预测为正样本的正样本数量
- False Positive (FP):假阳性。被预测为正样本的负样本数量
- True Negative (TN):真阴性。被预测为负样本的负样本数量。
- False Negative(FN):假阴性。被预测为负样本的正样本数量。
有了这些基本定义,我们接下来就可以对基于此的各种指标进行探讨。
一、准确率(Accuracy)
1. 定义
准确率可以说是机器学习中最常用的指标之一,用于衡量正确的预测数量占所做预测总数的百分比。
也可以写作:
2. 适用范围和局限性
准确率适用于以下这些情况:
- 类别分布均衡
- 错误代价相近
- 对于不平衡的类别分布,准确率并不是一个很好的指标。例如在一个95%为负类,5%为正类的数据集中,即使模型将所有样本都预测为负类,也能得到95%的准确率,显然这是毫无意义的。
- 准确率无法区分不同类型错误的严重性。比如在疾病诊断中,把患病的人判为健康(FN)远比把健康的人判为患病(FP)严重,但准确率不会体现这种差异。
二、精确率(Precision)
1. 定义
精确率衡量的是:模型预测为正类的样本中,有多少是真正的正类。也就是说,精确率着重强调了结果的正确性。
因此,精确率本质上是描述模型的预测能力有“多精确”。高精确率意味着尽管模型会将某些正样本预测为负样本,但只要是预测的正样本基本上就是正确的。低精确率意味着即使你预测出了很多正样本,这里面很多都是错误的。
2. 适用范围和局限性
精确率适用于以下这些情况:
- 假阳性代价特别高:例如金融系统中将正常客户错判为欺诈客户会导致客户流失。
- 置信度需求高:例如“Top-N”推荐中,我们宁愿少点推荐结果,也不要胡乱推荐错误结果。
- 精确率本身不考虑漏报(FN)。
- 模型很可能非常保守,只预测极少量的正样本以提高精确率。
三、召回率(Recall)
1. 定义
召回率指的是:所有实际为正类的样本中,被模型成功识别出来的比例。召回率着重强调了结果的覆盖度。
召回率本质上是描述模型能找回多少正样本。高召回率意味着模型能够找到绝大多数的正样本,即使很多负样本也被预测成了正样本;低召回率意味着模型找到的正样本数量相对很少,即使可能正确率很高。
2. 适用范围和局限性
召回率适用于以下这些情况:
- 假阴性代价特别高:例如医疗诊断中宁可误报也不能漏报
- 保证正样本数量:例如RAG中要保证一定比例的正样本返回,即使会掺杂负样本
- 召回率不考虑误报(FP)
- 模型可能非常宽泛,将所有样本都预测为正样本。
四、F-1 Score
在很多情况下,我们需要对精确率和召回率进行权衡,这就意味着可以调整模型降低召回率来提高精确率,或者另一方面以降低精确率为代价来提高召回率。F-1分数就是这样一种方案。
1. 定义
F-1分数被定义为精确率和召回率的调和平均值:
由于F1分数是精确率和召回率的平均值,这意味着它对精确率和召回率的权重相同:
- 如果精确率和召回率都很高,模型将获得较高的F1分数
- 如果精确率和召回率都较低,模型将获得较低的F1分数
- 如果精确率和召回率中的一个低而另一个高,则模型将获得中等F1分数
为什么我们使用调和平均值而不是普通平均值呢?这是因为调和平均对极端值更敏感。如果精确率或召回率中任何一个很低,那么F1分数也会很低,这能鼓励模型在两者之间取得平衡。
2. 适用范围和局限性
F1分数具有以下的优势:
- 能够处理类别不平衡的数据
- 能够有效平衡精确率和召回率
- F1分数对极端情况过于敏感
- 类别极端不平衡时不如AUC稳定,F1会剧烈波动
3. 拓展:Fβ分数
有时候我们需要手动控制更关注精确率还是召回率,因此有:
五、AUC(ROC曲线下面积)
1. ROC曲线
我们先定义两个指标:
- True Positive Rate (TPR): (也就是召回率)
- False Positive Rate (FPR):
ROC曲线(Receiver Operating Characteristic Curve)是一个以:
- x轴:假正率 FPR(False Positive Rate)
- y轴:真正率 TPR(True Positive Rate = Recall)
为坐标轴的曲线,表示随着分类阈值变化时模型性能的变化。

从图中我们看到,曲线越靠近左上角,说明模型的分类效果越好。
如何绘制ROC曲线呢?在模型预测完毕后,我们通过设置一个阈值(threshold)来判定该预测值属于哪个正类还是负类。每一个不同的阈值都会得到一个不同的TPR和FPR,ROC曲线就是在不同的阈值下的TPR和FPR对应的点集。
2. AUC(Area under ROC)
理解了ROC,AUC就很好解释了,本质上就是ROC曲线下面积,如图:

因此,当AUC=0.5时,相当于一个随机分类器(小于0.5说明你的模型还不如随机预测)。
完美的模型说明在某些阈值下,TPR为1.0,FPR 为 0.0,都表示为(0, 1)(如果所有其他阈值均被忽略),或者出现以下情况:

对于多分类问题,其实就是一对一或者一对多取平均,或者加权平均,这里不展开详谈,之后也许会写博文介绍这一方面。
总结来看,AUC分数是指代模型“将正样本排在负样本前面”的能力,对类别不平衡非常友好,是评价分类模型质量的黄金标准之一。
3. 使用范围与局限性
AUC分数适用于以下场景:
- 模型输出概率值而不是直接输出标签
- 正负样本极度不平衡
- AUC分数不考虑实际分类阈值
- 不考虑代价不对称性
- 只反映排序能力,高AUC不代表高精确率或F1分数
📎 参考资料
- 作者:HeartBird
- 链接:https://blog.heartbird.site/article/1cc1ac30-0542-80ae-8bbf-c75743d5b3ab
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。