spark 使用LightGBM

原创
09/17 23:00
阅读数 32


简介

LightGBM:来自微软的快速稀度提升算法 。

多年以来,XGBoost一直是最受欢迎的分类和回归算法。但是最近,LightGBM 成为其新的挑战者。与XGBoost类似,LightGBM是一种较新的基于树的梯度提升变体。LightGBM于2016年10月17日发布,是微软分布式机器学习工具包(DMTK)项目的一部分。它快速且分布式的设计使得训练速度更快且内存使用率更低。它具有支持GPU、采用并行学习以及能够处理大型数据集等能力。LightGBM 在多个基准测试和公共数据集实验中甚至比 XGBoost 更快,更准确。


备注
LightGBM作为微软机器学习(MMLSpark)生态系统的一部分,已经移植到Spark中。微软一直在积极开发数据科学和深度学习工具,并将其与Apache Spark 生态系统进行无缝集成,例如 Microsoft Cognitive Toolkit、OpenCV和LightGBM。MMLSpark需要Python 2.7或3.5+、Scala 2.11和 Spark 2.3+。


与 XGBoost 相比,LightGBM具有多种优势。它利用直方图将连续特征存储到离散的分箱中,使得其与XGBoost 相比具有性能优势(XGBoost 默认情况下使用基于预排序的算法进行树学习),比如减少内存使用量,减少计算每个分割增益的成本,降低并行学习的通信成本。LightGBM通过对其同级和父级执行直方图减法来计算节点的直方图,从而进一步提高性能。在线基准测试显示,在某些任务中,LightGBM 比XGBoost(无分箱)快11倍到15倍。

LightGBM是逐叶生长(最佳优先)的,在准确率方面通常胜过 XGBoost。

训练决策树主要有两种策略∶
逐层生长和逐叶生长(如图3-7所示)。

逐层生长是大多数基于树的集成(包括XGBoost)的生长决策树的传统方法。LightGBM引入了逐叶生长策略。

与逐层生长不同,逐叶生长通常会更快收敛,且实现较低的损耗

在这里插入图片描述

逐叶生长对小型数据集趋于过拟合。 建议在LightGBM 中设置max_depth 参数以限制树的深度。请注意,即使设置了max_depth,树仍会按逐叶生长。


备注

XGBoost也采纳了 LighlGBM的许多优化措施, 包括逐叶材生长策略以 及使用直方图将连续特征存储到离散的分箱中。最新的基准测试表明XGBoost与 LightGBM性能相仿。


安装

https://blog.csdn.net/zwqjoy/article/details/115694603


参数解析

与其他算法(如随机 森林)相比,LightGBM的调整会稍微复杂一些。LightGBM使用逐叶(最佳优先)树生长算法,如果没有正确配置参数、该算法可能会过拟合。

此外,LightGBM有100多个参数。在开始使用LightGBM时,要首先关注最重要的参数,随着对算法的逐渐熟悉,然后再了解其余内容。

  • max_depth
    设置此参数可防止树生长过深。浅树的过拟合可能性较小。如果数据集较小,则此参数的设置非常重要。

  • num_leaves
    用于控制树模型的复杂度。该值应小于2^(max depth)以防止
    过拟合。将 num leaves 设置为较大的值可以提高准确率,但同时过拟合的可能性会较高。将 num leaves 设置为较小的值有助于防止过拟合。

  • min_data_in_leaf
    将此参数设置为较大的值可以防止树生长过深。这是另一个能够帮助你控制过拟合的参数。将该值设置得太大可能会导致欠拟合。

  • max_bin
    LightGBM使用直方图将连续特征的值分到离散的分箱,设置max_bin表示将值分组的分箱数量。较小的 max_bin 可以帮助控制过拟合并提高训练速度,而较大的值可以提高准确率。

  • feature _fraction
    此参数启用特征子采样。此参数指定在每次迭代中将随机选
    择的特征比例。例如,将 feature fraction设置为0.75将在每次迭代中随机选择75% 的特征。设置此参数可以提高训练速度,并有助于防止过拟合。

  • bagging_fraction
    指定将在每次迭代中选择的数据比例。
    例如,将 bagging_fraction设置为0.75将在每次迭代中随机选择75%的数据。设置此参数可以提高训练速度,并有助于防止过拟合。

  • num iteration
    该参数设置提升迭代次数,其默认值为100。对于多类别分
    类,LightGBM会构建 num class * num iteration个迭代树。设置此参数会影响训练速度。

  • objective
    与XGBoost一样,LightGBM支持多个目标。默认目标设置为回归。设置此参数来指定模型要执行的任务类型。对于回归任务,选项为∶regression 12、regression l1、poisson、quantile、mape、gamma、huber、fair 或 tweedie。对于分类任务,选项为binary、multiclass或 multiclassova。设置正确的目标非常重要,可以避免不可预测的结果或较差的准确性。

由于LightGBM 参数较多,强烈建议执行参数寻优以确定这些参数的最佳值。


参考文献

  • 《基于spark的下一代机器学习: XGBoost、LightGBM、SparkNLP 与Keras 分布式深度学习实例》

  • https://github.com/microsoft/SynapseML

  • https://lightgbm.readthedocs.io/en/latest/Parallel-Learning-Guide.html?highlight=spark#integrations

  • https://cloud.tencent.com/developer/article/1857208

  • https://zengwenqi.blog.csdn.net/article/details/115694603

  • https://blog.csdn.net/zwqjoy/article/details/115694603

本文同步分享在 博客“shiter”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部