RandomForest: значение «предсказанного» компонента и его связь с ошибками, не входящими в пакет. - PullRequest
1 голос
/ 17 марта 2020

Объяснение для предсказанного значения объекта случайного леса - «предсказанные значения входных данных, основанные на выборках из пакета».

Engli sh не является моим родным языком, и у меня возникают проблемы с пониманием этого предложения. В настоящее время я работаю над проблемой симуляции регрессии, используя технику случайного леса. Цель состоит в том, чтобы найти ошибку вне пакета для каждого образца в симуляции. После небольшого поиска я нашел этот predicted компонент.

Из того, что я понимаю из предложения, для каждого дерева predicted возвращает прогнозируемое значение всего подмножества данных, которое не использовалось для этого конкретного дерева. Предположим, что у меня есть N деревьев в случайном лесу, сколько значений predicted я получу обратно?

Могут ли результаты predicted быть использованы как ошибки прогнозирования OOB? Предположим, что у меня есть значение predicted для i-го дерева (rf$predicted[i]). Является ли ошибка OOB для i-го дерева заданной (rf $ предсказано [i] - response_of_tree_i)?

Большое спасибо.

1 Ответ

1 голос
/ 18 марта 2020

Значение i-го predicted возвращает среднее значение прогнозируемых значений по всем деревьям, которые имеют значение i-го как OOB.

Например:

library(randomForest)
library(MASS)

set.seed(111)
rf = randomForest(medv ~ .,data=Boston,keep.forest=TRUE,keep.inbag=TRUE)

dim(Boston)
[1] 506  14

dim(rf$inbag)
[1] 506 500

Так для первого наблюдения, это не имеет значения в 198 деревьях:

table(rf$inbag[1,]==0)

FALSE  TRUE 
  302   198 

Если вы хотите получить прогноз всех деревьев, вы можете использовать прогнозирование, а затем определить, что прогнозируемое значение, которое вы видите, среднее значение i-го предсказания в деревьях, имеющих его как OOB:

allpred = predict(rf,newdata=Boston,predict.all=TRUE)$individual

rf$predicted[1]
       1 
28.70521 

mean(allpred[1,rf$inbag[1,]==0])
[1] 28.70521

Следовательно, предсказанное значение можно использовать как OOB для всей модели, а не для отдельных деревьев, поскольку оно не представляет интереса для модель случайного леса. Вы также можете увидеть это в объекте, где rf$mse - среднеквадратическая ошибка для i-го дерева, поэтому при 500 деревьях у вас есть конечное значение модели:

rf$mse[length(rf$mse)]
[1] 9.902396

mean((rf$predicted-rf$y)^2)
[1] 9.902396

Если вы хотел бы рассчитать ошибку OOB для каждого дерева, помните, что это не обычный OOB, связанный со случайным лесом, и вы должны определить его правильно. Вы также можете прочитать о случайном лесу в этой вводной статье

...