GBDT(梯度提升决策树,gradient boost decision tree 的实现:XGBoost、pGBRT、sklearn、gbm in R 。
pGBRT通过直方图实现算法。XGBoost支持预排序和直方图算法。
已有研究:
如何实现GBDT速度提升:
1)减少训练数据:已有随机采样(SGB:准确率下降),根据样本权重筛选(GBDT没有native weights for data instances)
2)减少特征:预排序 和 直方图算法
LightGBM:在几乎相同准确率下,速度提升20倍数
创新:
一、基于梯度的单边采样GOSS (减少训练数据):梯度大的top a100%的 data instances, 剩下的随机取b100%%,这些剩下的(梯度小的)b*100%的 data instances 的Information gain 乘以(扩大)常数 (1-a)/b 倍 ,目的在于减少sample数量的同时尽量不改变原数据分布,论文后面有理论证明
二、互斥特征绑定EFB(减少特征):
1)step1:决定which features should be bundled toghether
NP-hard -> 简化为图模型求解 -> 简化,不用图了,通过非0值的个数的排序
γ:maximum conflict rate in each bundle
2)step2:如何bundle(基于直方图算法)
ensure the values of each feature can be identified from the feature bundles
通过 add offsets to the original values of the features 实现
refer: 论文《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》
内心OS:
两种GBDT速度提升的基本算法都不懂…
真的太难!不太有信心(后面有时间精力可以继续钻研…