如何修复ValueError:分类指标无法处理多分类与连续多输出目标混合问题
解决CIFAR10混淆矩阵报错:Classification metrics can't handle a mix of multiclass and continuous-multioutput targets
问题根源
你遇到的报错有两个核心原因:
- 标签维度不匹配:
cifar10.load_data()返回的测试集标签y_test是二维数组(形状为(10000, 1)),而confusion_matrix要求输入一维的类别索引。 - 预测结果类型错误:
model.predict(X_test)返回的是每个样本对应10个类别的概率值数组(形状为(10000, 10)),属于连续多输出类型,而confusion_matrix需要的是离散的类别索引值。
之前用train_test_split的代码能正常运行,大概率是因为你当时的标签已经被处理为一维,或者划分后默认输出一维标签,同时可能提前把预测概率转成了类别索引。
修复步骤
直接修改代码中生成y_pred和处理y_test的部分:
- 把二维的
y_test转为一维:y_test = y_test.flatten() # 或者 y_test = np.squeeze(y_test) - 将预测概率转为类别索引(取概率最大的类别):
y_pred_probs = model.predict(X_test) y_pred = np.argmax(y_pred_probs, axis=1) - 再调用混淆矩阵:
from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)
这样就能匹配confusion_matrix对输入类型的要求,顺利生成混淆矩阵。
内容的提问来源于stack exchange,提问作者blacky
相关产品推荐
相关产品推荐

