/ / Vypočítajte R-štvorcový (% Var vysvetlil) z kombinovaného randomForest regresného objektu - r, random-forest

Vypočítajte R-squared (% Var vysvetlené) z kombinovanej náhodnejForest regresný objekt - r, náhodný les

Pri výpočte a randomForest regresie, objekt obsahuje R-kvadrát ako "% 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

Pri použití a foreach slučky pre výpočet a combine násobok randomForest hodnoty R-štvorcov nie sú k dispozícii, ako je uvedené v ?combine:

Na confusion, err.rate, mse a rsq Komponenty (ako aj zodpovedajúce komponenty v testovacom komnente, ak existujú) kombinovaného objektu budú 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

Vzhľadom k tomu, že nebol naozaj odpovedal v táto otázkaJe vôbec možné vypočítať R-kvadrát (% Var vysvetlené) a priemer štvorcových rezíduí z randomForest objekt potom?

(Kritici tejto paralelizácie by sa mohli obhajovať caret::train(... method = "parRF")alebo iné. Ukázalo sa však, že to trvá večne. V skutočnosti to môže byť užitočné pre každého, kto ho používa combine zlúčiť randomForest objektov ...)

odpovede:

4 pre odpoveď č. 1

Áno. Hodnotu R-kvadrát môžete vypočítať po tom, čo si vezmete predpovede, ktoré vyplývajú z vašich tréningových údajov a vášho vyškoleného modelu a porovnáte ich so skutočnými hodnotami:

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

Chyba strednej veľkosti:

caret::RMSE(predicted,actual)