Keras二分类模型生成混淆矩阵报ValueError错误如何解决
问题解决
报错原因
Keras二分类模型使用sigmoid作为输出层激活函数时,predict接口返回的是0~1区间的连续概率值,而scikit-learn的confusion_matrix、classification_report等分类指标计算工具要求输入的预测结果必须为离散的类别标签(0/1),两类数据格式不匹配直接触发该报错。
此外你的原有代码存在两处疏漏:
- 未调用
model.predict(X_test)给y_pred赋值 - 仅写了
y_pred.round没有调用该方法(正确写法是y_pred.round())
修复步骤
步骤1:获取预测结果并转换为类别标签
在调用分类指标前新增以下代码:
# 获得测试集预测概率 y_pred = model.predict(X_test) # 将概率转换为0/1标签,默认采用0.5作为分类阈值 y_pred_label = y_pred.round().astype(int).squeeze() # 将y_test也降为一维数组,避免形状不匹配 y_test_label = y_test.squeeze()
如果需要自定义分类阈值(比如调整正负样本的判类偏好),可替换阈值转换逻辑,示例如下(阈值设为0.3):
y_pred_label = (y_pred >= 0.3).astype(int).squeeze()
步骤2:调用指标函数生成结果
print(classification_report(y_test_label, y_pred_label)) print(confusion_matrix(y_test_label, y_pred_label))
额外提示:你的代码中导入了PyTorch的Dataset、DataLoader相关组件,但全程使用Keras接口训练模型,这部分冗余代码可直接删除,不影响运行效果。
内容的提问来源于stack exchange,提问作者Ash Roy
相关产品推荐
相关产品推荐

