/ / Berechne R-Quadrat (% Var erklärt) aus einem kombinierten randomForest-Regressionsobjekt - r, random-forest

Berechne R-Quadrat (% Var erklärt) aus dem kombinierten RandomForest-Regressionsobjekt - r, random-forest

Bei der Berechnung von a randomForest Regression enthält das Objekt das R-Quadrat als "% Var explained: ...".

library(randomForest)
library(doSNOW)
library(foreach)
library(ggplot2)

dat <- data.frame(ggplot2::diamonds[1:1000,1:7])
rf <- randomForest(formula = carat ~ ., data = dat, ntree = 500)
rf
# Call:
#   randomForest(formula = carat ~ ., data = dat, ntree = 500)
#                Type of random forest: regression
#                      Number of trees: 500
# No. of variables tried at each split: 2
#
# Mean of squared residuals: 0.001820046
# % Var explained: 95.22

Bei der Verwendung von a foreach Schleife zu berechnen und combine mehrere randomForest Objekte sind die R-Quadrat-Werte nicht verfügbar, wie in angegeben ?combine:

Das confusion, err.rate, mse und rsq Komponenten (sowie die entsprechenden Komponenten im Testbestandteil, falls vorhanden) des kombinierten Objekts sein NULL

cl <- makeCluster(8)
registerDoSNOW(cl)

rfPar <- foreach(ntree=rep(63,8),
.combine = combine,
.multicombine = T,
.packages = "randomForest") %dopar%
{
randomForest(formula = carat ~ ., data = dat, ntree = ntree)
}
stopCluster(cl)

rfPar
# Call:
#   randomForest(formula = carat ~ ., data = dat, ntree = ntree)
#                Type of random forest: regression
#                      Number of trees: 504
# No. of variables tried at each split: 2

Da wurde es nicht wirklich beantwortet diese Frage: Ist es überhaupt möglich, das R-Quadrat (% Var erklärt) und den Mittelwert der quadrierten Residuen aus einem zu berechnen randomForest Objekt danach?

(Kritiker dieser Parallelisierung könnten argumentieren caret::train(... method = "parRF"), oder andere. Dies dauert jedoch für immer. In der Tat kann dies für jeden nützlich sein, der verwendet combine zusammenführen randomForest Objekte ...)

Antworten:

4 für die Antwort № 1

Ja. Sie können den R-Quadratwert im Nachhinein berechnen, indem Sie die Vorhersagen treffen, die sich aus Ihren Trainingsdaten und Ihrem trainierten Modell ergeben, und diese mit den tatsächlichen Werten vergleichen:

# taking the object from the question:
actual <- dat$carat
predicted <- unname(predict(rfPar, dat))

R2 <- 1 - (sum((actual-predicted)^2)/sum((actual-mean(actual))^2))

Oder mittlerer quadratischer Fehler:

caret::RMSE(predicted,actual)