朵小喵儿|LightGBM的参数详解以及如何调优


朵小喵儿|LightGBM的参数详解以及如何调优lightGBM可以用来解决大多数表格数据问题的算法 。 有很多很棒的功能 , 并且在kaggle这种该数据比赛中会经常使用 。
但我一直对了解哪些参数对性能的影响最大以及我应该如何调优lightGBM参数以最大限度地利用它很感兴趣 。
我想我应该做一些研究 , 了解更多关于lightGBM的参数…并分享我的旅程 。
我希望读完这篇文章后 , 你能回答以下问题:
· LightGBM中实现了哪些梯度增强方法 , 它们有什么区别?
· 一般来说 , 哪些参数是重要的?
· 哪些正则化参数需要调整?
· 如何调整lightGBM参数在python?
梯度提升的方法使用LightGBM , 你可以运行不同类型的渐变增强提升方法 。 你有:GBDT、DART和GOSS , 这些可以通过"boosting"参数指定 。
在下一节中 , 我将对这些方法进行解释和比较 。
梯度提升决策树(GBDT)
该方法是本文首先提出的传统梯度提升决策树 , 也是XGBoost和pGBRT等优秀库背后的算法 。
由于其精度高、效率高、稳定性好 , 目前已得到广泛的应用 。 你可能知道gbdt是一个决策树的集合模型但是它到底是什么意思呢?
让我来告诉你要点 。
它基于三个重要原则:
· 弱学习者(决策树)
· 梯度优化
· 提升技术
所以在gbdt方法中 , 我们有很多决策树(弱学习者) 。 这些树是按顺序构建的:
· 首先 , 树学习如何适应目标变量
· 第二棵树学习如何适合残差(差异)之间的预测 , 第一棵树和地面真相
· 第三棵树学习如何匹配第二棵树的残差 , 以此类推 。
所有这些树都是通过传播整个系统的误差梯度来训练的 。
gbdt的主要缺点是 , 在每个树节点中找到最佳分割点非常耗时 , 而且会消耗内存 。 其他的提升方法试图解决这个问题 。
DART 梯度提升
在这篇优秀的论文中(arxiv/1505.01866) , 你可以学习所有关于DART梯度提升的东西 , 这是一种使用dropout(神经网络中的标准)的方法 , 来改进模型正则化和处理一些其他不太明显的问题 。
也就是说 , gbdt存在过度专门化(over-specialization)的问题 , 这意味着在以后的迭代中添加的树往往只会影响对少数实例的预测 , 而对其余实例的贡献则可以忽略不计 。 添加dropout会使树在以后的迭代中更加难以专门化那些少数的示例 , 从而提高性能 。
lgbm goss 基于梯度的单边采样
事实上 , 将该方法命名为lightgbm的最重要原因就是使用了基于本文的Goss方法 。 Goss是较新的、较轻的gbdt实现(因此是"light"gbm) 。
标准的gbdt是可靠的 , 但在大型数据集上速度不够快 。 因此goss提出了一种基于梯度的采样方法来避免搜索整个搜索空间 。 我们知道 , 对于每个数据实例 , 当梯度很小时 , 这意味着不用担心数据是经过良好训练的 , 而当梯度很大时 , 应该重新训练 。 这里我们有两个方面 , 数据实例有大的和小的渐变 。 因此 , goss以一个大的梯度保存所有数据 , 并对一个小梯度的数据进行随机抽样(这就是为什么它被称为单边抽样) 。 这使得搜索空间更小 , goss的收敛速度更快 。
让我们把这些差异放在一个表格中:
朵小喵儿|LightGBM的参数详解以及如何调优注意:如果你将增强设置为RF , 那么lightgbm算法表现为随机森林而不是增强树! 根据文档 , 要使用RF , 必须使用baggingfraction和featurefraction小于1 。
正则化在这一节中 , 我将介绍lightgbm的一些重要的正则化参数 。 显然 , 这些是您需要调优以防止过拟合的参数 。


推荐阅读