Значение 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, связанный со случайным лесом, и вы должны определить его правильно. Вы также можете прочитать о случайном лесу в этой вводной статье