为什么二分类神经网络predict输出为浮点数而非整数?
问题解决方法
问题原因
你搭建的二分类网络最后一层使用sigmoid激活函数,该函数的输出范围为0~1,本质是样本属于正类的概率值,Keras的predict接口默认返回该原始概率输出,不会自动转换为0/1二分类标签,属于正常设计,并非代码错误。
解决方法
你只需要对预测得到的概率值做阈值切割即可得到二分类结果,可根据你的场景选择合适的阈值:
- 通用场景使用默认0.5阈值:
# 先得到概率输出 y_pred_prob = cost_sensitive_NN.predict(X_test_NN) # 阈值切割得到0/1标签 y_pred = (y_pred_prob > 0.5).astype(int)
- 代价敏感场景自定义阈值:
你当前训练时设置了class_weight = {0:1, 1:100},说明错分正类的代价远高于错分负类,为了匹配该代价设定,建议下调分类阈值(例如设置为0.2~0.3),降低正类的漏判率:
custom_threshold = 0.3 y_pred = (y_pred_prob > custom_threshold).astype(int)
注意:你当前代码仅设置了1轮训练,模型大概率处于欠拟合状态,概率输出的区分度会很差,建议先调整epoch数训练到验证集AUC不再上升后再执行预测操作。
内容的提问来源于stack exchange,提问作者Ozzie427
相关产品推荐
相关产品推荐

