2014-02-21 88 views
2

我刚刚开始玩弄R中的随机森林包。在我的森林生长后,我尝试使用相同的数据集(即训练数据集)预测响应,这给了我一个与那个印有森林物体本身。我认为newdata参数可能有问题,但我遵循文档中给出的例子给t,它给出了同样的问题。以下是使用Species数据集的示例。这是作者在他们的文档中使用的例子,除了我使用相同的数据集来训练和预测... 所以这里的问题是:为什么这两个混淆矩阵不相同?随机森林包预测,newdata参数?

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 

回答

2

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

这代表了袋外,与森林训练集中的每个观察结果不一样。后者显然是对准确性的偏倚估计,OOB估计不那么重要(尽管OOB也有批评意见;但至少更合理)。

基本上,当您打印摘要本身时,它会对每个观察结果进行测试,并且仅在未使用摘要的树木上进行测试,即“缺纸”。所以OOB预测基本上只使用森林中的一部分树木(一般大约2/3)。

当你直接调用训练数据的预测时,它使用的是每个观察结果实际用于树结构的树,所以这个版本得到每一个都是正确的,而OOB版本有一些错误分类并不奇怪。

+0

如果在testData上应用随机森林之后,我们如何获得一个数据框,告诉我们测试数据中的真实分类,随机森林所做的预测以及该预测的概率分数,您能指导我吗?例如,考虑上面的数据集和1个案例,在testData中,物种(盲目的随机森林信息)是** versicolor **,但它被分类器错误地预测为** setosa **,概率分数为** 0.67 **。我想要这种信息,但不知道如何获得这个..! – Newbie