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

Python中使用ANN进行12类多分类时混淆矩阵生成报错求助

解决ANN多分类任务中混淆矩阵的类型不匹配报错

嘿,我碰到过一模一样的问题!这个ValueError: Classification metrics can't handle a mix of multiclass and continuous-multioutput targets报错,本质就是你的**真实标签(y_true)和预测结果(y_pred)**的数据类型不匹配——一个是离散的类别(比如0到11的整数编码),另一个却是连续的概率值(比如ANN输出的每个类的概率),sklearn的混淆矩阵根本不知道怎么处理这种混搭。

下面给你一步步解决的方案:

1. 先检查你的ANN输出层配置

多分类任务(12类)的输出层必须用softmax激活函数,而不是sigmoid。因为softmax会输出每个类别的概率,且所有类别的概率总和为1,正好对应多分类的场景。如果用了sigmoid,输出的是每个类别的独立概率,会导致后续处理混乱。

示例代码(以Keras为例):

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()
# 前面的隐藏层定义省略...
model.add(Dense(12, activation='softmax'))  # 12类对应12个神经元,激活用softmax

2. 将连续的预测概率转换为离散类别标签

你的y_pred现在应该是形状为(样本数, 12)的概率矩阵,每个样本对应12个类别的概率。我们需要把每个样本的最大概率对应的类别索引取出来,转换成和真实标签一样的整数形式:

import numpy as np

# 把预测概率转成类别标签(0-11)
y_pred_classes = np.argmax(y_pred, axis=1)

3. 确保真实标签的格式正确

如果你的真实标签是独热编码(比如形状为(样本数, 12)的二进制矩阵),也需要转换成整数类别标签:

# 把独热编码的真实标签转成整数标签
y_true_classes = np.argmax(y_true, axis=1)

如果你的真实标签本来就是0-11的整数,这一步可以直接跳过。

4. 生成混淆矩阵

现在两个标签都是离散的整数形式,就可以正常生成混淆矩阵了:

from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_true_classes, y_pred_classes)
print(cm)

这样操作后,应该就能顺利生成混淆矩阵,不会再报类型不匹配的错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:59:46