集成学习之随机森林

集成学习之bagging回顾

在之前的集成学习中我们提到有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系;另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。决策树模型中尽管有剪枝等等方法,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的缺点。随机森林是基于bagging框架下的决策树模型,集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力。随机森林是一种灵活的、便于使用的机器学习算法,即使没有超参数调整,大多数情况下也会带来好的结果。它可以用来进行分类和回归任务。

在同一批数据中,用同样的算法只能产生一棵树,这时Bagging策略可以帮助我们产生不同的数据集。Bagging策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出n个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3\C4.5\CART\SVM\LOGISTIC),重复以上两步m次,获得m个分类器,最后根据这m个分类器的投票结果,决定数据属于哪一类。

随机采样:

随机采样(bootsrap)就是从我们的训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能继续被采集到。对于我们的Bagging算法,一般会随机采集和训练集样本数m一样个数的样本。这样得到的采样集和训练集样本的个数相同,但是样本内容不同。如果我们对有m个样本训练集做T次的随机采样,,则由于随机性,T个采样集各不相同。注意这和GBDT的子采样是不同的。GBDT的子采样是无放回采样,而Bagging的子采样是放回采样。

对于一个样本,它在某一次含m个样本的训练集的随机采样中,每次被采集到的概率是$\frac{1}{m}$。不被采集到的概率为$1-\frac{1}{m}$。如果m次采样都没有被采集中的概率是$(1-\frac{1}{m})^m$。当$m \to \infty$时,$(1-\frac{1}{m})^m \to \frac{1}{e} \simeq 0.368$。也就是说,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采样集采集中。对于这部分大约36.8%的没有被采样到的数据,我们常常称之为袋外数据(Out Of Bag, 简称OOB)。这些数据没有参与训练集模型的拟合,因此可以用来检测模型的泛化能力。

随机森林是bagging的一个特化进阶版,所谓的特化是因为随机森林的弱学习器都是决策树。所谓的进阶是随机森林在bagging的样本随机采样基础上,又加上了特征的随机选择,其基本思想没有脱离bagging的范畴。

bagging的集合策略:

bagging的集合策略也比较简单,对于分类问题,通常使用简单投票法,得到最多票数的类别或者类别之一为最终的模型输出。对于回归问题,通常使用简单平均法,对T个弱学习器得到的回归结果进行算术平均得到最终的模型输出。

bagging算法步骤:

相对于Boosting系列的Adaboost和GBDT,bagging算法要简单的多。

输入为样本集$D=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\}$,弱学习器算法, 弱分类器迭代次数T。

输出为最终的强分类器$f(x)$

1)对于t=1,2...,T:

   (a) 对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集$D_t$

   (b) 用采样集$D_t$训练第t个弱学习器$G_t(x)$

2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

集成学习之随机森林算法

随机森林是基于bagging框架下的决策树模型(在bagging的基础上更进一步),随机森林包含了很多树,每棵树给出分类结果,每棵树的生成规则如下:

(1)样本的随机:如果训练集大小为N,对于每棵树而言,从训练样本集中用Bootstrap随机且有放回地抽取n个训练样本,作为该树的训练集,重复K次,生成K组子训练样本集;

(2)特征的随机:如果每个特征的样本维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征;

(3) 利用m个特征对每个子数据集构建最优学习模型,即建立了K棵CART决策树,每棵树尽最大程度的生长,并且没有剪枝过程;

(4) 对于新的输入数据,根据这K个CART形成的随机森林模型,通过投票表决结果,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)

随机森林的算法流程如下图:

随机森林(Random Forest)是Bagging算法的进化版,思想仍然是bagging,但是进行了独有的改进。首先,Random Forest使用了CART决策树作为弱学习器,这让我们想到了梯度提示树GBDT。第二,在使用决策树的基础上,Random Forest对决策树的建立做了改进,对于普通的决策树,我们会在节点上所有的n个样本特征中选择一个最优的特征来做决策树的左右子树划分,但是RF通过随机选择节点上的一部分样本特征,这个数字小于n,假设为$n_{sub}$,然后在这些随机选择的$n_{sub}$个样本特征中,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。    

如果$n_{sub} =n $,则此时RF的CART决策树和普通的CART决策树没有区别。$n_{sub}$越小,则模型约健壮,当然此时对于训练集的拟合程度会变差。也就是说$n_{sub}$越小,模型的方差会减小,但是偏倚会增大。在实际案例中,一般会通过交叉验证调参获取一个合适的$n_{sub}$的值。

随机森林算法步骤:

输入为样本集$D=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\}$,弱分类器迭代次数T。

输出为最终的强分类器$f(x)$。

1)对于t=1,2...,T:

   (a) 对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集$D_t$

   (b) 用采样集$D_t$训练第t个决策树模型$G_t(x)$,在训练决策树模型的节点的时候, 在节点上所有的样本特征中选择一部分样本特征, 在这些随机选择的部分样本特征中选择一个最优的特征来做决策树的左右子树划分

2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

随机森林算法优点:

1. 训练可以高度并行化,对于大数据时代的大样本训练速度有优势;

2. 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合;

3. 两个随机性的引入,使得随机森林具有很好的抗噪声能力,对部分特征缺失不敏感;

4.(能够评估各个特征的重要性)在训练后,可以给出各个特征对于输出的重要性;

5. 由于采用了随机采样,训练出的模型的方差小,泛化能力强;

6. 相对于Boosting系列的Adaboost和GBDT, 随机森林算法实现比较简单;

7. 对数据集的适应能力强,既能处理离散型数据,也能处理连续型数据,数据集无需规范化;

8.(能够处理具有高维特征的输入样本,而且不需要降维)由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型;

9. 只有在半数以上的基分类器出现差错时才会做出错误的预测:随机森林非常稳定,即使数据集中出现了一个新的数据点,整个算法也不会受到过多影响,它只会影响到一颗决策树,很难对所有决策树产生影响。

随机森林算法缺点:

1. 在某些噪音比较大的样本集上,Random Forest模型容易陷入过拟合;

2. 比决策树算法更复杂,计算成本更高;

3. 由于其本身的复杂性,它们比其他类似的算法需要更多的时间来训练;

4. 取值划分比较多的特征容易对Random Forest的决策产生更大的影响,从而影响拟合的模型的效果。

 

【补充】:

(1)为什么要随机抽样训练集?

如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的,这样的话完全没有bagging的必要;

(2)为什么要有放回地抽样?

因为bagging的子数据集既不是相互独立的,也不是完全一样的,子数据集间存在一定的相似性。如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是"有偏的",也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决,这种表决应该是"求同",因此使用完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的。

(3)特征的随机抽样的结果是子数据集间有不同的子特征。

(4)随机森林分类效果(错误率)与两个因素有关:

         森林中任意两棵树的相关性:相关性越大,错误率越大;

         森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。

随机森林的相关性包括子数据集间的相关性和子数据集间特征的相关性。相关性在这里可以理解成相似度,若子数据集间重复的样本或子数据集间重复的特征越多,则相关性越大。减小子数据间的特征选择个数,树的相关性和分类能力也会相应的降低;增大特征个数,树的相关性和分类能力会相应的提高。

 

 

参考文章:

https://www.stat.berkeley.edu/~breiman/randomforest2001.pdf

https://www.cnblogs.com/pinard/p/6156009.html

 

posted @ 2020-04-14 15:19  大-道-至-简  阅读(1160)  评论(0编辑  收藏  举报