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
irsq
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 № 1Tak. 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)