翻译自Understanding LightGBM Parameters (and How to Tune Them)
- 10 分钟 阅读
- 作者 MJ Bahmani
- 2022 年 1 月 25 日更新
我已经使用lightGBM有一段时间了。对于大多数扁平数据问题,这是我的首选算法。它有很多突出特性,我建议你浏览一下。
但我一直很想了解哪些参数对性能的影响最大,以及我应该如何调整 lightGBM 参数以充分利用它。
我想我应该做一些研究,更多地了解 lightGBM 参数…并分享我的研究过程。
具体来说我做了以下事项:
- 深入研究LightGBM 的文档
- 浏览 Laurae 文章Lauraepp:xgboost / LightGBM 参数
- 查看LightGBM源代码
- 进行一些实验
在此过程中,我获得了有关 lightGBM 参数的更多知识。我希望在阅读完这篇文章后,您将能够回答以下问题:
- LightGBM 中实现了哪些 Gradient Boosting 方法,它们有什么区别?
- 哪些参数通常很重要?
- 哪些正则化参数需要调整?
- 如何在 python 中调整 lightGBM 的参数?
梯度提升方法(Gradient Boosting methods)
使用 LightGBM,您可以通过boosting参数指定使用不同类型的 Gradient Boosting 方法,例如:GBDT、DART 和 GOSS
在接下来的部分中,我将解释和比较这些方法。
lgbm gbdt(gradient boosted decision trees梯度提升决策树)
该方法是传统的梯度提升决策树,首次在这篇文章中提出,XGBoost 和 pGBRT 等一些优秀算法库都基于它实现。
如今,gbdt 因其准确、效率和稳定性而被广泛使用。您可能知道 gbdt 是决策树的集成模型,但它到底是什么意思?
我总结的要点如下。
它基于三个重要原则:
- 弱学习者(决策树decision trees)
- 梯度优化 (Gradient Optimization )
- 提升技术(Boosting Technique)
基于第一个原则, gbdt 方法中有很多决策树(弱学习器)。这些树是按如下顺序构建的:
- 第一棵树学习如何拟合目标变量
- 第二棵树学习如何拟合第一棵树的预测值和真实值之间的残差(差异)
- 第三棵树学习如何拟合第二棵树的残差,依此类推。
所有这些树都是通过在整个系统中传播误差梯度来训练的。
gbdt 的主要缺点是在每个树节点中找到最佳分割点是耗时且消耗内存的操作,其他 Gradient Boosting 方法试图解决该问题。
DART gradient boosting
在这篇出色的论文中,您可以了解有关 DART 梯度提升的所有信息,它通过使用神经网络中的 dropout、standard方法, 来改进模型正则化并处理一些其他less-obvious方法。
也就是说,gbdt 存在过拟合的问题,也就是在迭代末尾处添加的树往往只会影响少数实例的预测,而对剩余实例的预测影响甚微。添加 dropout 会使后续迭代中的树更泛化,从而提高性能。
lgbm goss(基于梯度的单侧采样)
lightgbm名字的由来最重要的原因就是使用了基于这篇论文的Goss方法,而Goss 是更新和更轻(lighter)的 gbdt 实现(因此是light gbm)。
标准 gbdt 是可靠的,但在大型数据集上不够快。因此,goss 提出了一种基于梯度的采样方法,以避免搜索整个搜索空间。我们知道,对于每个数据实例,当梯度较小时,意味着不用担心数据是否经过良好训练,而当梯度较大时,应该再次重新训练。所以我们这里有两类数据实例,具有大梯度和小梯度的数据实例。因此,goss 保留所有具有大梯度的数据,并对具有小梯度的数据进行随机抽样(这就是为什么它被称为 One-Side Sampling)。这使得搜索空间更小,goss 可以更快地收敛。最后,为了更深入地了解 goss,您可以查看这篇博文。
让我们将这些差异放在一个表格中:
| 方式 | 注意 | 需要改变的参数 | 优势 | 劣势 |
|---|---|---|---|---|
| Lgbm gbdt | 这是默认的boosting方式 | 因为 gbdt 是 lgbm 的默认参数,所以您不必为它更改其余参数的值(但是tuning仍是必须的!) | 过拟合、耗时、耗内存 | |
| Lgbm dart | 尝试解决gbdt中过拟合的问题 | drop_seed: 选择dropping models 的随机seed uniform_dro: 如果你想使用uniform drop设置为true, xgboost_dart_mode: 如果你想使用xgboost dart mode设置为true, skip_drop: 在boosting迭代中跳过dropout过程的概率 drop_rate: dropout率,在 dropout 期间要丢弃的先前树的一小部分? |
更高的准确率 | 配置太多 |
| Lgbm goss | goss 通过分离出具有较大梯度的实例,为 GBDT 提供了一种新的采样方法 | top_rate:大梯度数据的保留率 other_rate:小梯度数据的保留率 |
更快的收敛速度 | 数据集较小时过拟合 |
笔记:如果将 boosting 设置为 RF,则 lightgbm 算法的行为类似于随机森林,而不是 boosting 树!根据文档,要使用 RF,您必须使用 bagging_fraction 和 feature_fraction 小于 1。
正则化
在本节中,我将介绍 lightgbm 的一些重要的正则化参数。显然,这些是您需要调整以对抗过度拟合的参数。
您应该知道,对于小型数据集(<10000 条记录),lightGBM 可能不是最佳选择。调整 lightgbm 参数可能对您没有帮助。
此外,lightgbm 使用

最低0.47元/天 解锁文章





