Keras二分类模型验证准确率为1却仅预测类别0的问题排查
神经网络仅预测类别0的故障排查方案
核心问题:预测逻辑错误
你代码里的预测步骤用了完全错误的处理方式:
y_pred = model_net.predict(X_test).argmax(1)
你的神经网络最后一层是Dense(1, activation='sigmoid'),输出是单个0-1之间的概率值,代表样本属于类别1的概率。但argmax(1)是在维度1上取最大值的索引,而你的输出形状是(16516, 1),维度1只有一个元素,索引只能是0,所以所有预测结果全为0。
正确的预测逻辑
把sigmoid输出通过阈值(通常设为0.5)转换为类别标签:
y_pred_proba = model_net.predict(X_test) # 概率>=0.5则判定为类别1,否则为0,最后展平成一维数组 y_pred = (y_pred_proba >= 0.5).astype(int).flatten()
关于训练日志的说明
你看到训练时val_accuracy接近100%是真实的——Keras在二分类任务中计算accuracy时,默认会用0.5作为阈值把sigmoid输出转成类别,和真实标签对比。也就是说模型本身已经训练好了,只是你预测时的逻辑错误导致结果异常。
额外建议:数据缩放的正确姿势
虽然你提到缩放会降低其他模型的准确率,但神经网络对数据尺度更敏感。你可以单独给神经网络做数据预处理,不影响其他模型:
from sklearn.preprocessing import StandardScaler # 只针对神经网络的训练/测试集做缩放 scaler = StandardScaler() X_train_net = scaler.fit_transform(X_train) X_test_net = scaler.transform(X_test) # 用缩放后的数据训练神经网络 run_hist = model_net.fit(X_train_net, y_train, ...)
内容的提问来源于stack exchange,提问作者Mystic
相关产品推荐
相关产品推荐

