Random Forest

来源:互联网 发布:文件md5加密 java 编辑:程序博客网 时间:2024/06/02 08:30

Random Forest

Random Forest(随机森林)是指由一群决策树(decision trees)生成的森林。为了更好的理解随机森林,有必要提一下它的演化进程。
Random forest演化进程的主线条主要如下所示:

PAC----->Bootstraps----->Baggging----->Random Forest<-----CART

1.PAC

PAC(Probably Approximately Correct)Kearns和Valiant提出的一种学习模型。在该模型中,若存在一个多项式级的学习算法来识别一组概念,并且识别正确率很高,那么这组概念是强学习算法;而如果学习算法识别一组概念的正确率仅比随机猜测略好,那么这组概念是弱学习算法。如果可以将弱学习算法提升成强学习算法,那么我们就只要找到一个弱学习算法,然后把它提升成强学习算法,而不必去找通常情况下很难获得的强学习算法。

2·Bootstraps

根据PAC由弱得到强的思想Bradley Efron在1979年提出了Bootstraps算法,这个名字来自于成语“pull up by your own bootstraps”,意思是依靠自己的资源,称为自助法。它的思想就是当样本数量不大,分布情况未知时,可以从原始样本中随机抽取的多个样本情况(弱学习)来估计原样本真实的分布情况。它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法。其基本步骤如下:
 ①从原始数据集中,有放回地抽样一定数量的样本
 ②根据抽出的样本计算给定的统计量T
 ③重复上述N次(一般大于1000),得到N个统计量T 
 ④计算上述N个统计量T的样本方差,得到统计量的方差

这里举例说明其中一种最常用的方法:.632自助法。

 假设给定的数据集包含d个样本。该数据集有放回地抽样d次,产生d个样本的训练集。(原数据样本中的某些样本很可能在该样本集中出现多次)没有进入该训练集的样本最终形成检验集(测试集)。显然每个样本被选中的概率是1/d,因此未被选中的概率就是(1-1/d),这样一个样本在训练集中没出现的概率就是d次都未被选中的概率,即(1-1/d)d。当d趋于无穷大时,这一概率就将趋近于e-1=0.368,所以留在训练集中的样本大概就占原来数据集的63.2%。

3·Bagging

Bagging又叫bootstrap aggregation,是Breiman在1993年提出的方法,第一步就是根据Bootstrap进行抽样。基本的步骤:

     ①从样本集中用Bootstrap采样选出n个样本

     ②在所有属性上,对这n个样本建立分类器(CART or SVM or ...)

     ③重复以上两步m次,i.e.建立 m个分类器(CART orSVM or ...)

     ④将数据放在这m个分类器上跑,最后vote看到底分到哪一类

这种方法可以大大降低每个分类器的不稳定性,从而带来较高的预测准确率。从这个方法再往下发展就是随机森林了。

4·CART

CART(classification and regression trees)是1984年由Breiman, Friedman, Olshen, Stone提出的一个决策树算法.

Gini系数是Breiman于1984年提出来的,主要用在CART(Classfication and Regression Tree)算法中

在CART算法中, 基尼不纯度表示一个随机选中的样本在子集中被分错的可能性。

基尼不纯度为这个样本被选中的概率乘以它被分错的概率。

假设样本的某节点属性值取值为{1, 2, ..., m},令fi是样本被赋予i的概率,则基尼指数可以通过如下计算:


Gini指标 用来度量数据集的不纯度:


Gini越小,数据越纯

CART中计算Gini指标考虑每个属性上的二元划分,根据训练数据集S中的属性F将S分成的S1和S2,则给定划分的Gini指标如下公式所示:


选择最佳分割点

变量有数值型变量和分类型变量两种类型。

数值型变量:对记录的值从小到大排序,计算每个值作为临界点产生的子节点的异质性统计量。能够使异质性减小程度最大的临界值便是最佳的划分点。

分类型变量:列出划分为两个子集的所有可能组合,计算每种组合下生成子节点的异质性。同样,找到使异质性减小程度最大的组 合作为最佳划分点。

最好的划分就是使得GINI最小的划分。

Eg:


对不同属性划分:


