Это частично ответ на @Sashikanth Dareddy (так как он не помещается в комментарии) и частично ответ на оригинальное сообщение.
Запомните, что такое интервал прогнозирования, это интервал или набор значений, где мы прогнозируем, что будущие наблюдения будут лежать. Обычно интервал прогнозирования имеет 2 основных элемента, которые определяют его ширину, фрагмент, представляющий неопределенность относительно прогнозируемого среднего значения (или другого параметра), это часть доверительного интервала, и фрагмент, представляющий изменчивость отдельных наблюдений вокруг этого среднего значения. Доверительный интервал является довольно устойчивым благодаря центральной предельной теореме, и в случае случайного леса также помогает начальная загрузка. Но интервал прогнозирования полностью зависит от предположений о том, как данные распределяются, учитывая, что переменные предиктора, CLT и начальная загрузка не влияют на эту часть.
Интервал прогнозирования должен быть шире, если соответствующий доверительный интервал также будет шире. Другие вещи, которые могут повлиять на ширину интервала прогнозирования, - это предположения о равной дисперсии или нет, это должно исходить из знаний исследователя, а не из модели случайного леса.
Интервал прогнозирования не имеет смысла для категорического результата (вы могли бы сделать набор прогнозирования, а не интервал, но большую часть времени он, вероятно, был бы не очень информативным).
Мы можем увидеть некоторые проблемы, связанные с интервалами прогнозирования, путем симуляции данных, когда мы знаем точную правду. Рассмотрим следующие данные:
set.seed(1)
x1 <- rep(0:1, each=500)
x2 <- rep(0:1, each=250, length=1000)
y <- 10 + 5*x1 + 10*x2 - 3*x1*x2 + rnorm(1000)
Эти конкретные данные соответствуют предположениям для линейной регрессии и довольно просты для случайного подбора леса. Мы знаем из «истинной» модели, что когда оба предиктора равны 0, среднее значение равно 10, мы также знаем, что отдельные точки следуют нормальному распределению со стандартным отклонением 1. Это означает, что интервал прогнозирования 95% основан на совершенных знаниях для эти точки будут от 8 до 12 (ну, на самом деле, с 8.04 до 11.96, но округление делает это проще). Любой предполагаемый интервал прогнозирования должен быть шире этого (отсутствие точной информации добавляет ширину для компенсации) и включать этот диапазон.
Давайте посмотрим на интервалы от регрессии:
fit1 <- lm(y ~ x1 * x2)
newdat <- expand.grid(x1=0:1, x2=0:1)
(pred.lm.ci <- predict(fit1, newdat, interval='confidence'))
# fit lwr upr
# 1 10.02217 9.893664 10.15067
# 2 14.90927 14.780765 15.03778
# 3 20.02312 19.894613 20.15162
# 4 21.99885 21.870343 22.12735
(pred.lm.pi <- predict(fit1, newdat, interval='prediction'))
# fit lwr upr
# 1 10.02217 7.98626 12.05808
# 2 14.90927 12.87336 16.94518
# 3 20.02312 17.98721 22.05903
# 4 21.99885 19.96294 24.03476
Мы можем видеть, что есть некоторая неопределенность в оценочных средних (доверительный интервал), и это дает нам интервал прогнозирования, который шире (но включает) диапазон от 8 до 12.
Теперь давайте посмотрим на интервал, основанный на индивидуальных предсказаниях отдельных деревьев (мы должны ожидать, что они будут шире, поскольку случайный лес не извлекает выгоду из предположений (которые, как мы знаем, справедливо для этих данных), которые делает линейная регрессия):
library(randomForest)
fit2 <- randomForest(y ~ x1 + x2, ntree=1001)
pred.rf <- predict(fit2, newdat, predict.all=TRUE)
pred.rf.int <- apply(pred.rf$individual, 1, function(x) {
c(mean(x) + c(-1, 1) * sd(x),
quantile(x, c(0.025, 0.975)))
})
t(pred.rf.int)
# 2.5% 97.5%
# 1 9.785533 13.88629 9.920507 15.28662
# 2 13.017484 17.22297 12.330821 18.65796
# 3 16.764298 21.40525 14.749296 21.09071
# 4 19.494116 22.33632 18.245580 22.09904
Интервалы шире, чем интервалы прогнозирования регрессии, но они не охватывают весь диапазон. Они включают в себя истинные значения и, следовательно, могут быть допустимыми в качестве доверительных интервалов, но они только предсказывают, где находится среднее (прогнозируемое значение), но не являются дополнительным компонентом для распределения вокруг этого среднего. Для первого случая, когда x1 и x2 равны 0, интервалы не опускаются ниже 9,7, это очень отличается от истинного интервала прогнозирования, который уменьшается до 8. Если мы создадим новые точки данных, то будет несколько точек (гораздо больше чем 5%), которые находятся в интервалах истинности и регрессии, но не попадают в интервалы случайного леса.
Чтобы сгенерировать интервал прогнозирования, вам нужно будет сделать некоторые строгие предположения о распределении отдельных точек вокруг прогнозируемых средних, затем вы можете взять прогнозы из отдельных деревьев (загруженный фрагмент доверительного интервала), а затем сгенерировать случайное значение из предполагаемого распределение с этим центром. Квантили для этих сгенерированных кусочков могут формировать интервал прогнозирования (но я все равно протестирую его, возможно, вам придется повторить процесс еще несколько раз и объединить).
Вот пример выполнения этого путем добавления нормальных (так как мы знаем, что исходные данные использовали нормальные) отклонений к прогнозам со стандартным отклонением, основанным на оценочной MSE из этого дерева:
pred.rf.int2 <- sapply(1:4, function(i) {
tmp <- pred.rf$individual[i, ] + rnorm(1001, 0, sqrt(fit2$mse))
quantile(tmp, c(0.025, 0.975))
})
t(pred.rf.int2)
# 2.5% 97.5%
# [1,] 7.351609 17.31065
# [2,] 10.386273 20.23700
# [3,] 13.004428 23.55154
# [4,] 16.344504 24.35970
Эти интервалы содержат интервалы, основанные на совершенных знаниях, поэтому выглядите разумно. Но они будут сильно зависеть от сделанных допущений (допущения действительны здесь, потому что мы использовали знания о том, как моделировались данные, они могут быть не такими достоверными в реальных случаях данных). Я все еще повторял бы симуляции несколько раз для данных, которые больше похожи на ваши реальные данные (но симулированы, чтобы вы знали правду) несколько раз, прежде чем полностью доверять этому методу.
score
функцию для оценки производительности. Поскольку выходные данные основаны на большинстве голосов деревьев в лесу, в случае классификации это даст вам вероятность того, что этот результат будет правдивым, основываясь на распределении голосов. Я не уверен насчет регрессии .... Какую библиотеку вы используете?