我用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))
這些精度的值是,
- 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
uj5u.com熱心網友回復:
我的代碼正確嗎?
抱歉,不完全是——
對于 Precision、Recall 和 f1,您不應取諸如 之類的曲線的平均值
f1_train = np.mean(..,而是:
使用您的 PR-AUC 和 ROC-AUC 來定義閾值。使用門檻binarise的y_pred_ *,然后呼叫classification_report列印最終準確率,召回和F1分數。然后,您將看到有效的 f1 分數以及精確度和召回率如何影響它。RMSE:尋找交叉熵指標可能是(在您對預測進行二值化之后),因為它是您訓練的分類器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/361885.html
