随机森林算法是一种重要的基于 Bagging 的集成学习方法,可用来做分类、回归等问题。随机森林算法是由一系列的决策树组成,他通过自助法(Bootstrap)重采样技术,从原始训练样本集中有放回的重复随机抽取 m 个样本,生成新的训练样本集合,然后根据自主样本集生成 k 个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于一个独立抽取得样本,森林中的每棵树具有相同的分布,分类误差取决于每一棵树的分类能力和它们之间的相关性。
要了解随机森林,先要了解集成学习和决策树。
一、集成学习
处理前面复杂的分类问题,我们试图寻找一个高效的算法处理,但通常会花费很多资源。集成学习是训练多个分类器,利用这些分类器来解决同一个问题。相当与“三个臭皮匠赛过一个诸葛亮”(哈哈哈,我看到这的时候憋不住了,哈哈哈哈)。
集成学习:通过构建并结合多个学习器来完成学习任务,有时称为多分类器系统,其结构如下图所示。
先产生一组个体学习器,在利用某种策略将其结合起来,个体学习器通常由一个现有的学习算法从训练数据产生,例如C4.5决策树算法、BP神经网络算法等。这些集成中只包含同种类型的个体学习器,即同质,同质集成中的个体学习器亦称基学习器,相应的学习算法称为基学习算法。集成中也可以包含不同类型的个体学习器,这时相应的学习算法不再是基学习算法。要获得好的集成,个体学习器至少不差于弱学习器(指泛化性能略优于随机猜测的学习器),即学习器不能太坏、要有多样性、学习器之间具有差距。在集成学习方法中,其泛化能力比单个学习算法的强,所以集成学习的很多理论研究都是针对弱学习器进行的。根据多个分类器学习方式的不同,可以分成并行生成的 Bagging 算法和串行生成的 Boosting 算法。
集成学习有如下的特点:
(1)将多个分类方法聚集在一起,以提高分类的准确率,聚集的算法可以是不同,也可以相同;
(2)集成学习法由训练数据构建一组基分类器,然后通过对每个基分类器的预测进行投票来进行分类;
(3)集成学习不算一种分类器,而是一种分类器结合的方法;
(4)通常一个集成分类器的分类性能会好于单个分类器;
(5)如果把单个分类器比作一个决策者的话,集成学习的方法就相当于多个决策者共同进行一项决策。
Bagging 算法:它的特点是各个弱学习器之间没有依赖关系,可以并行拟合,随机森林算法就基于 Bagging 算法。该算法是通过对训练样本随机有放回的抽取,产生多个训练数据的子集,并在每一个训练记得子集上训练一个分类器,最终的分类结果是由多个分类器的分类结果投票产生。训练一个Bagging 集成与直接使用基学习算法训练一个学习器的复杂度同阶,这说明Bagging 是一个很高效的集成学习算法。Bagging算法主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效果更为明显。
为什么要有放回的抽取?
为获得好的集成,我们希望个体学习器不能太差,如果采样出的每个子集都完全不同,则每个基学习器只能用到一小部分训练数据,甚至不足以进行有效学习,无法确保产生出比较好的基学习器,为解决这个问题使用相互有交叠的采样子集。
所以通过m次有放回的随机采样操作,如我们得到含m个样本的采样集,初始训练集中有的样本在采样集多次出现,下有的则从未出现,初始训练集中约有63.2%的样本出现在采样集中。然后基于每个采样集训练出一个基学习器,所再将这些基学习器结合,这就是Bagging 的基本流程,图下图所示。
Boosting 算法:是一族可将弱学习器提升为强学习器的算法。它是通过顺序的给训练集中的数据项重新加权创造不同的基础学习器,先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器。根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。Boosting 算法有很多版本,目前使用最广泛的是 AdaBoost 算法和 GBDT 算法。Boosting 算法主要关注