为什么lightgbm比xgb快?

  统计/机器学习 监督式学习    浏览次数: 874
0

为什么lightgbm比xgb快那么多?感觉速度可能是xgb的5倍,但是精度、auc什么的都差不多。

lightgbm是用了什么独家窍门吗?


 

信春哥   2017-12-16 16:44



   2个回答 
5

LightGBM采用了基于梯度的单边采样(GOSS)的方法。

在过滤数据样例寻找分割值时,LightGBM 使用的是全新的技术:基于梯度的单边采样(GOSS);而 XGBoost 则通过预分类算法和直方图算法来确定最优分割。

在 Adaboost 中,样本权重是展示样本重要性的很好的指标。但在梯度提升决策树(GBDT)中,并没有天然的样本权重,因此 Adaboost 所使用的采样方法在这里就不能直接使用了,这时我们就需要基于梯度的采样方法。

梯度表征损失函数切线的倾斜程度,所以自然推理到,如果在某些意义上数据点的梯度非常大,那么这些样本对于求解最优分割点而言就非常重要,因为算其损失更高。

GOSS 保留所有的大梯度样例,并在小梯度样例上采取随机抽样。比如,假如有 50 万行数据,其中 1 万行数据的梯度较大,那么我的算法就会选择(这 1 万行梯度很大的数据+x% 从剩余 49 万行中随机抽取的结果)。如果 x 取 10%,那么最后选取的结果就是通过确定分割值得到的,从 50 万行中抽取的 5.9 万行。

在这里有一个基本假设:如果训练集中的训练样例梯度很小,那么算法在这个训练集上的训练误差就会很小,因为训练已经完成了。

为了使用相同的数据分布,在计算信息增益时,GOSS 在小梯度数据样例上引入一个常数因子。因此,GOSS 在减少数据样例数量与保持已学习决策树的准确度之间取得了很好的平衡。

上文部分转载机器之心

原论文链接如下

LightGBM: A Highly Efficient Gradient Boosting Decision Tree



sasa   2018-03-26 11:48

补充几个: 1.互斥特征绑定(EFB),如果说GOSS减少了样本数量,那么EFB则减少了特征数量。 2.lightGBM原生支持类别特征,生长过程中,自动将类别划分到俩个子集,并且可以以O(NlogN)的复杂度找到最优划分。 3.leaf-wise按叶生长,更加高效,当然也容易过拟合。 4.优化了并行的通信。 而预排序,直方图做差,稀疏识别在xgboost,lightgbm中都有体现 - nobodyoo1   2018-07-29 19:18
1

从纯工程的角度来说,lightgbm更好地处理了多进程(毕竟是微软)。


从优化角度来说,对数值特征找划分点时,lightgbm没有去穷举每个可能的数值,而是利用直方图只去尝试很少数的划分点。


抛砖引玉。


高代兄   2017-12-19 11:31

你说的不对,直方图是xgboost的方法,而不是lightgbm - sasa   2018-03-26 11:48


  相关主题

xgboost怎么调参?   8回答

xgboost展开到二阶导数有什么好处啊   1回答

相比xgboost,GBDT有什么优势   2回答

stack多个xgboost效果并不理想   3回答

xgboost是怎么做到regularization的?   2回答

xgboost的FIT问题   1回答

xgboost中的参数min_child_weight是什么意思?   1回答

把XGBRegressor保存到本地文件并调用   1回答

为啥Xgboost比GradientBoost好那么多?   5回答

训练值都是正的,xgboost regression却预测出负数?   4回答

xgboost可以做回归预测吗?   2回答

XGBClassifier设置random_state报错   1回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!