Частково це відповідь на @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
функцію для оцінки продуктивності. Оскільки результат базується на голосуванні більшості дерев у лісі, то в разі класифікації це дасть вам ймовірність того, що цей результат справдиться на основі розподілу голосів. Я не впевнений у регресії .... Якою бібліотекою ви користуєтесь?