为什么lightgbm比xgb快那么多?感觉速度可能是xgb的5倍,但是精度、auc什么的都差不多。
lightgbm是用了什么独家窍门吗?
2个回答
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
从纯工程的角度来说,lightgbm更好地处理了多进程(毕竟是微软)。
从优化角度来说,对数值特征找划分点时,lightgbm没有去穷举每个可能的数值,而是利用直方图只去尝试很少数的划分点。
抛砖引玉。
SofaSofa数据科学社区DS面试题库 DS面经 相关主题
xgboost怎么调参?
9回答
xgboost里怎么使用KS值?
1回答
为啥Xgboost比GradientBoost好那么多?
6回答
xgboost中的参数min_child_weight是什么意思?
1回答
xgboost可以做回归预测吗?
2回答
既然xgboost那么好,线性回归还有存在的价值吗?
9回答
xgboost是怎么做到regularization的?
2回答
我们谢绝在回答前讲“生动”的故事。
我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。
我们谢绝答非所问。
我们谢绝自己不会、硬要回答。
我们感激每一个用户在编写答案时的努力与付出!