2017-05-23 4 views
2

회귀를 계산할 때 randomForest 회귀를 계산할 때이 오브젝트의 R 제곱 값은 "% Var explained: ..."입니다. 그러나결합 된 randomForest 회귀 오브젝트

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 

, 계산 combine 여러 randomForest 목적하는 foreach 루프를 사용하는 경우가 ?combine에서 언급 된 바와 같이, R- 제곱 값을 사용할 수없는 :

The confusion , err.rate , mse and rsq components (as well as the corresponding components in the test compnent, if exist) of the combined object will be 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 

그 이후 this question에 실제로 응답하지 않았습니다. randomForest 개체의 R 제곱 (% Var 설명) 및 Mean of squared residuals를 계산하는 것이 가능합니까?

(이 병렬화의 비평가는.. 그러나이 영원히 걸릴 것으로 판명 caret::train(... method = "parRF"), 또는 다른 사람을 사용하는 주장 수도 사실, 이것은 randomForest 객체 ... 병합 combine를 사용하는 사람을 위해 유용 할 수 있습니다)

답변

4

예.

# 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 제곱 값을 계산할 수 있습니다