/ / Oblicz R-kwadrat (wyjaśniono% Var) z połączonego obiektu regresji randomForest - r, losowy las

Oblicz R-kwadrat (wyjaśniono% Var) z połączonego obiektu regresji losowej - r, random-forest

Przy obliczaniu a randomForest regresja, obiekt zawiera kwadrat R jako „% 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

Jednak podczas korzystania z foreach pętla do obliczenia i combine wielokrotność randomForest obiektów, wartości R do kwadratu nie są dostępne, jak zaznaczono w ?combine:

The confusion, err.rate, mse i rsq komponenty (jak również odpowiednie komponenty w komponencie testowym, jeśli istnieją) połączonego obiektu będą 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

Ponieważ tak naprawdę nie otrzymano odpowiedzi to pytanie: Czy w ogóle można obliczyć R-kwadrat (wyjaśniono% Var) i średnią kwadratów reszt z an randomForest obiekt później?

(Krytycy tej paralelizacji mogą argumentować za użyciem caret::train(... method = "parRF")lub inne. Jednak okazuje się, że trwa to wiecznie. W rzeczywistości może to być przydatne dla każdego, kto używa combine połączyć randomForest obiekty ...)

Odpowiedzi:

4 dla odpowiedzi № 1

Tak. Możesz obliczyć wartość R-kwadrat po fakcie, biorąc prognozy, które wynikają z twoich danych treningowych i wytrenowanego modelu i porównując je z rzeczywistymi wartościami:

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

Lub średni błąd kwadratu:

caret::RMSE(predicted,actual)