随机森林(Random Forest)入门与实战
前言
集成学习(ensemble learning)是通过构建并结合多个学习器来完成学习任务,主要包含两类,一是个体学习器间存在强依赖关系、必须串行生成的序列化方法,比如前几篇博文介绍提升学习方法、提升树GBDT 详解、xgboost等,主要思想是boosting迭代将弱学习器提升为强学习器;二是个体学习器之间不存在强依赖关系、可同时生成的并行化方法,该类的代表是bagging和随机森林。
Bagging
想要得到泛化能力强的集成,集成中的个体学习应该尽可能的相互独立,所以设法是的基学习器尽可能的具有较大的差异。给定一个训练数据集将其随机抽样成n份子样本集,然后每个子集训练得出一个个体学习器,这样得到的基学习器就会有比较大的差异,从而获得好的集成;但是因为每个基学习器只用了一小部分的数据,这不能保证个体学习器的学习的有效性,因此,为了解决这个问题可以考虑使用相互有交叠的采样子集。
Bagging就是采用这种思想,对于给定的m个样本数据集,先随机取出一个样本放入采样集,再把这部分样本放回初始数据集,使得下次采样时该样本仍然有可能被选中,这样经过m次随机采样操作得到含m个样本的采样集。初始训练集中的样本有的在采样集中多次出现,有的则未出现。这样经过T轮,我们可以得到T个含m个训练样本的采样集,基于每个采样集训练得到一个基学习器,然后再将这些基学习器进行结合。在对预测值输出结合的时候,Bagging通常对分类问题使用简单投票法,对回归问题使用简单平均法。
随机森林
随机森林是Bagging的一个拓展变体,RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。传统决策树在选择划分属性时是在当前结点的属性集合(假定d个属性)中选择一个最优属性;而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若令k=d,则决策树的构建与传统决策树相同;若令k=1,则是随机选择一个属性用于划分,一般情况下k=log2(d)。
随机森林对Bagging只做了小改动,但是与Bagging中基学习器的“多样性”—仅通过样本扰动不同,随机森林还加入了随机属性扰动,这是的最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。
随机森林的收敛性与Bagging相似(如下图),随机森林的起始性能相对较差,特别是只包含一个基学习