Keras Sequential二分类模型准确率矩阵计算相关问题咨询
问题解答
1 代码正确性验证
你的代码里RMSE、ROC-AUC、PR-AUC的计算逻辑基本正确,仅存在两处错误:
- 变量命名不规范:你调用
mean_squared_error()得到的是MSE(均方误差),但变量名写为rmse,RMSE(均方根误差)需要对MSE开平方,修正写法为:rmse_train = np.sqrt(mean_squared_error(y_train_df, y_pred_train)) rmse_val = np.sqrt(mean_squared_error(y_val_df, y_pred_val)) - F1 Score计算逻辑错误:
precision_recall_curve()返回的precision、recall是所有可能分类阈值对应的指标序列,你对所有阈值的F1求平均,得到的不是行业通用的单值F1分数。
常规单值F1需要先选定分类阈值,将预测概率转为0/1类别标签后再计算,正确写法参考:from sklearn.metrics import f1_score # 以默认阈值0.5为例,可根据需求调整 y_train_pred_label = (y_pred_train >= 0.5).astype(int) y_val_pred_label = (y_pred_val >= 0.5).astype(int) f1_train = f1_score(y_train_df, y_train_pred_label) f1_val = f1_score(y_val_df, y_val_pred_label)
2 F1数值偏低的原因
你当前得到的0.66是所有阈值下F1的平均值,本身就会远低于最优阈值下的F1值:
从你给出的均值结果看,所有阈值下召回率的均值仅0.6左右、精确率均值0.9左右,二者调和平均后的F1均值自然在0.66区间,属于计算逻辑错误导致的数值偏低,不是模型本身的F1表现差。
如果修正计算逻辑后F1仍然偏低,说明你当前使用的分类阈值不合理:你的ROC-AUC、PR-AUC都很高,证明模型的排序能力非常优秀,只要根据PR曲线找到F1最高的最优阈值即可得到符合模型水平的高F1值,最优阈值查找参考代码:
# 计算所有阈值对应的F1,取最大值对应的阈值 f1_scores = 2 * (precision_train * recall_train) / (precision_train + recall_train) best_idx = np.argmax(f1_scores) best_threshold = thresholds_pr_train[best_idx] # 用最优阈值计算最终F1 y_train_pred_label = (y_pred_train >= best_threshold).astype(int) best_f1_train = f1_score(y_train_df, y_train_pred_label)
内容的提问来源于stack exchange,提问作者Badal
相关产品推荐
相关产品推荐

