8.md 2.1 KB
Newer Older
片刻小哥哥's avatar
片刻小哥哥 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
# 参数调整注意事项

参数调整是机器学习中的一门暗艺术,模型的最优参数可以依赖于很多场景。所以要创建一个全面的指导是不可能的。

本文档试图为 xgboost 中的参数提供一些指导意见。

## 理解 Bias-Variance(偏差-方差)权衡

如果你了解一些机器学习或者统计课程,你会发现这可能是最重要的概念之一。 当我们允许模型变得更复杂(例如深度更深)时,模型具有更好的拟合训练数据的能力,会产生一个较少的偏差模型。 但是,这样复杂的模型需要更多的数据来拟合。

xgboost 中的大部分参数都是关于偏差方差的权衡的。最好的模型应该仔细地将模型复杂性与其预测能力进行权衡。 [参数文档](https://github.com/dmlc/xgboost/tree/master/doc/how_to/parameter.md) 会告诉你每个参数是否会使得模型更加 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)将有助于收敛