仅供参考:

背景:XGBoost一个瓶颈是针对每个特征,它需要对每一个可能的分裂点扫描全部的样本来进行计算基尼系数,这是非常的耗时的。

Lightgbm的主要特点:

1. Lightfbm使用直方图算法在牺牲一定精度的条件下换取计算速度的提升和内存消耗的降低。使用了如下的两种方法:

  • Gradient-based One-Side Sampling(GOSS)首先根据样本梯度进行排序,选择Top a%的大梯度的样本,再随机选择b%的其他样本,组合起来去评估信息增益,减少了样本的量(间接降低小梯度样本的出现几率);
  • Exclusive Feature  Bundling(EFB):基于图算法,合并了部分特征,减少总特征量;

2. Lightgbm采用leaf_wise策略,而xgboost采用level_wise策略

3. Lightgbm直接支持分类变量

 

GOSS:

原理:GOSS首先根据样本梯度进行排序,然后选择Top a%的样本,从剩下的样本中随机的抽样 b%的样本。

Lightgbm基本原理

 

EFB:

原理:高纬度数据通常是稀疏的,许多特征之间是互斥的:比如一个样本内存在多个onehot以后的稀疏特征,各个onehot特征往往形形色色,不会同时有非0值。因此我们可以把互斥的特征进行bundle,通过算法就可以对同一个bundle里面的特征做相同的直方图。

Lightgbm基本原理

Level-wise VS Leaf-wise:

Xgboost:对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也对其进行分裂,这就浪费了资源。

Lightgbm基本原理

Lightgbm:当前叶子节点中选择分裂收益最大的节点j进行分裂。但是这样很容易造成过拟合,因为容易陷入较大的深度,所以必须设置树深。

Lightgbm基本原理

Categorical Feature:

  • 转换成ONE-HOT会耗用内存,并且引起树的不平衡,需要很大的树深才能达到较好的精度;
  • 一个可替代的优化方法是对分类特征进行二分,这样就会有2^(k-1)-1个分裂点;
  • 可以根据分类特征与目标变量的相关性进行重新排序。更详细的说就是根据分类特征的累积值(sum_gradient / sum_hessian)对其直方图进行重排,然后在排序好的直方图上寻找最佳分裂点。

分类:

技术点:

相关文章: