2014-02-21 3 views
2

Я недавно начал играть со случайным пакетом леса в Р. После роста моего леса я попытался предсказать ответ, используя тот же набор данных (то есть набор учебных данных), который дал мне матрицу замешательства, отличную от той, которая была напечатанный самим лесом. Я думал, что может быть что-то не так с аргументом 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, как мы можем получить фрейм данных, который сообщает нам реальную классификацию в testData, предсказание случайного леса и оценку вероятности этого предсказания. Например, рассмотрите приведенный выше набор данных и один случай, когда в testData вид (ослепленная информация для случайного леса) был ** versicolor **, но он был предсказан ошибочно классификатором как ** setosa ** с вероятностным счетом ** 0,67 **. Я хочу такую ​​информацию, но не знаю, как я могу ее получить ..! – Newbie