如何从R中的随机森林中获得单个树概率?

时间:2014-03-14 15:17:04

标签: r classification prediction random-forest

我在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&s和1&#39的矩阵而不是概率。

2 个答案:

答案 0 :(得分:1)

所以predict.randomForest的文档声明:

  

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

...因此似乎没有可能为每个树返回一个概率。

如果你想要一个像预测区间这样的分类,你可能会尝试使用更多的树来拟合随机森林,然后从森林的许多不同(随机?)子集中生成预测。

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

答案 1 :(得分:1)

我意识到这个问题已经过时了,但它可能对任何有类似问题的人有所帮助。

如果您在树中查询结果,那么在给定初始化林的情况下,您将始终获得确定性的最终分类。您可以通过将预测全部设置为TRUE来提取概率,并在整数投票中对概率进行求和。

如果您有两个以上的类,则林会将项“m”分类为具有概率的类“x” (将m作为x的树的数量)/(树的数量)

由于您只有二进制分类,预测矩阵的列总和可以为您提供第1类的概率。