【问题标题】:How do I get individual tree probabilities from Random Forests in R?如何从 R 中的随机森林中获取单个树的概率?
【发布时间】:2014-04-19 23:33:25
【问题描述】:

我在分类问题上使用 R 中的 randomForest 包(结果是二进制的)。 我想获得每棵树的概率输出(以获得预测区间)。 我在预测中设置了 predict.all=TRUE 参数,但它给了我一个 800 列的矩阵(=我的森林中的树的数量),每一个都是 1 或 0。我如何得到概率输出而不是类?

PS:我的节点大小=1,这意味着这应该是有道理的。但是,我更改了节点大小=50,仍然得到所有 0 和 1 的无概率。

这是我正在做的事情:

#build model (node size=1) 
rf<-randomForest(y~. ,data=train, ntree=800,replace=TRUE, proximilty=TRUE, keep.inbag=TRUE)

#get the predictions 

#store the predictions from all the trees
all_tree_train<-predict(rf, test, type="prob", predict.all= TRUE)$individual

这给出了一个由 0 和 1 组成的矩阵,而不是概率。

【问题讨论】:

    标签: r classification prediction random-forest


    【解决方案1】:

    我知道这个问题很老了,但它可能会帮助任何有类似问题的人。

    如果您查询树的结果,您将始终获得最终分类,这些分类在给定初始化森林的情况下是确定性的。您可以通过将 predict all 设置为 TRUE 来提取概率,就像您所做的那样,并对概率的投票求和。

    如果您有 2 个以上的类别,则森林将项目“m”分类为类别“x”的概率 (将 m 归为 x 的树的数量)/(树的数量)

    由于您只有一个二元分类,因此预测矩阵的列总和为您提供属于第 1 类的概率。

    【讨论】:

      【解决方案2】:

      所以predict.randomForest 的文档说明:

      如果 predict.all=TRUE,则返回的单个组件 object 是一个字符矩阵,其中每一列都包含预测的 在森林里的一棵树旁上课。

      ...所以似乎不可能为每棵树返回一个概率。

      如果您想要分类预测区间之类的东西,您可以尝试用更多树拟合随机森林,然后从森林的许多不同(随机?)子集生成预测。

      您需要注意的一件事是,您似乎将训练数据提供给predict.randomForest。这当然会给你带来有偏见的预测,除非你使用随机森林对象的inbag 组件中的信息来只选择那些观察结果不合适的树。

      【讨论】:

      • 啊,错字,我实际上使用的是测试数据集。将编辑。谢谢
      猜你喜欢
      • 2016-06-09
      • 2017-12-24
      • 1970-01-01
      • 2016-01-28
      • 2016-06-01
      • 2017-12-04
      • 2019-08-12
      • 2021-03-24
      • 2021-12-04
      相关资源
      最近更新 更多