RFC: 重新考虑 XGBoost 中树模型学习的默认超参数
作者: RAMitchell创建于 2026年3月26日更新于 2026年9月14日
| 参数 | 当前 | 建议 |
|---|---|---|
eta |
0.3 | 0.1 |
max_depth |
6 | 10 |
min_child_weight |
1 | 2 |
subsample |
1.0 | 0.8 |
colsample_bytree |
1.0 | 0.8 |
xgboost.train(..., num_boost_round=...) |
10 | 300 |
xgboost.cv(..., num_boost_round=...) |
10 | 300 |
sklearn 回退 n_estimators |
100 | 300 |
| 参数未变化 |
gamma = 0colsample_bylevel = 1reg_lambda = 1reg_alpha = 0(xgboost.readthedocs.io)
理由说明
对于 XGBoost 的超参数调整能力,最有力的学术证据仍然是 Probst、Boulesteix 和 Bischl (2019)。他们的跨数据集研究表明,在包默认值下,XGBoost 具有可观的调整能力,而在更改默认值后,调整能力大幅下降。该论文还明确指出,在 XGBoost 中,调整 nrounds 和 eta 的联合收益相对较低,因为两者之间存在高度关联:当 nrounds 设置为较高时,eta 通常应设置为较低,反之亦然。(jmlr.org)
该论文还报告了学习的 XGBoost 默认值与当前发行的默认值之间的巨大差距。他们报告的最佳默认值包括非常小的 eta、小于 1 的 subsample、小于 1 的 colsample_bytree、大于 1 的 min_child_weight、远大于 6 的 max_depth,以及数千而不是数十或数百的 nrounds。具体报告的值根据指标而有所不同,但方向是一致的:学习率更小、回合预算更大、行/特征采样适度、树深度更深,以及叶节点增长稍微更加保守。(jmlr.org)
更广泛的 boosting 文献也指向了同一方向。Friedman 的原始梯度提升论文指出,缩小引入了两个相关的正则化参数,学习率 v 和组件数 M,并且降低 v 会提高 M 的最佳值。XGBoost 自己的参数文档…
内容来源: dmlc/xgboost