【发布时间】:2021-11-20 04:10:40
【问题描述】:
我用sequential() keras 模型创建了一个深度神经网络模型。这是一个二元分类问题。我已经为model 安装了火车数据。
我对训练和验证数据的不同准确度指标的计算感到困惑。我正在计算 RMSE、F1 分数、ROC 和 PR 曲线的 AUC,
# Prediction
y_pred_train = model.predict(x_train_df).ravel()
y_pred_val = model.predict(x_val_df).ravel()
# RMSE
rmse_train = mean_squared_error(y_train_df, y_pred_train)
rmse_val = mean_squared_error(y_val_df, y_pred_val)
# ROC-AUC
fpr_train, tpr_train, thresholds_roc_train = roc_curve(y_train_df, y_pred_train, pos_label=None)
fpr_val, tpr_val, thresholds_roc_val = roc_curve(y_val_df, y_pred_val, pos_label=None)
roc_auc_train = auc(fpr_train, tpr_train)
roc_auc_val = auc(fpr_val, tpr_val)
# PR-AUC
precision_train, recall_train, thresholds_pr_train = precision_recall_curve(y_train_df, y_pred_train)
precision_val, recall_val, thresholds_pr_val = precision_recall_curve(y_val_df, y_pred_val)
pr_auc_train = auc(recall_train, precision_train)
pr_auc_val = auc(recall_val, precision_val)
# F1 Score
f1_train = np.mean(2 * (precision_train * recall_train) / (precision_train + recall_train))
f1_val = np.mean(2 * (precision_val * recall_val) / (precision_val + recall_val))
这些精度的值是,
- RMSE 训练 0.11
- RMSE 验证 0.13
- ROC-AUC 训练 0.94
- ROC-AUC 验证 0.91
- PR-AUC 训练 0.96
- PR-AUC 验证 0.93
- F1 分数训练 0.66
- F1 分数验证 0.66
我对机器学习很陌生。我通过搜索各种网页实现了这些代码。 我的代码是否正确?我感到很困惑,因为 F1 分数不是很高,尽管所有其他指标的值都很高。
如果代码正确,那为什么我的 F1 分数没有那么高?
编辑 1
正如评论中所问,精度和召回值是
print(np.mean(precision_train))
print(np.mean(recall_train))
print(np.mean(precision_val))
print(np.mean(recall_val))
输出:
0.9299899169174257
0.6012312742646909
0.8988925808831595
0.6052356704530617
【问题讨论】:
-
为什么不打印精确率和召回率来了解为什么 f1 分数会这样?
-
添加了这些有问题的值。此外,所有指标的计算/代码是否正确?
-
结果F1低是因为召回率低。
-
RMSE 在分类问题中毫无意义
标签: python tensorflow machine-learning keras