我最近才开始使用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
您会注意到,在第一个摘要中,混淆矩阵标记为OOB estimate
。
这代表Out-of-Bag,并且与在森林上的训练集中直接预测每个观察结果不同。后者显然是对准确性的有偏估计,而OOB估计则不那么准确(尽管OOB也有批评意见;但至少更合理)。
基本上,当您打印摘要本身时,它会进行每个观察并仅在不使用摘要的树上进行测试,即“装满袋子”。因此,OOB预测实际上仅使用森林中的一部分树(通常大约为2/3)。
当您直接在训练数据上调用预测时,它使用的树实际上是在树结构中使用了每个观察值,因此该版本的每个观察值正确无误,而OOB版本却被错误分类也就不足为奇了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句