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

如何修正混淆矩阵代码中的ValueError:二元与多标签目标混合问题

解决混淆矩阵生成时的"binary和multilabel-indicator targets"错误

这个报错的核心是**y_true和y_pred的数据格式不匹配**:confusion_matrix要求两个输入要么都是一维的类别标签(形状为(样本数,)),要么都是相同维度的多标签指示符,但你的输入一个是二进制单标签(一维),另一个是多标签指示符(二维),导致无法计算。

以下是针对性的修改方案,分两种常见场景:

场景1:模型用sigmoid输出单概率值(二分类常规设置)

如果模型最后一层是sigmoid,输出形状为(样本数, 1),需要把预测结果压平成一维;同时确认真实标签是一维格式(如果是独热编码需转成一维)。

修改调用代码:

threshold = 0.5
# 处理预测结果:将二维数组压平为一维
y_pred = (model.predict(X) > threshold).astype(np.int32).flatten()
# 处理真实标签:若为独热编码(二维)则转成一维标签
y_true = np.array(Y_val_org).astype(np.int32)
if y_true.ndim == 2:
    y_true = np.argmax(y_true, axis=1)
# 调用混淆矩阵函数
print_confusion_matrix(y_true, y_pred)

场景2:模型用softmax输出多分类概率(二分类时输出两个概率)

如果模型最后一层是softmax,输出形状为(样本数, 2),需要用argmax提取预测的类别索引,转成一维标签;真实标签也要同步转成一维格式。

修改调用代码:

threshold = 0.5
# 处理预测结果:用argmax获取类别索引
y_pred = np.argmax(model.predict(X), axis=1)
# 处理真实标签:若为独热编码则转成一维标签
y_true = np.array(Y_val_org).astype(np.int32)
if y_true.ndim == 2:
    y_true = np.argmax(y_true, axis=1)
# 调用混淆矩阵函数
print_confusion_matrix(y_true, y_pred)

额外必查项

你的代码里用到了confusion_matrix、pandas、seaborn等库,确保开头已导入:

from sklearn.metrics import confusion_matrix
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:42:11