Xgboost和lightgbm的区别

这是数据应用学院8/4 Live:数据科学家常用工具XGBoost与LightGBM大比拼,性能与结构的笔记。

https://www.youtube.com/watch?v=dOwKbwQ97tI

 

Xgboost, lightgbm, catboost实际上是对GBDT方法的不同实现,它们针对同一目标、做了不同的优化处理。

XGboost作为最早出现的库,优化做得稍微少一些,但总体而言,它们都对基础的GBDT方法做了不同的优化。

首先,它们在基础逻辑上并没有什么不同,我们限定max_trees或者max_iterations,之后算法从0棵树开始跑,每一轮根据上一轮的残差增加一棵决策树。在每一次增加决策树的时候,选择当前的最优结构。而在生成当前决策树的过程中,各个算法采用了不同的优化方案。

在生成每一棵决策树时,我们从一棵空决策树开始,不断地进行节点划分。其划分依据如下:

对于binary features,处理是很简单的。但:

对于categorical features,xgboost需要自己采用one-hot等方法进行处理,而lightgbm和catboost有自己的处理方法。lightgbm使用的处理方法并不是one-hot,而是另一种optimal的划分方法。

 

对于连续变量,选择分界点较为困难。一个较为简单的方法是brute force,把数据集中连续变量每一个可能的取值都尝试一次,然后对于每一个分界点,遍历所有example,确定这些example在分界点的左边还是右边。当然也可以先对example进行排序再划分,这一优化称为presorted。但在大的数据集中,这个方法显然是很慢的。为了进一步加速,XGboost允许使用histogram方法,将连续变量划分为不同的bins,在这些bins的中心线做划分。不过histogram理论上会导致一定的性能损失。

而lightgbm除了hist之外还提供另一项优化,这项优化被称为GOSS。lightgbm保留高梯度的samples,而从导致较小的地图变化的samples进行一个随机采样。什么是数据的梯度?

 

lightGBM的树生长的过程也和xgboost不一样。xgboost的生长是level-wise的,即一层一层生长的,而lightgbm是leaf-wise即梯度优先的。如下图所示,即使左子树已经比右子树深很多,但只要左子树的梯度划分仍然比右子树占优,就继续在左子树进行划分。

你可能感兴趣的:(GBDT系列)