随机森林原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机森林原理相关的知识,希望对你有一定的参考价值。

参考技术A

1、什么是随机森林?
随机森林就是用随机的方式建立一个森林,在森林里有很多决策树组成,并且每一棵决策树之间是没有关联的。当有一个新样本的时候,我们让森林的每一棵决策树分别进行判断,看看这个样本属于哪一类,然后用投票的方式,哪一类被选择的多,作为最终的分类结果。在回归问题中,随机森林输出所有决策树输出的平均值。

(1)随机森林既可以用于分类,也可以用于回归。
(2)它是一种降维手段,用于处理缺失值和异常值。
(3)它是集成学习的重要方法。

2、两个随机抽取
(1)样本有放回随机抽取固定数目
(2)构建决策树时,特征随机抽取
解释:两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)

3、随机森林算法是如何工作的?

在随机森林中,每一个决策树“种植”和“生长”的四个步骤:

(1)假设我们设定训练集中的样本个数为N,然后通过有重置的重复多次抽样获得这N个样本,这样的抽样结果将作为我们生成决策树的训练集;

(2)如果有M个输入变量,每个节点都将随机选择m(m<M)个特定的变量,然后运用这m个变量来确定最佳的分裂点。在决策树的生成过程中,m的值是保持不变的;

(3)每棵决策树都最大可能地进行生长而不进行剪枝;

(4)通过对所有的决策树进行加总来预测新的数据(在分类时采用多数投票,在回归时采用平均)。

4、随机森林的优缺点
优点:
(1)在分类和回归都表现良好
(2)对高维数据的处理能力强,可以处理成千上万的输入变量,是一个非常不错的降维方法
(3)能够输出特征的重要程度
(4)有效的处理缺省值

5、重要参数
随机森林分类效果(错误率)与两个因素有关:
(1)森林中任意两棵树的相关性:相关性越大,错误率越大;
(2)森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。
  减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。在学习如何选择参数前首先介绍oob的概念。

6、oob:袋外错误率
为了选择最优的m,这里需要利用的是袋外错误率oob(out-of-bag error)。我们知道,在构建每个决策树的时候,采用的是随机又放回的抽取,所以对于每棵树来说,都有一些样本实力没有参与树的生成,所以这些样本成为袋外样本,即oob。所以我们需要做一下oob估计:
(1)对每个样本,计算它作为oob样本的树对它的分类情况
(2)多数投票作为该样本的分类结果
(3)用误分个数占样本总数的比率作为随机森林的oob误分率

oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证。所以没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。

当我们知道了oob的计算方法,我们可以通过选取不同的m,计算oob error,找出oob error最小时对应的m的值。这和交叉验证的思想非常的相似。

7、RF特征重要性的度量方法
(1)对于每一棵决策树,计算其oob error_0
(2)选取一个特征,随机对特征加入噪声干扰,再次计算oob error_1
(3)特征的重要性=∑(oob error_1-oob error_0)/随机森林中决策树的个数

(4)对随机森林中的特征变量按照特征重要性降序排序。
(5)然后重复以上步骤,直到选出m个特征。

解释:用这个公式来度量特征重要性,原因是:给某个特征随机的加入噪声后,如果oob error增大,说明这个特征对样本分类的结果影响比较大,说明重要程度比较高。

8、RF特征选择
首先特征选择的目标有两个:
1:找到与分类结果高度相关的特征变量。
2:选择出数目较少的特征变量并且能够充分的预测应变量的结果。

特征选择的步骤:
(1)对于每一棵决策树,计算其oob error
(2)随机的修改OOB中的每个特征xi的值,计算oob error_2,再次计算重要性
(3)按照特征的重要性排序,然后剔除后面不重要的特征
(4)然后重复以上步骤,直到选出m个特征。

9、几个问题
(1)为什么要随机抽取样本?
答:如果不进行随机抽样,对于每个树的训练集都是相同的,训练出来的结果也是一样的,所以此时进行投票决策没有意义。

(2)为什么要有放回的去抽样呢?
答:如果不是有放回的抽样,那么每一棵树的训练样本是不同的,都是没有交集的,那么每棵树都是有偏的,都是片面的,树与树之间并不是完全公平的。我们需要的是,没颗决策树是公平的,然后让它们投票决策得出结果,并且这样可以防止过度拟合。

(3)这里指的有放回的抽样,是每次抽一个放回,还是一次抽n个再放回?

注意:
构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。

参考资源:
http://www.cnblogs.com/emanlee/p/4851555.html
http://www.cnblogs.com/maybe2030/p/4585705.html
http://scientistcafe.com/2016/11/18/Tree4.html
http://www.cnblogs.com/justcxtoworld/p/3447231.html
https://zhuanlan.zhihu.com/p/21358126

Bagging与随机森林算法原理小结

  在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系。另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。本文就对集成学习中Bagging与随机森林算法做一个总结。

    随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力。

