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

基于预训练VGG19的四类分类任务中准确率计算异常问询

为什么用混淆矩阵计算4分类准确率和直接比对标签的结果不一致?

嘿,这个问题其实是多分类任务里很常见的误区,我来帮你理清楚根源和解决办法:

核心原因:二分类准确率公式不能直接套用到多分类场景

先明确你用的两个公式的本质:

  • 你写的Eq1 sum(predictedLabels==testLabels)/numel(predictedLabels) 是多分类任务准确率的标准计算方式——它统计所有样本中预测与真实标签完全匹配的比例,本质就是把每一类的「真正例(TP)」加起来,再除以总样本数,展开后是:

    Accuracy = (TP1 + TP2 + TP3 + TP4) / 总样本数
    

    这里的TP1是第1类被正确预测为第1类的样本数,以此类推。

  • 而Eq3 (TP+TN)/(TP+TN+FP+FN) 是二分类专属的准确率公式。在二分类里,TN(真负例)是明确的:不属于正类的样本被正确预测为负类的数量。但在4分类任务中,「负类」的定义完全模糊了——比如对第1类来说,TN是被正确预测为2、3、4类的样本吗?但如果强行把所有非TP的样本合并成TN+FP+FN,就会完全错误地统计,因为多分类里的FP和FN是针对每一类单独存在的,不能像二分类那样统一合并计算。

举个直观的小例子:假设总共有100个样本,每类25个。如果模型把第1类的10个样本错预测成第2类,第2类的5个样本错预测成第1类,其他样本都分类正确。用Eq1算准确率是(25+20+25+25)/100=95%;但如果硬套二分类的Eq3,你根本没法定义统一的TN,算出来的结果自然和Eq1对不上。

用混淆矩阵计算多分类准确率的正确姿势

对于你得到的4×4混淆矩阵confMat(行代表真实标签,列代表预测标签),正确的准确率计算应该是取混淆矩阵对角线元素的和,再除以总样本数,代码如下:

accuracy_from_confMat = sum(diag(confMat)) / sum(confMat(:));

这个结果和你用Eq1计算的结果会完全一致,因为对角线元素正好对应每一类的TP,加起来就是所有分类正确的样本数,除以总样本数就是标准的多分类准确率。

额外小贴士

如果之后需要计算每一类的精确率(Precision)、召回率(Recall),也要针对每一类单独计算:

  • 第i类的精确率:confMat(i,i)/sum(confMat(:,i))(预测为i类的样本中,真正属于i类的比例)
  • 第i类的召回率:confMat(i,i)/sum(confMat(i,:))(真实属于i类的样本中,被正确预测的比例)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:51:56