使用分层随机森林模型估计类概率

时间:2014-04-14 16:51:02

标签: r classification bayesian random-forest

我使用随机森林分类器(在R中)使用各种环境变量作为预测因子来预测多个本地植物群落的空间分布。该分类系统是分层的,每个连续级别在其类描述中变得更加详细。例如,我有一个2级的分层分类系统,最高级别由两个类组成:Forest(F)和Grassland(G)。让我们说第二级每个森林和草原类由2个子类组成(F1,F2和G1,G2)。例如,使用Forest类,子类可能是Conifer或Deciduous Forests。

我知道到目前为止这是非常基本的,但这是我遇到的挑战。我想在最精细的分类水平上预测这些类别的空间分布,但是在可接受的准确度下进行太多的环境变化。为了减少这种可变性,我可以训练多个随机森林模型,其中第一个模型(模型#1)在最高级别操作,将观察分类为F或G.在第二级,子集数据基于其F / G类别分为两组并训练两个模型(模型#2和#3),每个模型将一个子集分类到各自的子类中。

使用这些堆叠模型,我预测新观察的类概率。使用随机森林,此值是为特定类别投票的树的数量除以林中树木的数量。对于单个新观察,概括的随机森林输出可能是:

1级(型号#1)
- F,G = 80,20

2级(型号#2和#3)
- F1,F2 = 80,20 - G1,G2 = 70,30

输出表明这个新观察很可能是一个拥有F1子类的森林,但我对F1的信心是正确的等级吗?

我的问题首先是,在给定此建模结构的情况下,是否有适当的方法来计算这个新观察实际上F1的组合概率?其次,如果合适,怎么样? (我怀疑使用上层概率的某种贝叶斯方法,因为先验可能有效,但我远没有精通贝叶斯统计数据。)

我为我的冗长而道歉,并且没有发布实际的数据/代码(很难在我的数据集中提取既简洁又代表我的问题的东西)。谢谢!

1 个答案:

答案 0 :(得分:2)

我实际上正在处理一个类似的问题,并编写了一个R包,它将randomForest作为本地分类器沿预定义的类层次结构运行。 你可以在R-Forge的' hie-ran-forest'中找到它。 该软件包包括两种将本地概率转变为清晰类的方法。

  1. 逐步多数规则 - 选择级别1模型中投票比例最高的类别,然后在二级模型中选择投票比例最高的类别
  2. 乘法多数规则 - 将概率(投票比例)乘以类层次结构,并选择具有最高乘数比例的类。
  3. 在您提供的示例中,两种方法都以F1结尾, 但对于价值观:

    F, G   = 0.6,  0.4
    F1, F2 = 0.6,  0.4 
    G1, G2 = 0.95, 0.05
    

    逐步多数将选择F1(模型1中的F和模型2中的F1),而乘法将选择G1,因为

    0.4*0.95 (G1) > 0.6*0.6 (F1) > 0.6*0.4 (F2) > 0.4*0.05 (G2)
    

    我不认为有一个正确的'选项,一般来说,我发现这两种方法通常达到非常相似的准确度。 stewpwise对树根附近的错误分类更敏感。然而,如果你的模型1是正确的,它往往会减少严重的#1;错误分类。另一方面,乘法对任何特定局部分类器的结果不太敏感,但对类层次结构的深度和每个局部分类器中的兄弟数量敏感。