Bagging与随机森林------机器学习

上一篇博文中我们介绍了串行训练基分类器的方法--Boosting以及它的代表性算法AdaBoost,接下来我们一起了解一下并行训练基分类器的方法---Bagging,这种方式中基分类器并没有依赖关系。

Bagging

Bagging是并行式集成方式最著名的代表,它直接基于自助采样法。给定包含m个样本的数据集,我们使用有放回的采样方式进行m次采样,每次采样一个样本,这样经过m次我们还是得到了m个样本的数据集,初始训练集中有的样本在采样集中多次出现,有的从来没有出现,可以计算出有多少样本在m次采样中从来没有出现过:

Bagging与随机森林------机器学习

上面这个式子应该不难理解,一次采样中,被采到的概率是1/m,没有被采到的概率是1-1/m,那么如果m次都没有采到,这样的概率就是上面的计算结果。

照这样,我们可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合,这就是Bagging的基本流程。在对预测结果进行结合时,Bagging通常对分类任务使用简单的投票法,对于回归任务使用简单平均法。如果分类任务中出现两个类收到同样票数的情况,最简单的做法就是随机选择一个。

Bagging中训练基分类器的好而不同体现在哪里?? 首先好体现在训练基分类器都是基于误差率最小的情况,不同体现在徇烂基分类器的样本不同,每含有m个样本都是进过随机采样的,这样得到的T个含m个样本的训练集肯定不一样。

上面说到自助采样的过程有36.8%的样本可能在m次采样中均没有出现过,这些样本可以作为验证集来对泛化性能进行“包外估计”。例如,当基学习器是决策树的时候,可以使用包外样本来辅助剪枝,这个就是像我们平时做项目的时候,会将数据集划分为训练集和验证集,验证集一般就是验证我训练的学习器是否存在过拟合或者欠拟合,这样好及时调整参数。

随机森林

随机森林是Bagging的一个扩展变体,其主要体现在不单单样本进行采样,样本中的特征也进行采样,即引入了随机属性选择,加强基分类器的多样性。更加具体的来说就是,在我们之前提到过的决策树中,在选择划分属性的时候是在当前节点的属性集合中中选择一个最优属性,而在随机森林中,对于基决策树中的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性进行划分,这里的参数k控制了随机性引入的程度。

随机森林并不难理解,并且其简单易实现,但是在实际任务中,它展现出来的性能非常强大,其主要是基于Bagging做了很小的改动,在“多样性”中保持了Bagging中的样本多样性同时引入了属性多样性。这样就可以使得最终集成的泛化性能可以通过个体学习器之间差异度的增加而进一步提升。

Bagging与随机森林------机器学习

 通过上图我们可以看到,当基分类器的数量比较少的时候,随机森林的性能比Bagging的性能差,随着基分类器的数量增加,随机森林的性能比Bagging性能更强。