XGBOOST,GBDT,RandomForest的比较
2017-03-19 15:02
363 查看
首先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提出了近似直方图计算,根据数据的二阶导信息进行排序,提出一些候选划分点子集
---------------------------------------------------------------------------------------------------------------------------------------------------------------
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提出了近似直方图计算,根据数据的二阶导信息进行排序,提出一些候选划分点子集
相关文章推荐
- 关于树的几个ensemble模型的比较(GBDT、xgBoost、lightGBM、RF)
- 机器学习---GBDT、xgboost与Light GBM优缺点比较(1)
- GBDT和XGBOOST的区别
- adaboost和GBDT的区别以及xgboost和GBDT的区别
- GBDT安装(xgboost LightGBM)
- XGBoost Plotting API以及GBDT组合特征实践
- 机器学习---xgboost与lightgbm效果比较(2)
- rf,gbdt,xgboost,lightgbm对比
- XGBoost Plotting API以及GBDT组合特征实践
- 机器学习时代的三大神器:GBDT,XGBOOST和LightGBM
- 从决策树到GBDT & Xgboost(一)
- 提升方法:GBDT、XGBOOST、AdaBoost
- GBDT和XGBOOST的区别
- xgboost在python3和python2下快速安装和编译安装以及比较
- 机器学习算法中GBDT和XGBOOST
- GBDT和XGBOOST的区别
- RF, GBDT, XGBOOST 之 Random forest
- 基于决策树的分类回归(随机森林,xgboost, gbdt)
- boosting-adaboost、GBDT、xgboost、lightGBM
- GBDT与XGBoost