使用 sequential() 模型进行二元分类的精度矩阵

Accuracy matrices for binary classification with sequential() model

我用 sequential() keras 模型创建了一个深度神经网络模型。这是一个二元分类问题。我已经为 model 安装了火车数据。

我对训练和验证数据的不同准确度指标的计算感到困惑。我正在计算 RMSE、F1 分数、ROC 的 AUC 和 PR 曲线,

# 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))

这些准确度的值为,

我对机器学习还很陌生。我通过搜索各种网页实现了这些代码。 我的代码正确吗?我感到困惑,因为 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

我的代码正确吗?

抱歉,不完全是 -

  1. 对于 Precision、Recall 和 f1,您不应该采用 f1_train = np.mean(.. 等曲线的平均值,而是:
    使用您的 PR-AUC 和 ROC -AUC 定义阈值。使用该阈值将 y_pred_ * 二值化,然后调用 classification_report 打印最终精度、召回率和 f1 分数。然后,您将看到有效的 f1 分数以及精确度和召回率如何影响它。

  2. RMSE:选择交叉熵指标可能是(在你对你的预测进行二值化之后),因为它是你训练的分类器。