Gradient-Boosted Trees(GBT或者GBDT) 和 RandomForests 都属于集成学习的范畴,相比于单个模型有限的表达能力,组合多个base model后表达能力更加丰富。
关于集成学习的理论知识,包括GBT和Random Forests的一些比较好的参考资料:
周志华教授的"Ensemble Methods: Foundations and Algorithms",系统的介绍了集成学习的理论及方法
Greedy Function Approximation: A GradientBoosting Machine
Stochastic GradientBoosting,Spark GBT实现所参考的算法
GBT和Random Forests二者的区别:
二者的理论思想在spark.mllib源码阅读-bagging方法中从模型的方差和偏差的角度做了一些简要的介绍,在Spark官方文档上也有一段关于二者优劣的描述:
1、GBT比RandomForests的训练成本更高,原因在于GBT中各个模型以序列串行的方式进行训练,通常我们说的并行GBT是指base model的并行训练,各个base model之间是无法做到并行的。而Random Forests
中各个子模型之间可以做到并行化。
2、Random Forests的base model越多越有助于降低过拟合,而GBT中base model越多会提高过拟合的程度。
3、二者训练的时间成本不同,因此调参的成本不同。有限的时间内Random Forests可以实验更多的参数组合。
4、通常来看,Random Forests的base model会得到一棵规模适中的树,而GBT为了降低在basemodel数量多时引发的过拟合,会限制其base model的规模。
下面来看看Spark中GBT的实现过程,主要包括3部分:GBT模型、GBT参数配置、GBT训练算法:
GradientBoostedTrees:
GBT的实现过程由GradientBoostedTrees类驱动并向用户暴露模型的训练方法。GradientBoostedTrees的2个关键方法是train和run,在run中,根据用户定义的模型配置