我正在用 R 中的 XGBoost 拟合一个二元分类模型。我的数据集有 30 万个观察值,有 3 个连续预测变量和 1 个单热编码因子变量,有 90 个级别。因变量y
是真或假。
我已经进行了随机子采样以找到最佳超参数。对于每个设置,我都做了 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
我得出结论,该模型对训练数据过度拟合,因为 AUC 在 200 次迭代后接近 1。同时,该模型仍在验证数据上进行改进。一方面,我会得出结论,500 次迭代后的模型不是一个好的模型,因为它在训练数据上过度拟合。另一方面,该模型在验证数据上具有最高的 AUC。
如果该模型在训练数据上过度拟合(如上所示)是否是最佳模型,或者我是否应该进一步调整以使模型对训练数据的过度拟合较少(在验证数据上具有相似甚至略低的 AUC)?
谢谢!