Dies ist zum Teil eine Antwort auf @Sashikanth Dareddy (da es nicht in einen Kommentar passt) und zum Teil eine Antwort auf den ursprünglichen Beitrag.
Denken Sie daran, was ein Vorhersageintervall ist. Es ist ein Intervall oder eine Reihe von Werten, in denen wir vorhersagen, dass zukünftige Beobachtungen liegen werden. Im Allgemeinen hat das Vorhersageintervall 2 Hauptteile, die seine Breite bestimmen, wobei ein Teil die Unsicherheit über den vorhergesagten Mittelwert (oder einen anderen Parameter) darstellt und ein Teil die Variabilität der einzelnen Beobachtungen um diesen Mittelwert darstellt. Das Konfidenzintervall ist aufgrund des zentralen Grenzwertsatzes ziemlich robust, und im Fall einer zufälligen Gesamtstruktur hilft auch das Bootstrapping. Das Vorhersageintervall hängt jedoch vollständig von den Annahmen über die Verteilung der Daten ab, da die Vorhersagevariablen CLT und Bootstrapping keinen Einfluss auf diesen Teil haben.
Das Vorhersageintervall sollte breiter sein, wobei das entsprechende Konfidenzintervall auch breiter wäre. Andere Dinge, die die Breite des Vorhersageintervalls beeinflussen würden, sind Annahmen über die gleiche Varianz oder nicht, dies muss aus dem Wissen des Forschers stammen, nicht aus dem Zufallsforstmodell.
Ein Vorhersageintervall ist für ein kategoriales Ergebnis nicht sinnvoll (Sie könnten ein Vorhersage-Set anstelle eines Intervalls erstellen, aber in den meisten Fällen wäre es wahrscheinlich nicht sehr informativ).
Wir können einige Probleme in Bezug auf Vorhersageintervalle erkennen, indem wir Daten simulieren, bei denen wir die genaue Wahrheit kennen. Betrachten Sie die folgenden Daten:
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)
Diese speziellen Daten folgen den Annahmen für eine lineare Regression und sind für eine zufällige Gesamtstrukturanpassung ziemlich einfach. Wir wissen aus dem "wahren" Modell, dass, wenn beide Prädiktoren 0 sind, der Mittelwert 10 ist, wir auch wissen, dass die einzelnen Punkte einer Normalverteilung mit einer Standardabweichung von 1 folgen. Dies bedeutet, dass das 95% Vorhersageintervall auf perfekter Kenntnis basiert Diese Punkte liegen zwischen 8 und 12 (also eigentlich zwischen 8,04 und 11,96, aber die Rundung macht es einfacher). Jedes geschätzte Vorhersageintervall sollte breiter als dieses sein (da keine perfekte Information vorhanden ist, wird die Breite zum Kompensieren hinzugefügt) und diesen Bereich einschließen.
Schauen wir uns die Intervalle von der Regression an:
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
Wir können sehen, dass das geschätzte Mittel (Konfidenzintervall) eine gewisse Unsicherheit aufweist und dass wir ein Vorhersageintervall erhalten, das breiter ist (aber den Bereich von 8 bis 12 einschließt).
Schauen wir uns nun das Intervall an, das auf den individuellen Vorhersagen der einzelnen Bäume basiert (wir sollten davon ausgehen, dass diese breiter sind, da der Zufallswald nicht von den Annahmen profitiert (von denen wir wissen, dass sie für diese Daten zutreffen), die die lineare Regression macht):
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
Die Intervalle sind breiter als die Intervalle für die Regressionsvorhersage, decken jedoch nicht den gesamten Bereich ab. Sie enthalten die wahren Werte und sind daher möglicherweise als Konfidenzintervalle legitim. Sie sagen jedoch nur voraus, wo der Mittelwert (vorhergesagter Wert) liegt, nicht das hinzugefügte Stück für die Verteilung um diesen Mittelwert. Für den ersten Fall, in dem x1 und x2 beide 0 sind, unterschreiten die Intervalle nicht 9,7. Dies unterscheidet sich sehr von dem wahren Vorhersageintervall, das auf 8 abfällt. Wenn wir neue Datenpunkte generieren, gibt es mehrere Punkte (viel mehr) als 5%), die in den Intervallen true und regression liegen, jedoch nicht in die zufälligen Gesamtstrukturintervalle fallen.
Um ein Vorhersageintervall zu generieren, müssen Sie einige starke Annahmen über die Verteilung der einzelnen Punkte um die vorhergesagten Mittelwerte treffen. Anschließend können Sie die Vorhersagen aus den einzelnen Bäumen (das Bootstrap-Konfidenzintervall-Stück) ableiten und dann einen Zufallswert aus den angenommenen Werten generieren Verteilung mit diesem Zentrum. Die Quantile für diese generierten Stücke bilden möglicherweise das Vorhersageintervall (aber ich würde es trotzdem testen, möglicherweise müssen Sie den Vorgang mehrmals wiederholen und kombinieren).
Hier ist ein Beispiel dafür, wie Sie normale Abweichungen zu den Vorhersagen hinzufügen (da wir wissen, dass die ursprünglichen Daten normal verwendet wurden), wobei die Standardabweichung auf der geschätzten MSE von diesem Baum basiert:
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
Diese Intervalle enthalten diejenigen, die auf perfektem Wissen basieren. Sie hängen jedoch stark von den getroffenen Annahmen ab (die Annahmen sind hier gültig, da wir das Wissen darüber verwendet haben, wie die Daten simuliert wurden, und sie sind möglicherweise in realen Datenfällen nicht so gültig). Ich würde die Simulationen immer noch mehrmals für Daten wiederholen, die eher Ihren realen Daten ähneln (aber simuliert wurden, damit Sie die Wahrheit wissen), bevor ich dieser Methode voll vertraue.
score
Funktion zur Bewertung der Leistung. Da die Ausgabe auf der Mehrheit der Stimmen der Bäume im Wald basiert, erhalten Sie im Falle einer Klassifizierung eine Wahrscheinlichkeit, dass dieses Ergebnis wahr ist, basierend auf der Stimmenverteilung. Ich bin mir nicht sicher über die Regression. Welche Bibliothek benutzen Sie?