/ /組み合わせられたrandomForest回帰オブジェクトからR二乗(%Varの説明)を計算-r、ランダムフォレスト

結合されたrandomForest回帰オブジェクト-r、ランダムフォレストからR-二乗(%Var説明)を計算する

計算するとき 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

confusion, err.rate, mse そして rsq 結合されたオブジェクトのコンポーネント(および存在する場合はテストコンポーネントの対応するコンポーネント)は、 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

本当に答えられなかったので この質問:Rの2乗(%Varの説明)と2乗の残差の平均を計算することはまったく可能ですか? randomForest その後オブジェクト?

(この並列化の批判は、使用することを主張するかもしれません caret::train(... method = "parRF")、または他の人。ただし、これには時間がかかります。実際、これは、 combine マージする randomForest オブジェクト...)

回答:

回答№1は4

はい。トレーニングデータとトレーニングされたモデルから得られる予測を取得し、それらを実際の値と比較することにより、事後のR 2乗値を計算できます。

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