随机森林(Random Forest, RF)和迭代决策树(Gradient Boosting Decision Tree, GBDT)都是通过构建多个决策树来组成集成模型, 他们分别属于Bagging和Boosting两大类算法。
Bagging (Bootstrap Aggregation)算法
1. 用重置抽样(sample with replacement)在原有的训练数据集(training set) 创造新的抽样训练数据集,新的训练数据集和原训练数据集的数量相同,所以其中会有重复的数据,这个过程称为Bootstrapping。
2. 重复上一步,例如500次,每一次都会训练出一个决策树。
3. 用这500个决策树去进行预测,对于回归问题(Regression), 可以取平均数,对于分类问题(Classification), 用投票产生的大多数来决定。
RF作为Bagging的一种关于决策树的具体算法,通常会产生长的很深的树(fully grown decision trees ),通过减小方差来减小误差,而且在产生树的方式上也是平行的,同时产生的。
Boosting算法
有很多Boosting的算法,例如AdaBoost和 Gradient Boosting. 但是在大方向上的大致的步骤如下:
1. 总的预测值是所有模型的加权(求平均或直接相加)。
2. 在最初的训练数据集上训练第一个模型,然后把总的预测值建立在第一个模型上。
3. 评估总预测值的误差(调整训练的数据集或者计算残差)。
4. 训练新的模型,并把它加到总的预测值中。
5. 重复3&4
GBDT作为Boosting的一种关于决策树的具体算法,通常会比较浅的树,通过减小偏差来减小误差,在产生树的方式上是一个一个产生的,有序列的。
用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了。但是用DecisionTree/RandomForest的时候需要把树的深度调到15或更高。
wikipedia
附:
误差(Error )= 偏差(Bias )+ 方差(Variance)
当模型越简单时,即使我们再换一组数据,最后得出的学习器和之前的学习器的差别就不那么大,模型的方差很小。还是因为模型简单,所以偏差会很大。