2017-09-30 1 views
1

병렬 처리를 위해 foreach 패키지를 사용하여 임의의 포리스트를 실행하려고합니다. 여기에 내가 실행중인 코드가 있습니다.병렬 처리에서 생성 된 임의의 포리스트 모델 채점

library(doParallel) 
library(doMC) 
library(foreach) 
library(randomForest) 

Train <- read.csv("Train_Parallel.csv") 
Test <- read.csv("Test_Parallel.csv") 
Scoring <- read.csv("Scoring_Parallel.csv") 


cores = detectCores()-1 
cl = makeCluster(cores) 
registerDoParallel(cl) 

startparallel <- Sys.time() 
rf_parallel <- foreach(ntree=rep(400, cores), .combine=combine, .multicombine=TRUE, 
       .packages='randomForest') %dopar% { 
       randomForest(target ~ ., 
          data=Train, 
          importance=TRUE, 
          ntree=ntree, 
          mtry = 25) 
       } 
endparallel <- Sys.time() 
stopCluster(cl) 
endparallel - startparallel 

병렬 실행 코드가 예상대로 실행됩니다. 그러나 훈련 및 테스트 데이터 세트에 대해 예측 함수를 실행하면 아래 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

> Train$Predicted <- predict(rf_parallel, Train) 
Error in UseMethod("predict") : 
    no applicable method for 'predict' applied to an object of class "list" 
> Test$Predicted <- predict(rf_parallel, Test) 
Error in UseMethod("predict") : 
    no applicable method for 'predict' applied to an object of class "list" 
+0

'foreach'는 각 코어에 대해 하나의 랜덤 포레스트 모델을 반환합니다. 각 코어의 각 임의의 포리스트 모델은 목록의 요소로'rf_parallel'에 반환됩니다. 즉,'rf_parallel'은 길이가 (num_cores) 인리스트이고리스트의 각 요소는 임의의 포레스트 모델입니다. 'predict (model, data)'에서는 모델 목록이 아니라 모델을 기대하고 있습니다. 예를 들어,'predict (rf_parallel [1], Train)'을 시도하면 오류없이 작동 할 것입니다. 제 추측으로는 정확히 병렬화하는 것을 오해하고 있다는 것입니다. – CPak

+0

응답 해 주셔서 감사합니다. 4 코어가 있으므로 각각 ntree = 400을 갖는 3 개의 (detectCores() - 1) 임의의 포리스트 모델이 생성됩니다. ".combine = combine"는 목록을 "random.Forest"의 클래스로 결합하면 안됩니까? –

+0

아니요.'rf_parallel'을 입력하여'str (rf_parallel)'을 입력하십시오. (btw, 심지어 가능한 경우 모델을 병합하는 방법을 잘 모르겠습니다. 당신은 stackoverflow 커뮤니티에 어떤 아이디어가 있는지 볼 수 있습니다.) – CPak

답변

0

이 있는지 확인 랜덤 포레스트 :: dplyr에 의해 마스크되지 않은 결합 : 결합 또는 뭔가 다른

관련 문제