在计算 randomForest 回归时,对象包括 R 平方作为“% 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

但是,当使用 foreach 循环计算和 combine 多个 randomForest 对象时,R 平方值不可用,如 ?combine 中所述:


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

由于在 this question 中并没有真正回答它:之后是否有可能从 randomForest 对象计算 R 平方(解释的 % Var)和平方残差均值?

(这种并行化的批评者可能会争辩说使用 caret::train(... method = "parRF") 或其他。然而,结果证明这需要永远。事实上,这可能对任何使用 combine 合并 randomForest 对象的人有用......)

最佳答案

是的。您可以通过采用由训练数据和训练模型得出的预测并将它们与实际值进行比较来计算 R 平方值:

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

或均方误差:
caret::RMSE(predicted,actual)

关于r - 从组合的 randomForest 回归对象计算 R 平方(%Var 解释),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44136949/

10-12 13:57