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

ValueError分类指标报错:无法处理multilabel-indicator与continuous-multioutput混合目标

报错原因

ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets
这个报错是两个问题共同导致的:

  1. 你调用confusion_matrix、classification_report等sklearn分类评估函数时,传入的真实标签y_test是OneHot编码后的二维数组,属于sklearn定义的multilabel-indicator类型;而模型输出的predictions是每个类别的预测概率,属于continuous-multioutput类型,sklearn的分类指标不支持直接对这两种类型做匹配计算。
  2. 你代码最后一行的y_lab是未定义的变量,即使解决了类型问题也会抛出变量不存在的错误。
解决方法

你可以选择以下任意一种方法修复问题:

  • 方法1:将真实标签和预测结果都转为一维的类别标签后再传入评估函数
    在调用评估函数前新增以下代码即可:
import numpy as np
# 预测概率转类别标签:取概率最高的类别对应的索引
y_pred = np.argmax(predictions, axis=1)
# 独热编码的真实标签转成原始类别标签
y_true = np.argmax(y_test, axis=1)

# 替换原来的评估代码
print(confusion_matrix(y_true, y_pred))
print(classification_report(y_true, y_pred))
  • 方法2:训练时不使用OneHot编码标签,改用稀疏分类交叉熵损失
    修改训练流程,省去对标签做OneHot编码的步骤,同时把模型损失函数替换为sparse_categorical_crossentropy,适配整数类型的类别标签:
# 删掉原来OneHot编码的相关代码,y_train和y_test直接用train_test_split输出的整数标签即可
# 编译模型时修改损失函数
model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 预测后还是需要把概率转成类别标签
import numpy as np
y_pred = np.argmax(model.predict(X_test), axis=1)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

内容的提问来源于stack exchange,提问作者Md. Imrul Kayes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:06:03