我建立了一个名为
这是
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行,分别为setosa
、versicolor
或virginica
。或者是此类对象的摘要版本(如下所示)。目的是:我想知道模型实际上有多“自信”。当它预测一种植物是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