Bagging/RandomForest和Boosting/GBDT的区别

1. Bagging和Boosting的相同点

都是通过将多个弱学习器进行结合,获得比单一学习器显著优越的泛化性能的强学习器组合。关键假设:基学习器的误差相互独立。而现实任务中,个体学习器是为了解决同一问题存在的,显然不相互独立。

根据学习器的生成方式,分为两类:

1. 个体学习器间存在强依赖关系,必须串行生成的序列化方法,代表为Boosting

2. 个体学习器间不存在强依赖关系,可同时生成的并行化方法,代表为Bagging/RandomForest。

2. Bagging/RandomForest

欲使得学习器泛化性能强,个体学习器应尽可能相互独立,虽然在现实任务中不能完全达到独立,但可以设法使基学习器尽可能具有较大的差异。一种做法是对训练样本进行采样,生成不同子集,再用每个子集训练个体学习器。这样由于训练数据不同,个体学习器有望具有较大的差异。另一种做法是RandomForest引入的属性扰动。

2.1 Bagging:

并行式学习方法的著名代表。主要关注降低方差

  (1)从样本集中重采样(有重复的)选出n个样本;

(2)在所有属性上,对这n个样本建立分类器(ID3、C4.5、CART、SVM、Logistic回归等);

(3)重复以上两步m次,即获得了m个分类器;

(4)将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类。

疑问1:n的值如何选择?

疑问2:m的值如何选择?——选择奇数个分类器即可。

注:与其将Bagging理解为一个算法,不如将其理解为一种思想,即综合多个弱分类器的结果得到一个强分类器的思想!

  • 样本扰动:直接基于自助采样法(Bootstrap Sampling),使得初始训练集中约63.2%的样本出现在一个采样集中(剩余的36.8%可用作验证集来对泛化性能进行“OOB包外估计” "Out of Bag estimation")。根据多个采样集训练多个个体学习器。预测时采用简单投票或者简单平均法。

补充:包外估计其他用途:基学习器为决策树时,可以用OOB作为验证集来辅助剪枝,或用于估计决策树中各节点的后验概率以辅助队零训练样本节点的处理;当基学习器为神经网络时,可使用OOB辅助Early Stopping减小过拟合风险。

训练一个Bagging与直接使用个体学习器算法训练一个学习器的复杂度同阶,说明Bagging是一个很高效的集成算法,另外与标准Adaboost只适用于二分类任务不同,bagging能不经修改就直接用于多分类、回归任务。

2.2 RandomForest:

属于Bagging的扩展变体。随机森林以CART决策树为基学习器。

随机森林是一个用随机方式建立的,包含多个决策树的集成分类器。其输出的类别由各个树投票而定(如果是回归树则取平均)。假设样本总数为n,每个样本的特征数为a,则随机森林的生成过程如下:

  1. 自助采样(Bootstrap Sampling):从原始样本中采用有放回抽样的方法选取n个样本;
  2. 对n个样本选取a个特征中的随机k个,用建立决策树的方法获得最佳分割点;
  3. 重复m次,获得m个CART决策树;
  4. 对输入样例进行预测时,每个子树都产生一个结果,采用简单投票机制或者简单平均输出。

随机森林的随机性主要体现在两个方面:

  • 样本扰动:直接基于自助采样法(Bootstrap Sampling),使得初始训练集中约63.2%的样本出现在一个采样集中(剩余的36.8%可用作验证集来对泛化性能进行“OOB包外估计” "Out of Bag estimation")。根据多个采样集训练多个个体学习器。预测时采用简单投票或者简单平均法。
  • 属性扰动:随机选择特征属性进行节点划分(传统决策树中,会在当前结点的特征属集合中选择一个最优属性进行划分,而在RF中,对基决策树的每个结点,先在该结点的特征属性集合中随机选择k个属性,然后再从这k个属性中选择一个最优属性进行划分,一般推荐k=log2d)

随机森林为什么性能强大?

随机森林对Bagging只做了小改动,但与Bagging中基学习器的“多样性”仅通过样本扰动不同的是,随机森林不但通过样本扰动,还引入了属性扰动,这就使得最终的泛化性能可通过基学习器之间的差异度增加而进一步提升。即决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

随机森林的优点:

  1. 实现简单,训练速度快,泛化能力强,可以并行实现(因为训练时树与树之间是相互独立的);
  2. 相比单一决策树,能学习到特征之间的相互影响,且不容易过拟合;
  3. 能处理高维数据(即特征很多),并且不用做特征选择,因为特征子集是随机选取的;
  4. 对于不平衡的数据集,可以平衡误差;
  5. 相比SVM,不是很怕特征缺失,因为待选特征也是随机选取;
  6. 训练完成后可以给出哪些特征比较重要,即可以用于特征筛选。

随机森林的缺点:

  1. 在噪声过大的分类和回归问题还是容易过拟合;
  2. 相比于单一决策树,它的随机性让我们难以对模型进行解释。

3. Boosting

是一族可将若学习器提升为强学习器的算法。主要关注降低偏差。

Boosting方法和Bagging类似,与其将其理解为一个算法,不如将其理解为一类算法的思想。即:通过m次的迭代,每次迭代训练出不同的弱分类器,然后将这m个弱分类器进行组合,形成一个强分类器。Adaboost就是这类算法中最具代表性的一个算法。

工作机制:先从初始训练集中训练处一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的样本在后续收到更多关注,然后基于调整后的样本分布再训练下一个基学习器,如此重复进行,直至基学习器数目达到实现指定的数目T,最终将这T个基学习器进行加权结合。

常见模型:Adaboost、GBDT、XGBoost

3.1 GBDT (Gradient Boost Decision Tree 梯度提升决策树)

GBDT是以决策树为基学习器的迭代算法,注意GBDT里的决策树都是回归树而不是分类树。Boost是”提升”的意思,一般Boosting算法都是一个迭代的过程,每一次新的训练都是为了改进上一次的结果。 
GBDT的核心就在于:每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学习。 

GBDT优点:

是适用面广,离散或连续的数据都可以处理,几乎可用于所有回归问题(线性/非线性),亦可用于二分类问题(设定阈值,大于阈值为正例,反之为负例)。

GBDT缺点:

是由于弱分类器的串行依赖,导致难以并行训练数据。

4. 随机森林和GBDT的区别:

  1. 训练集选取:随机森林采用的Bagging思想,而GBDT采用的Boosting思想。这两种方法都是Bootstrap思想的应用,Bootstrap是一种有放回的抽样方法思想。虽然都是有放回的抽样,但二者的区别在于:Bagging采用有放回的均匀取样,而Boosting根据错误率来取样(Boosting初始化时对每一个训练样例赋相等的权重1/n,然后用该算法对训练集训练t轮,每次训练后,对训练失败的样例赋以较大的权重),因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各训练集之间相互独立,弱分类器可并行,而Boosting的训练集的选择与前一轮的学习结果有关,是串行的;
  2. 决策树类型:组成随机森林的树可以是分类树,也可以是回归树;而GBDT只能由回归树组成;
  3. 结果预测:对于最终的输出结果而言,随机森林采用多数投票、简单平均等;而GBDT则是将所有结果累加起来,或者加权累加起来;
  4. 并行/串行:组成随机森林的树可以并行生成;而GBDT只能是串行生成;
  5. 异常值:随机森林对异常值不敏感;GBDT对异常值非常敏感;
  6. 方差/偏差:随机森林是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能。

猜你喜欢

转载自blog.csdn.net/aaa_aaa1sdf/article/details/81391735