2014-02-21 162 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