我在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的矩阵而不是概率。
答案 0 :(得分:1)
所以predict.randomForest
的文档声明:
如果predict.all = TRUE,则返回单个组件 object是一个字符矩阵,其中每列包含预测值 在森林里一棵树上课。
...因此似乎没有可能为每个树返回一个概率。
如果你想要一个像预测区间这样的分类,你可能会尝试使用更多的树来拟合随机森林,然后从森林的许多不同(随机?)子集中生成预测。
您需要注意的一件事是,您似乎正在将您的训练数据提供给predict.randomForest
。这当然会为您提供有偏见的预测,除非您使用随机森林对象的inbag
组件中的信息来仅选择那些观察结果不在其中的树。
答案 1 :(得分:1)
我意识到这个问题已经过时了,但它可能对任何有类似问题的人有所帮助。
如果您在树中查询结果,那么在给定初始化林的情况下,您将始终获得确定性的最终分类。您可以通过将预测全部设置为TRUE来提取概率,并在整数投票中对概率进行求和。
如果您有两个以上的类,则林会将项“m”分类为具有概率的类“x” (将m作为x的树的数量)/(树的数量)
由于您只有二进制分类,预测矩阵的列总和可以为您提供第1类的概率。