/ / Calcular R-cuadrado (% Var explicado) a partir del objeto de regresión randomForest combinado - r, random-forest

Calcule R-cuadrado (% Var explicado) a partir del objeto de regresión randomForest combinado - r, random-forest

Al calcular un randomForest Regresión, el objeto incluye el R-cuadrado como "% 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

Sin embargo, cuando se utiliza un foreach bucle para calcular y combine múltiple randomForest objetos, los valores de R cuadrado no están disponibles, como se indica en ?combine:

los confusion, err.rate, mse y rsq Los componentes (así como los componentes correspondientes en el componente de prueba, si existen) del objeto combinado serán 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

Ya que no fue realmente respondida en esta pregunta: ¿Es posible calcular el R-cuadrado (% Var explicado) y la Media de los residuos cuadrados de un randomForest objeto despues?

(Los críticos de esta paralelización podrían argumentar usar caret::train(... method = "parRF"), u otras personas. Sin embargo, esto resulta ser para siempre. De hecho, esto podría ser útil para cualquiera que use combine fusionar randomForest objetos...)

Respuestas

4 para la respuesta № 1

Sí. Puede calcular el valor de R cuadrado después de los hechos tomando las predicciones que resultan de sus datos de entrenamiento y su modelo entrenado y comparándolos con los valores reales:

# 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))

O Mean Squared Error:

caret::RMSE(predicted,actual)