R で XGBoost を使用してバイナリ分類モデルをフィッティングしています。私のデータセットには、3 つの連続予測子と 90 レベルのワンホット エンコードされた因子変数を含む 300k の観測値があります。従属変数y
は True または False です。
最適なハイパーパラメータを見つけるために、ランダムなサブサンプリングを行いました。すべての設定に対して、5 倍の (グループ化された) CV を実行しました。以下のハイパーパラメータ設定により、5 倍の評価データ フォールドで最高の平均 AUC が得られました。
booster objective max_depth eta subsample colsample_bytree min_child_weight
gbtree binary:logistic 8 0.7708479 0.2861735 0.5338721 1
次に、以下の XGBoost モデル フィッティングでこれらのハイパーパラメータ設定を使用しました。
model_n <- xgb.train(data = xgb_trainval,
booster = "gbtree",
objective = "binary:logistic",
max_depth = 8,
eta = 0.7708479,
subsample = 0.2861735,
colsample_bytree = 0.5338721,
min_child_weight = 1,
nrounds = 1000,
eval_metric = "auc",
early_stopping_rounds = 30,
print_every_n = 100,
watchlist = list(train = xgb_trainval, val = xgb_val)
)
この方法で評価ログを視覚化しました。
model_iterations <- model_n$evaluation_log$iter
model_train_auc <- model_n$evaluation_log$train_auc
model_val_auc <- model_n$evaluation_log$val_auc
200 回の反復後に AUC が 1 に近づくため、モデルがトレーニング データに過剰適合していると結論付けます。同時に、モデルはまだ検証データを改善しています。一方では、500 回の反復後のモデルは、トレーニング データに強くオーバーフィットしているため、適切なモデルにはなり得ないと結論付けます。一方、このモデルは検証データで最高の AUC を持っています。
このモデルは、上記のようにトレーニング データで過剰適合している場合に最適でしょうか?それとも、トレーニング データでの過剰適合が少ないモデルを使用するようにさらに調整する必要がありますか?
ありがとうございました!