Wenn ich ein randomForest
Modell ausführe , kann ich anhand des Modells Vorhersagen treffen. Gibt es eine Möglichkeit, ein Vorhersageintervall für jede der Vorhersagen zu erhalten, so dass ich weiß, wie "sicher" das Modell in seiner Antwort ist? Wenn dies möglich ist, basiert es einfach auf der Variabilität der abhängigen Variablen für das gesamte Modell oder hat es breitere und engere Intervalle, abhängig von dem bestimmten Entscheidungsbaum, der für eine bestimmte Vorhersage befolgt wurde?
r
confidence-interval
random-forest
Dean MacGregor
quelle
quelle
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?Antworten:
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:
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:
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):
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:
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.
quelle
Mir ist klar, dass dies ein alter Beitrag ist, aber ich habe einige Simulationen durchgeführt und dachte, ich werde meine Erkenntnisse teilen.
Wenn Sie diesen Code in @GregSnow ändern, erhalten Sie die folgenden Ergebnisse
Wenn wir diese mit den Intervallen vergleichen, die durch Hinzufügen einer normalen Abweichung zu Vorhersagen mit Standardabweichung generiert wurden, wie es MSE wie @GregSnow vorschlug,
Das Intervall dieser beiden Ansätze ist jetzt sehr eng. Das Diagramm des Vorhersageintervalls für die drei Ansätze gegen die Fehlerverteilung sieht in diesem Fall wie folgt aus
Lassen Sie uns nun die Simulation erneut ausführen, diesmal jedoch die Varianz des Fehlerterms erhöhen. Wenn unsere Vorhersageintervallberechnungen gut sind, sollten wir am Ende größere Intervalle haben als oben angegeben.
Dies macht deutlich, dass die Berechnung der Vorhersageintervalle mit dem zweiten Ansatz weitaus genauer ist und Ergebnisse liefert, die dem Vorhersageintervall der linearen Regression sehr nahe kommen.
Diese stimmen sehr gut mit den linearen Modellintervallen und auch dem Ansatz von @GregSnow überein. Beachten Sie jedoch, dass die zugrunde liegende Annahme bei allen von uns diskutierten Methoden ist, dass die Fehler einer Normalverteilung folgen.
quelle
Wenn Sie R verwenden, können Sie leicht Vorhersageintervalle für die Vorhersagen einer zufälligen Waldregression erstellen: Verwenden Sie einfach das Paket
quantregForest
(bei CRAN erhältlich ) und lesen Sie den Artikel von N. Meinshausen darüber, wie bedingte Quantile mit quantilen Regressionswäldern abgeleitet werden können und wie sie kann verwendet werden, um Vorhersageintervalle zu erstellen. Sehr informativ, auch wenn Sie nicht mit R arbeiten!quelle
Dies ist mit randomForest einfach zu lösen.
Lassen Sie mich zunächst die Regressionsaufgabe behandeln (vorausgesetzt, Ihr Wald hat 1000 Bäume). In der
predict
Funktion haben Sie die Möglichkeit, Ergebnisse von einzelnen Bäumen zurückzugeben. Dies bedeutet, dass Sie 1000 Spalten erhalten. Wir können den Durchschnitt der 1000 Spalten für jede Zeile nehmen - dies ist die reguläre Ausgabe, die RF auf irgendeine Weise erzeugt hätte. Um das Vorhersageintervall zu erhalten, sagen wir +/- 2 std. abweichungen müssen nur für jede zeile von den 1000 werten berechnet werden +/- 2 std. Abweichungen und machen Sie diese zu Ihrer oberen und unteren Grenze Ihrer Vorhersage.Denken Sie zweitens bei der Klassifizierung daran, dass jeder Baum entweder 1 oder 0 (standardmäßig) ausgibt und die Summe aller 1000 durch 1000 dividierten Bäume die Klassenwahrscheinlichkeit ergibt (im Fall der binären Klassifizierung). Um ein Vorhersageintervall für die Wahrscheinlichkeit festzulegen, müssen Sie die min. Nodesize-Option (den genauen Namen dieser Option finden Sie in der randomForest-Dokumentation) Wenn Sie einen Wert von >> 1 festlegen, geben die einzelnen Bäume Zahlen zwischen 1 und 0 aus. Von nun an können Sie denselben Vorgang wie oben für beschrieben wiederholen die Regressionsaufgabe.
Ich hoffe das ergibt Sinn.
quelle
Ich habe einige Optionen ausprobiert (dies alles WIP):
Ich habe die abhängige Variable tatsächlich zu einem Klassifizierungsproblem mit den Ergebnissen als Bereiche anstelle eines einzelnen Werts gemacht. Die Ergebnisse waren schlecht, verglichen mit einem einfachen Wert. Ich habe diesen Ansatz aufgegeben.
Ich habe es dann in mehrere Klassifizierungsprobleme konvertiert, von denen jedes eine Untergrenze für den Bereich darstellte (das Ergebnis des Modells war, ob es die Untergrenze überschreiten würde oder nicht), und dann alle Modelle ausgeführt (~ 20) und dann kombinieren Sie das Ergebnis, um eine endgültige Antwort als Bereich zu erhalten. Dies funktioniert besser als 1 oben, aber nicht so gut, wie ich es brauche. Ich arbeite immer noch daran, diesen Ansatz zu verbessern.
Ich habe OOB und Auslassungsschätzungen verwendet, um zu entscheiden, wie gut / schlecht meine Modelle sind.
quelle
Das Problem der Erstellung von Vorhersageintervallen für zufällige Waldvorhersagen wurde in der folgenden Abhandlung angesprochen:
Zhang, Haozhe, Joshua Zimmerman, Dan Nettleton und Daniel J. Nordman. "Random Forest Prediction Intervals." Der amerikanische Statistiker, 2019.
Das R-Paket "rfinterval" ist die bei CRAN verfügbare Implementierung.
Installation
So installieren Sie das R-Paket rfinterval :
Verwendungszweck
Schnellstart:
Datenbeispiel:
quelle