CART

当CART是分类树时,采用GINI值作为节点分裂的依据;

当CART是回归树时,采用样本的最小方差作为节点分裂的依据;

 

DART

GBDT

 

 

XGBoost

 

XGBoost的极大创新:
对损失函数的二阶泰勒展开,求极值。求导=0,求出w,即叶子节点的值,是xgb的极大创新。
损失最终都变成了G和H的函数。
叶子节点权重、计算损失增益。

 

 

LightGBM

经阅读论文总结:LightGBM是对GBDT在不降低准确度的情况下运行效率的优化,特别是大数据量和稀疏特征情况下。
主要优化是2点:

Gradient- based One-Side Sampling (GOSS) 基于梯度的one-side采样

优化点: 在进行梯度提升的时,样本的梯度是不一样的,每次对大量足够小梯度的样本进行决策点寻找造成效率不高。

方法: 对梯度小的样本进行降采样。

具体:

对于每一次树的迭代,对样本梯度的绝对值进行倒序,前a*100%为梯度较高的样本。对剩余的(1-a)*%进行采样,假设采样样本占比为全体样本的 b*100%。

在计算information gain时对该类样本进行 (1-a)/b 倍的调整,以保持整体的稳定。

评价: 整体提升效果比较好。不是非常好的原因是每次迭代需要进行额外的计算。

 

Exclusive Feature Bundling (EFB) 互斥特征绑定

优化点:大量的稀疏特征,特征下非常少的非0元素,如果每次增益计算都进行则占用许多计算量。

方法:把互斥的特征合并在一起,降低特征的维度。

具体:把features => bundles。  找到最优的即把特征合并到最低维度是NP-hard问题,即多项式时间无法解决。

两个方法

a. 构建features Graph,其中边的权重是两个特征冲突数量的个数,然后对节点根据degrees进行倒排。

对features进行合并,直到达到冲突阈值γ,建立新的bundle。

这种方法需要在训练前进行预处理,需要花费O(sqare(#feature)) 的时间。 当特征数量不是很多的时候是可以接受的。

b. 认为非零元素多的特征越容易产生冲突。直接对特征进行非零元素个数进行排序。然后进行合并。

bundles特征值:

多个feature合并到一个bundle后存在特征值问题。解决方法是,进行数据偏移。因为树模型不是基于距离的。

比如:bundle中包含a、b两个特征。a特征范围是[0,10),b特征范围是[0,20),那么把b特征值改为[10,30),即10+原来的b。

评价:EFB有巨大的提升。

LightGBM使用了直方图方法,但不能算作他的特产。

从XGB到LGB:美团外卖树模型的迭代之路

https://www.itcodemonkey.com/article/9065.html

一是针对 Loss 做了二阶泰勒展开,收敛速度更加快。

二是引入正侧项,进一步防止过拟合。

三是按叶子加和。

四是极小值解析解。