XGBOOST,GBDT,RandomForest的比较

来源:互联网 发布:飞云淘宝客机器人神器 编辑:程序博客网 时间:2024/04/29 15:41

首先XGBOOST,GBDT,RF都是集成算法,RF是Bagging的变体,与Bagging相比,RF加入了属性扰动,而XGBOOST,GBDT属于boosting.

---------------------------------------------------------------------------------------------------------------------------------------------------------------

RandomForest 与 GBDT 的区别:

相同点:

1.都由很多棵树组成

2.最终的结果是由多棵树一起决定的

不同点:

1.RandomForest中的树可以是分类树,也可以是回归树,而GBDT只能由回归树(CART)组成,这也说明GBDT各个树相加是有意义的

2.RandomForest中的树是并行生成的,而GBDT是串行生成的,GBDT中下一颗树要去拟合前一颗树的残差,所以GBDT中的树是有相关关系的,而RandomForest中的树的相关性依赖于Boostrap生成的样本子集的相关性

3.RandomForest 对异常值不敏感,GBDT敏感

4.RandomForest是通过降低模型方差来提高性能的,而GBDT是通过降低偏差来提高性能


-------------------------------------------------------------------------------------------------------------------------------------------------------------

GBDT 与 XGBOOST的比较:

1.传统的GBDT以CART树作为基分类器,而XGBOOST还支持线性分类器,此时的线性分类器自带正则项

2.传统的GBDT在优化时,只用到了loss function的一阶导信息,而XGBOOST对loss function做了Taylor展开,用到了二阶导信息

3.XGBOOST在loss function中引入了正则项,防止过拟合,正则项里包含叶节点数以及每个叶节点上的score的L2的平方和

在计算划分增益时,如果gain < gamma, 不划分,gain> gamma,划分,这相当于决策树的预剪枝。 gamma是叶节点个数的参数

4.XGBOOST还借用了RandomForest中的列抽样思想,也支持在划分节点时,只考虑部分属性

(现状sklearn中的GBDT也实现了列抽样)

5.XGBOOST可以自动学习出缺失值的分裂方向,论文中的default direction

(具体做法时,遍历的尝试将所有的缺失值分裂到所有方向{left or right},split and default directions with max gain)

6.XGBOOST实现了并行化,这个并行化是特征粒度上的并行化:划分节点时,每个特征并行计算,同时每个特征的划分节点也是并行计算(这是加速最猛的处理)

7.XGBOOST提出了block的概念,简单的说将排序后的特征值放在block中,以后划分特征的时候,只需要遍历一次即可,因为决策树在处理属性值时,需要将属性值先排序,这是最耗时的步骤,而block预先存储了排序的特征值,在后续过程中可以重复利用这个结构中的数据,同时,计算每个特征的划分增益可以并行处理了

Collecting statistics for each column can be parallelized,giving us a parallel algorithm for split finding!!

8.贪心算法在选择最佳划分方式时需要遍历所有的划分点子集,在数据非常大时,这会非常低效,xgboost提出了近似直方图计算,根据数据的二阶导信息进行排序,提出一些候选划分点子集



0 0
原创粉丝点击