如何避免 XGBoost 模型中的过拟合

机器算法验证 过拟合 助推
2022-03-12 04:35:42

训练和测试数据上的 ROC 曲线图像

我尝试从 35K 数据点和 12 个特征的数据集中对数据进行分类

首先,我将数据分为训练数据和测试数据以进行交叉验证交叉验证后,我使用以下参数构建了 XGBoost 模型

n_estimators = 100

最大深度=4

scale_pos_weight = 0.2,因为数据不平衡(85% 正类)

但是模型过度拟合了训练数据。可以做些什么来避免过度拟合?

1个回答

XGBoost(以及其他梯度提升机器程序)有许多参数可以调整以避免过度拟合。我会提到一些最明显的。例如我们可以改变:

  • 使用的特征的比率(即使用的列);colsample_bytree. 较低的比率可避免过度拟合。
  • 使用的训练实例的比率(即使用的行);subsample. 较低的比率可避免过度拟合。
  • 树的最大深度;max_depth. 较低的值可避免过度拟合。
  • 进行进一步拆分所需的最小损失减少;gamma. 较大的值可避免过度拟合。
  • 我们的 GBM 的学习率(即我们用每棵连续的树更新我们的预测多少);eta. 较低的值可避免过度拟合。
  • 叶子中所需的实例权重的最小总和,在某些应用中,这与节点中所需的最小实例数直接相关;min_child_weight. 较大的值可避免过度拟合。

此列表并不详尽,我强烈建议您查看XGBoost 文档以获取有关其他参数的信息。请注意,试图避免过度拟合可能会导致拟合不足,即我们正则化太多而无法学习相关信息。在这个问题上,人们可能想要考虑使用单独的验证集或简单的交叉验证(xgboost.cv()例如通过)来监控 GBM 在执行更多迭代时的进度(即添加基础学习器)。这样就可以及早发现潜在的过度拟合问题。这与使用早期停止作为一种正则化形式密切相关;XGBoost 提供了一个early_stopping_rounds与这种情况相关的论点。

最后,我还要指出,报告的班级不平衡(85-15)并不是很严重。使用默认值scale_pos_weight1 可能就足够了。