Random forests, 随机森林,online random forests

Random Forests (随机森林)

随机森林的思想很简单,百度百科上介绍的随机森林算法比较好理解。

在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。 而 "Random Forests" 是他们的商标。 这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合 Breimans 的 "Bootstrap aggregating" 想法和 Ho 的"random subspace method"" 以建造决策树的集合。

学习算法

 根据下列算法而建造每棵树:
      1. 用 N 来表示训练例子的个数,M表示变量的数目。
      2. 我们会被告知一个数 m ,被用来决定当在一个节点上做决定时,会使用到多少个变量。m应小于M
      3. 从N个训练案例中以可重复取样的方式,取样N次,形成一组训练集(即bootstrap取样。)。并使用这棵树来对剩余预测其类别,并评估其误差。
      4. 对于每一个节点,随机选择m个基于此点上的变量。根据这 m 个变量,计算其最佳的分割方式。
      5. 每棵树都会完整成长而不会剪枝(Pruning)(这有可能在建完一棵正常树状分类器后会被采用)。
 

  优点

 随机森林的优点有:
      1. 对于很多种资料,它可以产生高准确度的分类器。
      2. 它可以处理大量的输入变量。
      3. 它可以在决定类别时,评估变量的重要性。
      4. 在建造森林时,它可以在内部对于一般化后的误差产生不偏差的估计。
      5. 它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度。
      6. 它提供一个实验方法,可以去侦测 variable interactions 。
      7. 对于不平衡的分类资料集来说,它可以平衡误差。
      8. 它计算各例中的亲近度,对于数据挖掘、侦测偏离者(outlier)和将资料视觉化非常有用。
      9. 使用上述。它可被延伸应用在未标记的资料上,这类资料通常是使用非监督式聚类。也可侦测偏离者和观看资料。
      10. 学习过程是很快速的。
 

  缺点

      1. 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟
      2. 对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
 
 
 
 
 
online Random Forests  (在线随机森林)
 
这是一片09年,ICCV 上的文章,效果和离线的random forest差不多,特别的牛。可以做分类,叶可以做预测,
 
这里介绍的主要是在线随机决策树,其思想主要是:每棵树可以在线分裂。每个叶子分裂的条件是预测的数量要达到一定的值和每个叶子节点信息。
每个树的生长主要通过预测的样本(在线接受的样本),每棵树的叶子节点分裂主要根据该节点的熵或Gini

                                          or     

学过决策树和信息论的,对这个概念都有了解。其中j表示第j棵树,i表示第i个分类结果。K表示总的分类数。

对有一个给定的结合S(在线预测中给定),每棵树上叶子节点Pj的的概率可以表示为:

如果要在Pj叶子节点分类,那么,得到二个叶子节点的概率可以用下式表示:

                                                                                and             

解释一下 Pjls,l为left,s为测试集合。所以Pjls表示为在集合S中Pj叶子节点的分列的左节点。同理,Pjrs表示为在集合S中Pj叶子节点的分列的右节点。

那么,每棵树上叶子节点Pj分裂必须符合以下二个条件:

        1. 落在叶子节点Pj的个数必须大于一个常数(可以人工设定)

        2. 叶子节点的Gini必须大于一个常数(可以人工设定),Gini计算公式如下:

以上步骤就完成整个树的更新。

 

下面给出了在线随机森林算法的流程:

步骤3. 用个possion分布确定从采样的次数,其原理见online boosting: http://www.cnblogs.com/liqizhou/archive/2012/05/10/2494145.html

步骤6. u代表分类的类别。

步骤7. j代表第t棵树上叶子节点。

步骤8. 统计第j个叶子节点的数目和计算Gini

步骤9. 判断条件是否分裂的二个条件。

步骤10. 在符合条件的叶子节点中,选择一个Gini最大的叶子节点作为分类节点。

以上就是online Random forests 的主要思想。

这个程序特别牛,我跑了一下,挺牛逼的,效果没比offline mode差不多。如果你需要做online learning的话十分推荐。


 以上是我个人的理解,如有错误,请留言告诉我,本人感激不尽。

作者:BIGBIGBOAT/Liqizhou

posted @ 2012-05-10 16:19  Liqizhou  阅读(14040)  评论(9编辑  收藏  举报