了解集成学习的同学可能知道,想要得到泛化性能强的集成,则集成中的个体学习器应该尽可能的强且独立(好而不同)。然而,这很难。
但是,虽然“独立”在现实任务中无法做到,但可以设法使基学习器尽可能具有较大的差异。
给定一个训练数据集,一种可能的做法是对训练样本进行采样,产生若干个不同的子集来,再从每个数据子集中训练处一个基学习器,这样,由于训练数据不同,我们获得的基学习器可能会有比较大的差异。然而,为了获得比较好的集成,我们同时还希望个体学习器不能太差。如果采样出的每个自己都完全不同,则相当于每个基学习器只用到了一小部分训练数据,这毫无疑问会有很大的风险产生过拟合。
因此,一种比较好的做法是:使用相互有交叠的采样子集。
Bagging
Bagging是并行式集成学习最著名的代表。它的特点在“随机采样”。那么什么是随机采样?
随机采样(bootsrap)就是从我们的训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能继续被采集到。对于我们的Bagging算法,一般会随机采集和训练集样本数m一样个数的样本。这样得到的采样集和训练集样本的个数相同,但是样本内容不同(因为是随机的)。如果我们对有m个样本训练集做T次的随机采样,,则由于随机性,T个采样集各不相同。
OK,照这样,我们可以采样出T个含m个训练样本的采样集。然后基于每个采样集训练出一个基学习器(这一步可以同时独立地进行,这也是并行式的由来)然后,再讲这些基学习器进行结合,这就是Bagging的基本流程。
bagging的集合策略也比较简单,对于分类问题,通常使用简单投票法,得到最多票数的类别或者类别之一为最终的模型输出。对于回归问题,通常使用简单平均法,对T个弱学习器得到的回归结果进行算术平均得到最终的模型输出。
对于Bagging来说,值得注意的是下面这几点:
1、Bagging是一个很高效的集成学习算法,它与标准的Adaboost算法只适用于二分类人物不同,Bagging能不经修改地用于多分类,回归等任务。
2、Bagging对于弱学习器没有限制,这和Adaboost一样。但是最常用的一般也是决策树和神经网络。
3、由于Bagging算法每次都进行采样来训练模型,因此泛化能力很强,对于降低模型的方差很有作用。当然对于训练集的拟合程度就会差一些,也就是模型的偏倚会大一些。
随机森林(Random Forest)
随机森林是一个非常灵活的机器学习方法,能够用于分类和回归问题。它可以快速地被应用到几乎任何的数据科学问题中去,从而使人们能够高效快捷地获得第一组基准测试结果。
随机森林算法应该是Bagging算法的一种提升。显然的,它也是一种并行式集成学习算法组合分类方法。该算法在2001年由LeoBreiman提出。
随机森林的思想
它的算法思想其实特别简单。
我们想象组合分类器中的每个分类器都是一棵决策树(RF的每个基学习器都是决策树),而随机森林就是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类,然后看看哪一类被选择最多,就预测这个样本为那一类。
其中最重要的是搞清楚,在随机森林中,每一个决策树的种植和生长的规则是什么。
它遵循的规则如下:
1.假设我们设定训练集中的样本个数为N,然后通过有放回的,重复的多次抽样来获得这N个样本,这样的抽样结果将作为我们生成决策树的训练集(实质上就是使用bootstrap法来采样,和Bagging一样,在平均情况下63.2%的原数据元组形成训练集,剩下的38.8%形成检验集);
2.如果有M个输入变量,每个节点都将随机选择m(m小于M)个特定的变量(有放回的),然后运用这m个变量,使用CART算法来增长树。在决策树的生成过程中,m的值是保持不变的(也就是说,在每个分裂节点的分裂属性的选择首先是从总的特征集合选取一部分作为候选的,然后从候选特征里面选择一个最好的(通过计算Giniindex));
3.每棵决策树都最大可能地进行生长而不进行剪枝;
4.通过对所有的决策树进行加总来预测新的数据(在分
类时采用多数投票,在回归时采用平均)。
OK,整个算法的思想就是这样。实际上,Random Forest可以总结成这个样子:
随机森林就是Bagging的一个扩展变体,它在以决策树为基学习器构建Bagging集成(采样子集的方法和训练基学习器的方法)的基础上,进一步在决策树的训练过程中引入了随机属性选择。这一点,具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假设有d个属性)中选择一个最优属性,而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若k=d,则基决策树的构建与传统决策树相同;若k=1,则是随机选择一个属性用于划分。值k通过交叉验证法确定,一般情况下,k=log2d
随机森林简单,容易实现,计算开销小,且在很多现实任务中展现出强大的性能。
随机森林的优缺点
优点:
1) 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。
2) 由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。
3) 在训练后,可以给出各个特征对于输出的重要性
4) 由于采用了随机采样,训练出的模型的方差小,泛化能力强。
5) 对部分特征缺失不敏感。
实际上,我们仔细分析一下随机森林的构造,你会发现它在行上(数据集上使用Bootstrap)和列上(属性集的选择上)都进行了随机化,因此它的基学习的多样性很好(不仅来自样本扰动还来自属性扰动)。
在一般情况下,它对多元线性不敏感,结果对缺失数据和非平衡的数据比较稳健,因此一般来说在数据集上表现良好。也不容易陷入过拟合,一般来说,抗噪性能也还可以。可以说,这两个随机性的引入,赋予了这个算法很大的优势。
缺点:
1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合(虽然说它抗噪性能可以,但还是要特别注意过拟合这个现象)。
2) 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。
参考文章
随机森林入门攻略
Bagging与随机森林算法原理小结
数据挖掘(概念与技术)-第三版-Jiawei Han-P249