sklearn生成混淆矩阵报multilabel-indicator不支持错误
错误根源
sklearn的confusion_matrix函数仅支持一维整数/类别型的真实标签与预测标签输入,你传入的y_test和y_pred均为形状为(样本数, 2)的二维数组,被函数识别为多标签指示器格式,因此抛出multilabel-indicator is not supported错误。
具体问题点:
- 你当前的
y_test是两列结构:第一列对应类别B的0/1标识、第二列对应类别S的0/1标识,属于二分类任务的独热编码标签格式,不是混淆矩阵要求的一维类别标签格式。 - 你当前的
y_pred是模型输出的0~1范围的二维概率值,既没有转换为离散的类别判定结果,维度也不符合输入要求。
修复方案
如果你的任务是B、S二选一的普通二分类任务(每个样本仅属于B、S其中一类),按以下步骤调整即可:
- 将二维独热格式的真实标签转换为一维类别标签:对每个样本取独热编码中值为1的位置索引,0代表B类、1代表S类
- 将二维概率格式的预测结果转换为一维离散类别标签:对每个样本取概率值最高的位置索引,作为预测类别
- 传入转换后的一维数组计算混淆矩阵
参考代码:
from sklearn.metrics import confusion_matrix import numpy as np # 转换真实标签为一维格式 y_test_cls = np.argmax(y_test, axis=1) # 转换预测概率为一维类别结果 y_pred_cls = np.argmax(y_pred, axis=1) # 计算混淆矩阵 cm = confusion_matrix(y_test_cls, y_pred_cls) print(cm)
注意:如果你的任务是多标签分类(即单个样本可以同时属于B和S两类),
confusion_matrix不支持直接计算全局混淆矩阵,需要针对B、S两个类别分别计算单类混淆矩阵。结合你描述的输出类别设置,你当前属于普通二分类场景,按上述方法转换即可解决报错。
内容的提问来源于stack exchange,提问作者John David Deatherage
相关产品推荐
相关产品推荐

