前言
Xgboost对特征工程和数据处理比较友好,相比之下调参成为用好Xgboost重要的一环,本文分别从参数、调参方法、Python实现的维度进行梳理,作为调参思路的记录。
本文将关注以下几个问题:
1.Xgboost哪些参数需要调参?
2.通用的调参方法有哪些 ? 如何实现?
Xgboost哪些参数需要调参?
下表列出了 xgboost 0.90版本下 xgboost.sklearn 中 XGBBaseModel 的所有输入参数;根据对全部31个参数功能的初步了解并参考了其他博文(包括XGBoost调参笔记_浅笑古今的博客-CSDN博客_xgboost调参,https://segmentfault.com/a/1190000014040317等),初步对xgboost 实践中各参数调参重要性进行了排序,详见rank列;其中3>2>1。需要说明的是,这种调参重要性的划分只是提供一种参考,仍需要根据具体问题具体分析。(TODO:其中有些None值和空值还需要完善)
参数名 | 简说明 | 范围 | 默认 | 典型值 | rank | 说明 |
n_estimators | 学习器的数量 | int | 100 | 100~500 | 3 | 基本学习器的数量 |
max_depth | 树深度 | 0,∞ | 3 | 3~10 | 3 | 每个基本学习器树的最大深度,值越大数越复杂 |
learning_rate | 学习率 | [0,1] | 0.1 | 0.01~0.2 | 3 | 每次迭代更新权重时的步长。值越小,训练的越慢。 |
gamma | 损失减少阈值 | 0,∞ | 0 | None | 3 | 分裂节点时,损失函数减小值只有大于等于gamma节点才分裂,gamma值越大,算法越保守 |
reg_alpha | L1正则化 | float | 0 | None | 3 | 增加该值会让模型更加收敛 |
reg_lambda | L2正则化 | float | 1 | None | 3 | 控制XGBoost的正则化部分的,可以减少过拟合 |
min_child_weight |