LightGBM -- Tree Ensemble工具的新选择


MSRA最近PR活动频繁,这篇文章我也不会比他们自己写得更好,本文仅作备忘,推荐MSRA官方公众账号“微软研究院AI头条”

介绍

微软开源了新的Boosted tree框架,LightGBM(https://github.com/Microsoft/LightGBM),号称数倍于XGBoost的速度和更好的准确性。
出人意外的是,这次的文档写的也很全很好,值得推荐。

LightGBM 官方介绍视频

官方的介绍视频已经讲解地非常棒,时长33分钟。
不过在视频中也有对XGBoost的误读(?),比如说”XGB find best split 是O(#data)“,其实并没有,XGB的weighted quantile sketch和直方图算法,本质上是类似的。
见仁见智。

改进

LightGBM对GBDT做了许多改进,其实很多改进XGB也一样做了,下面选取了LightGBM比较独特的Feature,后面的数字为官方说法。

  • 直方图算法选取split value -- 2倍加速
  • leaf wise的tree 构造方法 -- 增加准确度,减小过拟合
  • 类别特征直接处理 -- 8倍加速
  • 解决了cache miss问题 -- 2倍加速
  • 直方图bin value 从float 改为byte -- 节省 7/8 内存
  • voting 式的并行算法 -- 更快收敛
  • DL中drop out方法的引入 -- 减小过拟合
  • 支持weighted instance, 每个样本可以指定权重 -- 可能也许会有一点点用处

安装

目前LightGBM尚不支持pip install,需要本地编译,我在本地编译得比较舒服,一次通过,尚不清楚是否有什么坑。
安装教程: Installation Guide

使用

  • LGB 同时支持python package和命令行方式。
  • LGB 支持csv文件和libsvm文件以及自有的二进制压缩文件。
  • LGB 同XGBoost一样,支持输出模型文件与dump 模型,这使得LGB很好debug
  • LGB 的base class继承自 sklearn.base.BaseEstimator, 所以理论上sklearn的相应方法,比如model_selection.GridSearchCV,是可以无痛接入LGB 的

python package使用:Python Package Introduction
命令行使用: Cli Quick Start

总结

虽然从算法来说,最大的区别是使用了leaf wise的方式来构造tree structure。
但是对从业人员来说,LightGBM在实现上的考虑更值得关注,有时候我们过分关注算法和公式,然而一些简单的trick足够让性能有巨大的提升,比如稍微考虑下

  • 新的数据结构
  • 善用bit
  • 想想模型实现的I/O问题和cache问题

解决问题才是从业人员需要考虑的事情。机器学习之所以是计算机科学的分支,正是因为非常重要的指标之一物理性能表现如何,很大程度上是由我们的实现是否优雅高效决定的。

Comments
Write a Comment
  • Roy reply

    我想问一下哪里可以知道lightgbm的算法原理?数学公式?

    Can I get the Algorithm principle of the lightgbm?The mathematical formula?