随机森林包预测,newdata参数?

时间:2014-02-21 17:20:06

标签: r prediction random-forest confusion-matrix

我刚刚开始玩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

1 个答案:

答案 0 :(得分:3)

您会注意到,在第一个摘要中,混淆矩阵标记为OOB estimate

这代表Out-of-Bag,与直接预测森林训练集中的每个观察结果不同。后者显然是对准确性的偏倚估计,OOB估计不那么严重(虽然OOB也有批评者;但它至少更多合理)。

基本上,当您打印摘要本身时,它会进行每次观察,并仅在未使用它的树上进行测试,即“在袋外”。因此,OOB预测基本上只使用森林中的一部分树木(一般约为2/3)。

当您直接在训练数据上调用预测时,它正在使用树,其中每个观察实际上都在树构造中使用,因此该版本使每一个都正确,而OOB版本有一些错误分类并不奇怪。