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

分类模型预测出现0类,混淆矩阵显示4类的原因及解决方法

混淆矩阵出现额外0类的原因及解决方法

问题原因

  1. 标签编码偏移:你的真实标签采用1-based编号(1、2、3),但模型输出的预测结果是0-based类别索引(0、1、2),两者存在固定偏移量1。模型的预测本质是正确的(0对应1、1对应2、2对应3),但编码不匹配导致混淆矩阵工具将预测中的0视为全新类别,最终显示4类。
  2. 混淆矩阵自动类别检测:像sklearn的confusion_matrix这类工具,会自动收集真实标签和预测结果中所有出现的唯一值作为类别集合。当真实标签包含{1,2,3}、预测结果包含{0,1,2}时,会合并为{0,1,2,3}四个类别。

解决方法

1. 对齐标签编码(推荐)

统一真实标签和预测结果的编码规则,二选一即可:

  • 将真实标签转为0-based:对训练集、测试集的标签执行减法操作,把1→0、2→1、3→2,与模型输出索引完全匹配:
    trainY = trainY - 1
    testY = testY - 1
    
  • 将预测结果转为1-based:把模型输出的0、1、2加1,转为1、2、3,与原始真实标签对齐:
    y_prediction = y_prediction + 1
    
    注意:训练集和测试集的标签编码逻辑必须一致,否则会导致训练/测试不匹配。

2. 绘制混淆矩阵时指定目标类别

若不想修改原始标签,可在生成混淆矩阵时手动指定labels参数,限定只统计你需要的3个类别:

from sklearn.metrics import confusion_matrix
# 只统计1、2、3三类,忽略预测中的0
cm = confusion_matrix(testY, y_prediction, labels=[1, 2, 3])

3. 检查模型训练配置

确认模型输出层的类别数量设置为3,且训练时的标签编码与预测时一致。比如使用分类损失函数时,若输入整数标签,需确保标签是0-based索引,避免模型误判类别总数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:57:43