Ich verwende das randomForest-Paket in R (R-Version 2.13.1, randomForest-Version 4.6-2) für die Regression und habe eine signifikante Verzerrung in meinen Ergebnissen festgestellt: Der Vorhersagefehler hängt vom Wert der Antwortvariablen ab. Hohe Werte werden unterprognostiziert und niedrige Werte werden überprognostiziert. Zuerst vermutete ich, dass dies eine Folge meiner Daten war, aber das folgende einfache Beispiel legt nahe, dass dies dem Algorithmus für zufällige Gesamtstrukturen inhärent ist:
n = 1000;
x1 = rnorm(n, mean = 0, sd = 1)
response = x1
predictors = data.frame(x1=x1)
rf = randomForest(x=predictors, y=response)
error = response-predict(rf, predictors)
plot(x1, error)
Ich vermute, dass die Verzerrung von der Verteilung der Antwort abhängt. Wenn sie x1
beispielsweise gleichmäßig verteilt ist, gibt es keine Verzerrung. Wenn x1
es exponentiell verteilt ist, ist die Vorspannung einseitig. Im Wesentlichen sind die Werte der Antwort an den Enden einer Normalverteilung Ausreißer. Es ist keine Überraschung, dass ein Modell Schwierigkeiten haben würde, Ausreißer vorherzusagen. Im Fall von randomForest ist es weniger wahrscheinlich, dass ein Antwortwert von extremer Größe vom Ende einer Verteilung in einem Endblatt landet, und seine Wirkung wird im Ensemble-Durchschnitt ausgewaschen.
Beachten Sie, dass ich versucht habe, diesen Effekt in einem vorherigen Beispiel zu erfassen: "RandomForest in R lineare Regressionsschwänze mtry". Dies war ein schlechtes Beispiel. Wenn die Vorspannung in dem obigen Beispiel dem Algorithmus wirklich inhärent ist, könnte eine Vorspannungskorrektur formuliert werden, wenn die Antwortverteilung gegeben ist, die vorhergesagt werden soll, was zu genaueren Vorhersagen führt.
Unterliegen baumbasierte Methoden wie zufällige Gesamtstrukturen einer Verzerrung der Antwortverteilung? Wenn ja, ist dies der Statistik-Community zuvor bekannt und wie wird es normalerweise korrigiert (z. B. ein zweites Modell, das die Residuen des voreingenommenen Modells als Eingabe verwendet)?
Die Korrektur einer antwortabhängigen Vorspannung ist schwierig, da die Antwort von Natur aus nicht bekannt ist. Leider hat die geschätzte / vorhergesagte Antwort nicht oft die gleiche Beziehung zur Verzerrung.
quelle
Antworten:
Es ist genau so, wie Sie vermuten - die Tatsache, dass Blattknoten Mittelwerte über eine Reihe von Objekten enthalten, macht jedes Regressionsbaummodell die Antwortverteilung enger und macht eine Extrapolation unmöglich. Das Ensemble hilft natürlich nicht dabei und verschlimmert die Situation.
Die naive Lösung (und gefährlich wegen Überanpassung) besteht darin, das Modell in eine Art klassische Regression zu verpacken, die die Reaktion auf die gewünschte Verteilung neu skaliert.
Die bessere Lösung ist eines der Modell-in-Blatt-Baummodelle, wie zum Beispiel MOB im Party-Paket. Die Idee hier ist, dass die Partitionierung des Merkmalsraums enden sollte, wenn das Problem nicht auf einen einfachen Wert (wie im regulären Baum), sondern auf eine einfache Beziehung (z. B. linear) zwischen der Antwort und einigen Prädiktoren vereinfacht wird. Eine solche Beziehung kann nun durch Anpassen eines einfachen Modells gelöst werden, das die Verteilung nicht stört oder Extremwerte trimmt und extrapolieren kann.
quelle
Ich hatte genau das gleiche Problem mit Conditional RF, auf das über das Rasselpaket zugegriffen wurde. Ich schickte Graham Williams (Autor von Rattle) eine E-Mail darüber, der meine Anfrage freundlicherweise an die Autoren von cforest weiterleitete, die antworteten und vorschlugen, mit zwei Parametern zu spielen, auf die anscheinend nirgendwo in der CRF-Dokumentation verwiesen wird, die aber dennoch angesprochen zu werden schienen das Problem, nämlich minplit = 2 und minbucket = 1.
quelle
minsplit
IchSie sollten den optimalen Wert von mtry und sampsize schätzen, indem Sie den "Kreuzvalidierungsfehler" außerhalb der Stichprobe über ein Raster verschiedener mtry- und sampsize-Parameter für eine entsprechende Antwortvariable für einen festen Satz von Merkmalen minimieren und dann Schlussfolgerungen ziehen. in Bezug auf die Ergebnisse. Sie können eine Kombination der Rasterparameter mit expand.grid erstellen.
quelle