Accuracy
准确率是模型预测正确的比例。本文介绍计算公式、top-1 和 top-5 准确率、不平衡数据上的准确率悖论,以及更合适的指标。
准确率是模型预测正确的比例,即正确预测的数量除以预测总数。它是图像分类以及其他每个输入只有一个标签的监督学习任务的默认评分指标,回答了关于模型最直白的问题:模型有多大比例的预测是正确的。准确率易于理解,也便于比较模型,但它对每个预测一视同仁,因此在类别不平衡的数据上,模型可能得分很高,却恰恰在关键案例上表现不佳。
准确率的计算方法#
对于二分类任务,混淆矩阵的四项计数给出准确率 = (TP + TN) / (TP + TN + FP + FN):真阳性与真阴性之和除以所有预测数。对于多类别任务,准确率是矩阵对角线之和除以总数,而scikit-learn 的 accuracy_score可以根据两个标签数组直接计算准确率。准确率也常以错误率的形式报告,其中错误率 = 1 − 准确率。
Top-1 与 Top-5 准确率#
类别较多的分类器还会报告 top-k 准确率。只有当得分最高的类别是真实标签时,预测才计入 Top-1 准确率;如果真实标签位于得分最高的五个类别中的任意一个,则计入 Top-5 准确率。Top-5 随着 ImageNet 挑战赛成为标准指标;该数据集的照片通常包含多个对象,但每张照片只有一个来自 1000 个类别的标签。YOLO26分类模型会同时报告这两个数值;在 224 像素的 ImageNet 上,nano 模型 yolo26n-cls.pt 的 Top-1 准确率为 71.4%,Top-5 准确率为 90.1%。
准确率与相关指标#
- 精确率:在预测为正例的样本中,真正为正例的比例。误报减少时,精确率会上升。
- 召回率:在实际正例中,模型找到的比例。它能揭示模型是否忽略了罕见类别。
- F1 分数:精确率和召回率的调和平均值,只有两者都较高时,F1 分数才会较高。
- 平均精度均值(mAP):目标检测的标准指标。准确率不适用于目标检测,因为背景中没有可计数的真阴性,只有无限多个空图像区域。
准确率悖论#
当某个类别占主导地位时,准确率会奖励忽略罕见类别的做法。如果欺诈交易占 1%,一个批准所有交易的模型准确率可达 99%,却完全检测不到欺诈,这种现象称为准确率悖论。缺陷检测、疾病筛查和异常检测中也会出现同样的问题,因为这些任务关注的类别天生就很罕见。
import numpy as np
from sklearn.metrics import accuracy_score, balanced_accuracy_score, recall_score
# 1,000 transactions, 10 of them fraudulent (label 1)
y_true = np.zeros(1000, dtype=int)
y_true[:10] = 1
# A model that labels every transaction as legitimate
y_pred = np.zeros(1000, dtype=int)
print(f"Accuracy: {accuracy_score(y_true, y_pred):.2f}")
print(f"Balanced accuracy: {balanced_accuracy_score(y_true, y_pred):.2f}")
print(f"Fraud recall: {recall_score(y_true, y_pred):.2f}")平衡准确率是各类别召回率的平均值,能够揭示普通准确率掩盖的问题:脚本显示准确率为 0.99,平衡准确率为 0.50,欺诈召回率为 0.00。










