0

我正在用 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)?

谢谢!

4

1 回答 1

0

是的,这是一个可行的策略,但有一个最终看不见的测试集。

还要检查所有数据,您对观察结果是否满意,它在与观察结果不符的情况下得分很高。

您对模型无法处理的案例满意吗?

如果没有,则进行加权训练,因此重要类型的案例处理得很好,而不太重要的案例可能没有。

于 2021-10-06T12:55:22.353 回答