Manuell berechnetes stimmt nicht mit randomForest () überein, um neue Daten zu testen


38

Ich weiß, dass dies eine ziemlich spezifische RFrage ist, aber ich denke möglicherweise falsch über die erklärte Proportionsvarianz . Hier geht.R2

Ich versuche das RPaket zu benutzen randomForest. Ich habe einige Trainingsdaten und Testdaten. Wenn ich ein zufälliges Gesamtstrukturmodell anpasse, randomForestkönnen Sie mit dieser Funktion neue Testdaten zum Testen eingeben. Anschließend wird der in diesen neuen Daten erläuterte Prozentsatz der Varianz angezeigt. Wenn ich mir das ansehe, bekomme ich eine Nummer.

Wenn ich die predict()Funktion verwende, um den Ergebniswert der Testdaten basierend auf der Modellanpassung aus den Trainingsdaten vorherzusagen, und den quadratischen Korrelationskoeffizienten zwischen diesen Werten und den tatsächlichen Ergebniswerten für die Testdaten nehme , erhalte ich eine andere Zahl. Diese Werte stimmen nicht überein .

Hier ist ein RCode, der das Problem demonstriert.

# use the built in iris data
data(iris)

#load the randomForest library
library(randomForest)

# split the data into training and testing sets
index <- 1:nrow(iris)
trainindex <- sample(index, trunc(length(index)/2))
trainset <- iris[trainindex, ]
testset <- iris[-trainindex, ]

# fit a model to the training set (column 1, Sepal.Length, will be the outcome)
set.seed(42)
model <- randomForest(x=trainset[ ,-1],y=trainset[ ,1])

# predict values for the testing set (the first column is the outcome, leave it out)
predicted <- predict(model, testset[ ,-1])

# what's the squared correlation coefficient between predicted and actual values?
cor(predicted, testset[, 1])^2

# now, refit the model using built-in x.test and y.test
set.seed(42)
randomForest(x=trainset[ ,-1], y=trainset[ ,1], xtest=testset[ ,-1], ytest=testset[ ,1])

Antworten:


52

Der Grund, warum die Werte nicht übereinstimmen, liegt darin, dass die Abweichung erklärt und nicht die Abweichung erklärt wird. Ich denke, dies ist ein weit verbreitetes Missverständnis über , das in Lehrbüchern verewigt wird. Ich habe das neulich sogar an einem anderen Thread erwähnt. Wenn Sie ein Beispiel wünschen, lesen Sie das (ansonsten recht gute) Lehrbuch Seber and Lee, Linear Regression Analysis , 2nd. ed.R 2R2randomForestR2

Eine allgemeine Definition für ist R 2 = 1 - Σ i ( y i - y i ) 2R2

R2=1i(yiy^i)2i(yiy¯)2.

Das heißt, wir berechnen den mittleren Fehlerquadrat, dividieren ihn durch die Varianz der ursprünglichen Beobachtungen und subtrahieren ihn dann von eins. (Beachten Sie, dass dieser Wert negativ sein kann, wenn Ihre Vorhersagen wirklich schlecht sind.)

Mit der linearen Regression ( mit einem Intercept-Term! ) , dass der Durchschnittswert des mit übereinstimmt . Weiterhin ist der Restvektor orthogonal zum Vektor der angepassten Werte . Wenn Sie diese beiden Dinge zusammenfassen, reduziert sich die Definition auf diejenige, die am häufigsten vorkommt, dh (Ich habe die Indizes in , um die lineare Regression anzugeben .) ˉ y y - y y R 2 L R =Corr(y, y )2. LRR 2 L Ry^iy¯yy^y^

RLR2=Corr(y,y^)2.
LRRLR2

Der randomForestAufruf verwendet die erste Definition, falls Sie dies tun

   > y <- testset[,1]
   > 1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

Sie werden sehen, dass die Antworten übereinstimmen.


1
+1, tolle Antwort. Ich habe mich immer gefragt, warum die ursprüngliche Formel für anstelle des Korrelationsquadrats verwendet wird. Für die lineare Regression ist es dasselbe, aber wenn es auf andere Kontexte angewendet wird, ist es immer verwirrend. R2
mpiktas

(+1) Sehr elegante Antwort.
chl

@mpiktas, @chl, ich werde heute etwas später versuchen, darauf einzugehen. Grundsätzlich gibt es einen engen (aber vielleicht etwas versteckten) Zusammenhang zum Testen von Hypothesen im Hintergrund. Befindet sich der Konstantenvektor auch in einer linearen Regression nicht im Spaltenraum der Entwurfsmatrix, schlägt die Definition der "Korrelation" fehl.
Kardinal

Wenn Sie eine andere Referenz als das Seber / Lee-Lehrbuch haben (für mich nicht zugänglich), würde ich gerne eine gute Erklärung dafür sehen, wie sich die erläuterte Variation (dh 1-SSerr / SStot) vom quadrierten Korrelationskoeffizienten oder der erklärten Varianz unterscheidet. Nochmals vielen Dank für den Tipp.
Stephen Turner

Wenn der R-Quadrat-Wert aus den Regressionsergebnissen der instrumentellen Variablen negativ ist, gibt es eine Möglichkeit, diesen negativen Wert zu unterdrücken und für die Berichterstellung in einen positiven Wert umzuwandeln? Siehe diesen Link bitte: stata.com/support/faqs/statistics/two-stage-least-squares
Eric
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.