Jest to częściowo odpowiedź na @Sashikanth Dareddy (ponieważ nie zmieści się w komentarzu), a częściowo odpowiedź na oryginalny post.
Pamiętaj, co to jest przedział prognozy, to przedział lub zestaw wartości, w których przewidujemy, że przyszłe obserwacje będą leżały. Zasadniczo przedział predykcji składa się z 2 głównych elementów, które określają jego szerokość, elementu reprezentującego niepewność dotyczącą przewidywanej średniej (lub innego parametru), który jest częścią przedziału ufności, oraz elementu reprezentującego zmienność poszczególnych obserwacji wokół tej średniej. Przedział ufności jest dość solidny ze względu na centralne twierdzenie graniczne, aw przypadku losowego lasu pomaga również ładowanie początkowe. Jednak przedział przewidywania jest całkowicie zależny od założeń dotyczących dystrybucji danych, biorąc pod uwagę, że zmienne predykcyjne, CLT i ładowanie początkowe nie mają wpływu na tę część.
Przedział prognozy powinien być szerszy, a odpowiadający mu przedział ufności byłby również szerszy. Inne rzeczy, które mogłyby wpłynąć na szerokość przedziału prognozy, to założenia o równej wariancji lub nie, musi to wynikać z wiedzy badacza, a nie z losowego modelu lasu.
Przedział prognozy nie ma sensu dla wyniku kategorycznego (można zrobić zestaw prognoz zamiast przedziału, ale przez większość czasu prawdopodobnie nie byłby bardzo pouczający).
Możemy zobaczyć niektóre problemy dotyczące przedziałów prognoz, symulując dane, w których znamy dokładną prawdę. Rozważ następujące dane:
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)
Te konkretne dane są zgodne z założeniami regresji liniowej i są dość proste w przypadku losowego dopasowania lasu. Wiemy z „prawdziwego” modelu, że gdy oba predyktory wynoszą 0, to średnia wynosi 10, wiemy również, że poszczególne punkty mają rozkład normalny ze standardowym odchyleniem wynoszącym 1. Oznacza to, że 95% przedział predykcji oparty na doskonałej wiedzy dla punkty te wynosiłyby od 8 do 12 (właściwie od 8,04 do 11,96, ale zaokrąglanie upraszcza). Każdy szacowany interwał przewidywania powinien być szerszy niż ten (brak doskonałej informacji zwiększa szerokość w celu kompensacji) i powinien obejmować ten zakres.
Spójrzmy na odstępy czasu od regresji:
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
Widzimy, że istnieje pewna niepewność w szacowanych średnich (przedział ufności), co daje nam przedział predykcji, który jest szerszy (ale obejmuje) zakres od 8 do 12.
Spójrzmy teraz na przedział oparty na indywidualnych prognozach poszczególnych drzew (należy się spodziewać, że będą one szersze, ponieważ losowy las nie korzysta z założeń (które, jak wiemy, są prawdziwe dla tych danych), jakie ma regresja liniowa):
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
Przedziały są szersze niż przedziały przewidywania regresji, ale nie obejmują całego zakresu. Obejmują one prawdziwe wartości, a zatem mogą być uzasadnione jako przedziały ufności, ale przewidują tylko, gdzie jest średnia (wartość przewidywana), a nie dodany element dla rozkładu wokół tej średniej. W pierwszym przypadku, gdy x1 i x2 są równe 0, przedziały nie spadają poniżej 9,7, jest to bardzo różna od prawdziwego przedziału przewidywania, który spada do 8. Jeśli wygenerujemy nowe punkty danych, będzie ich kilka (znacznie więcej niż 5%), które są w przedziałach prawdziwych i regresyjnych, ale nie mieszczą się w przypadkowych przedziałach leśnych.
Aby wygenerować przedział predykcji, musisz przyjąć pewne mocne założenia dotyczące rozmieszczenia poszczególnych punktów wokół przewidywanych średnich, a następnie możesz wziąć prognozy z poszczególnych drzew (element przedziału ufności bootstrapped), a następnie wygenerować losową wartość z założonej dystrybucja z tym centrum. Kwantyle tych wygenerowanych elementów mogą tworzyć przedział predykcji (ale nadal bym go przetestował, być może trzeba powtórzyć proces jeszcze kilka razy i połączyć).
Oto przykład zrobienia tego przez dodanie normalnych (ponieważ wiemy, że w oryginalnych danych zastosowano normalne) odchylenia do prognoz ze standardowym odchyleniem opartym na szacunkowym MSE z tego drzewa:
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
Te przedziały zawierają te oparte na doskonałej wiedzy, więc wyglądaj rozsądnie. Będą one jednak w dużym stopniu zależeć od przyjętych założeń (założenia są tutaj ważne, ponieważ wykorzystaliśmy wiedzę o tym, jak dane zostały zasymulowane, mogą nie być tak prawidłowe w rzeczywistych przypadkach danych). Nadal powtarzałbym symulacje kilka razy dla danych, które wyglądają bardziej jak twoje rzeczywiste dane (ale symulowane, abyś poznał prawdę) kilka razy, zanim w pełni zaufam tej metodzie.
score
funkcję do oceny wydajności. Ponieważ wynik opiera się na głosowaniu większości drzew w lesie, w przypadku klasyfikacji daje prawdopodobieństwo, że ten wynik będzie prawdziwy, na podstawie rozkładu głosów. Nie jestem jednak pewien regresji ... Z jakiej biblioteki korzystasz?