1.  bagging的原理

    在集成学习原理小结中,我们给Bagging画了下面一张原理图。

    从上图可以看出,Bagging的弱学习器之间的确没有boosting那样的联系。它的特点在“随机采样”。那么什么是随机采样?

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

    注意到这和GBDT的子采样是不同的。GBDT的子采样是无放回采样,而Bagging的子采样是放回采样。

    对于一个样本,它在某一次含m个样本的训练集的随机采样中,每次被采集到的概率是1m1m。不被采集到的概率为11m1−1m。如果m次采样都没有被采集中的概率是(11m)m(1−1m)m。当mm→∞时,(11m)m1e0.368(1−1m)m→1e≃0.368。也就是说,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采样集采集中。

    对于这部分大约36.8%的没有被采样到的数据,我们常常称之为袋外数据(Out Of Bag, 简称OOB)。这些数据没有参与训练集模型的拟合,因此可以用来检测模型的泛化能力。

    bagging对于弱学习器没有限制,这和Adaboost一样。但是最常用的一般也是决策树和神经网络。

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

    由于Bagging算法每次都进行采样来训练模型,因此泛化能力很强,对于降低模型的方差很有作用。当然对于训练集的拟合程度就会差一些,也就是模型的偏倚会大一些。

2.  bagging算法流程

    上一节我们对bagging算法的原理做了总结,这里就对bagging算法的流程做一个总结。相对于Boosting系列的Adaboost和GBDT,bagging算法要简单的多。

    输入为样本集D={(x,y1),(x2,y2),...(xm,ym)}D={(x,y1),(x2,y2),...(xm,ym)},弱学习器算法, 弱分类器迭代次数T。

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

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

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

      b)用采样集DmDm训练第m个弱学习器Gm(x)Gm(x)

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

3. 随机森林算法

    理解了bagging算法,随机森林(Random Forest,以下简称RF)就好理解了。它是Bagging算法的进化版,也就是说,它的思想仍然是bagging,但是进行了独有的改进。我们现在就来看看RF算法改进了什么。   

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

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

    除了上面两点,RF和普通的bagging算法没有什么不同, 下面简单总结下RF的算法。

    输入为样本集D={(x,y1),(x2,y2),...(xm,ym)}D={(x,y1),(x2,y2),...(xm,ym)},弱分类器迭代次数T。

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

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

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

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

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

4. 随机森林的推广

    由于RF在实际应用中的良好特性,基于RF,有很多变种算法,应用也很广泛,不光可以用于分类回归,还可以用于特征转换,异常点检测等。下面对于这些RF家族的算法中有代表性的做一个总结。

 4.1 extra trees

    extra trees是RF的一个变种, 原理几乎和RF一模一样,仅有区别有:

    1) 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。

    2) 在选定了划分特征后,RF的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。

    从第二点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是偏倚相对于RF进一步增大。在某些时候,extra trees的泛化能力比RF更好。

4.2 Totally Random Trees Embedding

    Totally Random Trees Embedding(以下简称 TRTE)是一种非监督学习的数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。我们知道,在支持向量机中运用了核方法来将低维的数据集映射到高维,此处TRTE提供了另外一种方法。

    TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。比如我们有3颗决策树,每个决策树有5个叶子节点,某个数据特征xx划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0,     0,0,1,0,0,     0,0,0,0,1), 有15维的高维特征。这里特征维度之间加上空格是为了强调三颗决策树各自的子编码。

    映射到高维特征后,可以继续使用监督学习的各种分类回归算法了。

4.3 Isolation Forest

    Isolation Forest(以下简称IForest)是一种异常点检测的方法。它也使用了类似于RF的方法来检测异常点。

    对于在T个决策树的样本集,IForest也会对训练集进行随机采样,但是采样个数不需要和RF一样,对于RF,需要采样到采样集样本个数等于训练集个数。但是IForest不需要采样这么多,一般来说,采样个数要远远小于训练集个数?为什么呢?因为我们的目的是异常点检测,只需要部分的样本我们一般就可以将异常点区别出来了。

    对于每一个决策树的建立, IForest采用随机选择一个划分特征,对划分特征随机选择一个划分阈值。这点也和RF不同。

    另外,IForest一般会选择一个比较小的最大决策树深度max_depth,原因同样本采集,用少量的异常点检测一般不需要这么大规模的决策树。

    对于异常点的判断,则是将测试样本点xx拟合到T颗决策树。计算在每颗决策树上该样本的叶子节点的深度ht(x)ht(x)。,从而可以计算出平均高度h(x)。此时我们用下面的公式计算样本点xx的异常概率:

s(x,m)=2h(x)c(m)s(x,m)=2−h(x)c(m)

 

    其中,m为样本个数。c(m)c(m)的表达式为:

c(m)=2In(m1)+ξ2m1m,ξc(m)=2In(m−1)+ξ−2m−1m,ξ为欧拉常数

 

    s(x,m)的取值范围是[0,1],取值越接近于1,则是异常点的概率也越大。

5. 随机森林小结

    RF的算法原理也终于讲完了,作为一个可以高度并行化的算法,RF在大数据时候大有可为。 这里也对常规的随机森林算法的优缺点做一个总结。

    RF的主要优点有:

    1) 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。

    2) 由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。

    3) 在训练后,可以给出各个特征对于输出的重要性

    4) 由于采用了随机采样,训练出的模型的方差小,泛化能力强。

    5) 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。

    6) 对部分特征缺失不敏感。

    RF的主要缺点有:

    1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合。

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

以上是关于随机森林原理的主要内容,如果未能解决你的问题,请参考以下文章

随机森林原理与Sklearn参数详解

随机森林原理介绍与适用情况(综述篇)

随机森林算法梳理

随机森林

随机森林(原理/样例实现/参数调优)

随机森林