You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras中多分类任务的准确率计算方法及定义困惑

多分类任务中两种准确率计算的差异解析

核心结论

  • Keras的keras.metrics.Accuracy()计算的是样本级准确率,这是多分类任务中最常用的准确率定义:正确分类的样本数 / 总样本数。
  • 第二种基于(TP+TN)/(TP+TN+FP+FN)的计算方式,是将多分类拆解为多个二分类后的总体二元判断准确率,这种方式在多分类任务中几乎不适用,因为它错误地将每个样本的非真实类别判断都纳入了有效评估指标。

具体案例分析

1. Keras样本级准确率计算

你的案例中,4个样本里3个被正确分类,对应代码与结果:

m = keras.metrics.Accuracy()
accuracy = m(yt, yp).numpy()  # 结果为0.75

这个结果的本质是:正确样本数 / 总样本数 = 3/4 = 0.75,完全符合多分类任务中对准确率的常规理解——我们核心关心的是每个样本是否被分到了正确的类别中。

2. 基于二元指标的总体准确率计算

当你将标签转为独热向量后,用TP、TN、FP、FN计算的准确率:

m11 = keras.metrics.TruePositives()
m00 = keras.metrics.TrueNegatives()
m01 = keras.metrics.FalsePositives()
m10 = keras.metrics.FalseNegatives()

TP = m11(yt, yp).numpy()  # 3
TN = m00(yt, yp).numpy()  # 15
FP = m01(yt, yp).numpy()  # 1
FN = m10(yt, yp).numpy()  # 1

accuracy = (TP + TN) / (TP + TN + FP + FN)  # (3+15)/(3+15+1+1)=18/20=0.9

这个计算的是所有类别-样本二元判断的正确率:每个样本对应5个类别判断,4个样本共20个判断,其中18个判断“正确”(3个正确预测真实类别,15个正确排除非真实类别)。但在多分类任务中,这些“正确排除非真实类别”的判断没有实际价值——我们只需要确认样本是否属于它的真实类别,而非逐一验证它不属于其他类别。

3. 召回率与样本级准确率的巧合

你用TP/(TP+FN)计算得到0.75,和样本级准确率一致,原因在于:

  • 这里的TP是样本真实类别被正确预测的数量(3个),FN是样本真实类别被错误预测的数量(1个)。
  • TP+FN正好等于总样本数(4个),所以召回率=3/4=0.75,本质和样本级准确率是同一个指标——只是换了一种表述方式,把“正确分类的样本”等同于“真实类别的真阳性”,“错误分类的样本”等同于“真实类别的假阴性”。

总结

  • 不要用第二种二元指标的方式计算多分类准确率,它不符合多分类任务的评估需求。
  • Keras的Accuracy()给出的是多分类任务中标准的样本级准确率,完全贴合实际业务场景的评估逻辑。

内容的提问来源于stack exchange,提问作者hgh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:39:54