对离散值如{x,y,z},则在该属性上的划分有三种情况({{x,y},{z}},{{x,z},y},{{y,z},x}),空集和全集的划分除外。


对于连续值处理引进“分裂点”的思想,假设样本集中某个属性共n个连续值,则有n-1个分裂点,每个“分裂点”为相邻两个连续值的均值 (a[i] + a[i+1]) / 2。


由上可得生成的决策树为:


CART算法流程:

①创建一个结点N。

      ②如果样本T都在同一个类C中,那么返回N作为叶结点,以类C做标记。

      ③从候选属性A集中找出GINI系数最小的属性。

      ④将样本T划分为T1,T2两个子集。

      ⑤对T1重复①-⑤。

      ⑥对T2重复①-⑤。

生成的树是完全分裂的,肯定存在过度拟合的现象,CART使用事后剪枝的方式对决策树进行剪枝。

 

CART算法的优点:

1)对目标变量及预测变量概率分布上要求。

2)使用二元分支,充分运用全部的数据,尽可能发现全部树的结构。

3)能够处理孤立点。

4)能够对空缺值进行处理。

CART算法的缺点:

CART本身是一种大样本的统计分析方法,样本量较小时模型不稳定。

Random Forest

2001年, Breiman在bagging基础上做了修改,提出了随机森林算法。该算法用随机的方式建立起一棵棵决策树,然后由这些决策树组成一个森林,其中每棵决策树之间没有关联,当有一个新的样本输入时,就让每棵树独立的做出判断,按照多数原则决定该样本的分类结果。我将通过建立和预测两个方面来具体介绍这个算法。

(1)建立随机森林

   基本步骤:

     ①从样本集中用bagging采样选出n个样本,预建立CART

     ②在树的每个节点上,从所有属性中随机选择k个属性,选择出一个最佳分割属性作为节点(RI 和 RC)

   ③重复以上两步m次,eg:build m棵CART(不剪枝)

     ④这m个CART形成Random Forest

    与bagging方法不同,随机森林存在两次随机过程:

    一是使用Bootstrap随机选择子样本;

   二是最佳分割属性不是从完全的属性集上挑选出来,而是从随机选出的部分属性集中挑选的。

    对于样本采样,Breiman用的就是前面介绍过的。632自助法。

    对于属性的采样,Breiman设计了两种方法,分别是RI(随机输入选择)和RC(随机线性组合)。

RI就是随机的从完全属性集中选择一定数量的属性形成候选属性集。

  RC会先从所有随机变量里面选择L个变量,然后把这些变量通过线性组合形成一个新的组合变量,使用的系数来自于[-1,1]上的随机数。用这种方法得到F个组合变量形成候选分割属性集。

(2)使用随机森林

    基本步骤(分类):

    ①向建立好的随机森林中输入一个新样本

    ②随机森林中的每棵决策树都独立的做出判断

    ③将得到票数最多的分类结果作为该样本最终的类别

  上面是针对分类而言的,对于回归预测,最简单的做法就是将所有决策树的预测结果取平均值作为最终的结果。

 

优点与缺点

   (1)优点

    ①简单易懂

    ②可以处理高维数据,而且不用进行特征筛选

    ③受噪音干扰小

    ④算法内部就可以对错误率、重要性等的评价

    ⑤准确度和Adaboost差不多

    ⑥比bagging或者boosting快

    ⑦容易进行分布式处理

 

   (2)缺点

    分类结果会倾向于样本多的类别,所以训练样本中各类别的数据必须相同。Breiman在实际实现该算法的时候有考虑到了这个问题,采取了根据样本类别比例对决策树的判断赋予不同权值的方法,比如类A:类B的样本量比例=3:1,,则对新样本,判断为类A的决策结果乘以25%,判断为类B的结果乘以75%,然后再比较两者大小,得到最终的结果。但是Breiman的实验结果也表明了该方法还是不能很好的解决由样本数量不平衡造成的结果不准确的问题。

 



Reference:

http://en.wikipedia.org/wiki/Random_forest

http://blog.csdn.net/Joyce0625/article/details/24593635


0 0
原创粉丝点击