预测() 随机森林 - 从单个树中提取预测

3
我建立了一个名为iris_class的随机森林模型*。
set.seed(10)
index_row <- sample(2, 
                    nrow(iris), 
                    replace = T, 
                    prob = c(0.7, 0.3)
)  

train_data <- iris[index_row == 1,]
test_data <- iris[index_row == 2,]

iris_class <- randomForest(Species ~., 
                                data = train_data)

这是iris_class的样子:
> iris_class

Call:
 randomForest(formula = Species ~ ., data = train_data) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 2

        OOB estimate of  error rate: 4.5%
Confusion matrix:
           setosa versicolor virginica class.error
setosa         38          0         0  0.00000000
versicolor      0         39         2  0.04878049
virginica       0          3        29  0.09375000

我随后使用predict()函数进行预测。

predictions<- predict(iris_class, test_data[,-5], type = "response")

iris_class由500棵单独的树组成。如果我理解正确,当我使用iris_class运行predict()时,会生成500棵树,每棵树都会给出一个分类结果,然后我会看到这500棵树的平均结果。

我的问题是:

有没有办法提取这500棵树的每一棵树的预测结果?

换句话说,predict()函数能否返回一个对象,对于被分类的每个项目,该对象将具有500行,分别为setosaversicolorvirginica。或者是此类对象的摘要版本(如下所示)。目的是:我想知道模型实际上有多“自信”。当它预测一种植物是setosa时,是450棵树说是setosa,50棵树说其他东西,还是251比249?

哪一行代码会提取单个树的预测结果?

我的理想输出应该像这样:

> predictions_info
       setosa versicolor  virginica       pred
1  0.01517536 0.55449239 0.43033225 versicolor
2  0.21957988 0.71962024 0.06079987 versicolor
3  0.28146250 0.36777757 0.35075993 versicolor
4  0.51503150 0.41750308 0.06746543     setosa
5  0.25832598 0.10796878 0.63370523  virginica
6  0.24603616 0.07558151 0.67838233  virginica
7  0.02323489 0.41547464 0.56129047  virginica
8  0.41155830 0.49214444 0.09629726 versicolor
9  0.30217529 0.39852784 0.29929686 versicolor
10 0.45923782 0.49147493 0.04928725 versicolor
11 0.70479092 0.27648912 0.01871996     setosa
12 0.34489442 0.02606726 0.62903832  virginica
13 0.15553471 0.18903000 0.65543530  virginica
[...]

在当前情况下,pred列是predict函数返回的内容,前三列显示了500棵树中哪些预测占比最高。(这些数字和预测结果是虚构的!并且它们与模型输出不匹配)

*本示例最初来自于此网站(由我修改):https://rpubs.com/Jay2548/519589

1个回答

2
使用predict.all = T。然后使用所有预测计算您想要的任何内容。请注意,您将获得一个大小为:length(dataset) x number of trees的矩阵。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接