机器学习中参数调整是门艺术,模型的最佳参数可能取决于许多场景,所以很难为此做一个全面的指导。本文尝试为xgboost中的参数调整提供一些说明。
了解偏差-方差权衡(Bias-Variance Tradeoff)
在机器学习或统计课程中,偏差方差权衡可能是最重要的概念之一。当我们允许模型变得更加复杂(例如,更大的深度)时,模型具有更好的适应训练数据的能力,从而使模型偏差较小。然而,这种复杂的模型需要更多的数据来做训练。
xgboost中的大多数参数是关于偏差方差权衡的。最好的模型应该在模型的复杂性及模型的预测能力上做细致的权衡(注:模型的复杂度越高,对训练数据的拟合能力就越强,其泛化或者预测能力可能就越差)。
[xgboost参数文档]介绍了每个参数对模型造成的影响,可以帮助您在复杂的模型和简单的模型之间自由调整。
控制过拟合
当您观察到较高的训练准确率,但测试精度较低时,很可能遇到了过拟合问题。
通常可以通过两种方式来控制xgboost中的过拟合
- 第一种方式是直接控制模型的复杂性
- 这包括
max_depth
,min_child_weight
和gamma
- 这包括
- 第二种方法是增加随机性,使训练对噪声更加鲁棒
- 这包括
subsample
,colsample_bytree
- 你还可以减少步骤
eta
,但是当你这样做时,需要记住增加num_round
。
- 这包括
处理不平衡数据集
对于常见情况,例如广告点击日志,数据集非常不平衡。这会影响xgboost模式的训练,有两种方法可以改进。
- 如果你只关心您的预测的排名顺序(AUC)
- 通过
scale_pos_weight
平衡正负权重 - 使用
AUC
进行评估
- 通过
- 如果你关心预测正确的概率
- 在这种情况下,您无法重新平衡数据集
- 在这种情况下,将参数
max_delta_step
设置为有限数量(例如1)将有助于收敛
英文版:http://xgboost.readthedocs.io/en/latest/how_to/param_tuning.html