我刚刚开始玩R中的随机森林包。在我的森林生长之后,我尝试使用相同的数据集(即训练数据集)预测响应,这给了我一个不同于那个的混淆矩阵。印有森林物体本身。我认为newdata参数可能有问题,但是我按照文档中给出的例子给了t,它给出了同样的问题。这是使用Species数据集的示例。这是作者在他们的文档中使用的相同示例,除了我使用相同的数据集来训练和预测... 所以这里的问题是:为什么这两个混淆矩阵不相同?
data(iris)
set.seed(111)
ind <- sample(2, nrow(iris), replace = TRUE, prob=c(0.8, 0.2))
#grow forest
iris.rf <- randomForest(Species ~ ., data=iris[ind == 1,])
print(iris.rf)
Call:
randomForest(formula = Species ~ ., data = iris[ind == 1, ])
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 2
OOB estimate of error rate: 3.33%
Confusion matrix:
setosa versicolor virginica class.error
setosa 45 0 0 0.00000000
versicolor 0 39 1 0.02500000
virginica 0 3 32 0.08571429
#predict using the training again...
iris.pred <- predict(iris.rf, iris[ind == 1,])
table(observed = iris[ind==1, "Species"], predicted = iris.pred)
predicted
observed setosa versicolor virginica
setosa 45 0 0
versicolor 0 40 0
virginica 0 0 35
答案 0 :(得分:3)
您会注意到,在第一个摘要中,混淆矩阵标记为OOB estimate
。
这代表Out-of-Bag,与直接预测森林训练集中的每个观察结果不同。后者显然是对准确性的偏倚估计,OOB估计不那么严重(虽然OOB也有批评者;但它至少更多合理)。
基本上,当您打印摘要本身时,它会进行每次观察,并仅在未使用它的树上进行测试,即“在袋外”。因此,OOB预测基本上只使用森林中的一部分树木(一般约为2/3)。
当您直接在训练数据上调用预测时,它正在使用树,其中每个观察实际上都在树构造中使用,因此该版本使每一个都正确,而OOB版本有一些错误分类并不奇怪。