参数调整注意事项
参数调整是机器学习中的一门暗艺术,模型的最优参数可以依赖于很多场景。所以要创建一个全面的指导是不可能的。
本文档试图为 xgboost 中的参数提供一些指导意见。
理解 Bias-Variance(偏差-方差)权衡
如果你了解一些机器学习或者统计课程,你会发现这可能是最重要的概念之一。 当我们允许模型变得更复杂(例如深度更深)时,模型具有更好的拟合训练数据的能力,会产生一个较少的偏差模型。 但是,这样复杂的模型需要更多的数据来拟合。
xgboost 中的大部分参数都是关于偏差方差的权衡的。最好的模型应该仔细地将模型复杂性与其预测能力进行权衡。 参数文档 会告诉你每个参数是否会使得模型更加 conservative (保守)与否。这可以帮助您在复杂模型和简单模型之间灵活转换。
控制过拟合
当你观察到训练精度高,但是测试精度低时,你可能遇到了过拟合的问题。
通常有两种方法可以控制 xgboost 中的过拟合。
- 第一个方法是直接控制模型的复杂度
- 这包括
max_depth
,min_child_weight
和gamma
- 这包括
- 第二种方法是增加随机性,使训练对噪声强健
- 这包括
subsample
,colsample_bytree
- 你也可以减小步长
eta
, 但是当你这么做的时候需要记得增加num_round
。
- 这包括
处理不平衡的数据集
对于广告点击日志等常见情况,数据集是极不平衡的。 这可能会影响 xgboost 模型的训练,有两种方法可以改善它。
- 如果你只关心预测的排名顺序(AUC)
- 通过
scale_pos_weight
来平衡 positive 和 negative 权重。 - 使用 AUC 进行评估
- 通过
- 如果你关心预测正确的概率
- 在这种情况下,您无法重新平衡数据集
- 在这种情况下,将参数
max_delta_step
设置为有限数字(比如说1)将有助于收敛