You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:24:02