/ / Calculer R au carré (% Var expliqué) à partir d'un objet de régression randomForest combiné - r, random-forest

Calculer R au carré (% Var expliqué) à partir d'un objet de régression randomForest combiné - r, random-forest

Lors du calcul d'un randomForest régression, l'objet comprend le R au carré comme "% 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

Cependant, lorsqu’on utilise un foreach boucle pour calculer et combine plusieurs randomForest les objets, les valeurs de R au carré ne sont pas disponibles, comme indiqué dans ?combine:

le confusion, err.rate, mse et rsq composants (ainsi que les composants correspondants dans le composant de test, s’il existe) de l’objet combiné seront 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

Comme il n’a pas vraiment été répondu à cette question: Est-il possible de calculer le R-carré (% Var expliqué) et la moyenne des résidus au carré d'un randomForest objet après?

(Les critiques de cette parallélisation pourraient argumenter pour utiliser caret::train(... method = "parRF")ou autres. Cependant, cela s'avère durer une éternité. En fait, cela pourrait être utile à quiconque utilise combine fusionner randomForest objets...)

Réponses:

4 pour la réponse № 1

Oui. Vous pouvez calculer la valeur R au carré après coup en comparant les prévisions issues de vos données d’entraînement et de votre modèle entraîné aux valeurs réelles:

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

Ou erreur quadratique moyenne:

caret::RMSE(predicted,actual)