作为近年来kaggle的大杀器,LightGBM以其极低的内存消耗和远超xgboost的运算速度得到了越来越多的关注。作为gbdt优化的集大成者,又有microsoft背书,让我们一起来看一下lgbm到底有何神奇之处。
- 直方图优化:将连续特征以直方图形式离散化是特征工程中的惯用思路,而在lgbm中使用直方图更多的是为了节省内存和计算开销。一个显而易见的好处是计算分裂增益的时间复杂度从O(N)下降到O(bins),内存上可以采用更小的类型。另外,对一棵分裂的二叉树来说,两个子节点直方图相加即为父节点直方图。通常构造直方图,需要遍历该叶子上的所有数据,但直方图做差仅需遍历直方图的 k 个桶。利用这个方法,lgbm可以在构造一个叶子的直方图后,可以用非常微小的代价得到它兄弟叶子的直方图。
- 稀疏优化:只用非零特征构建直方图
- 精度优化:树的生长模式从level-wise变为leaf-wise,这样在相同节点数的情况下lgbm拥有更高的精度。 缺点可能会导致树的深度过大,解决方式是增加最大深度限制。