Paralelizar Random Forest

 In Blogs

Este post fue publicado originalmente en Data Mining con R por noreply@blogger.com (Enmanuel Santana)

Si se quiere disminuir el tiempo de ejecución del algoritmo randomForest, (ver ejemplo de randomForest AQUI) puede utilizarse el package foreach, que distribuye las ejecuciones de los diferentes arboles en distintos procesadores logrando una ejecución en paralelo.

El siguiente script distribuye 1000 arboles de un randomForest  en 4 procesadores, asignando 250  arboles a cada procesador y luego uniéndolos en un único modelo. En un procesador i7 el tiempo de ejecucion tarda 30 segundos sin paralelizar, luego de paralelizar tarda 6 segundo

Conceptualmente el package foreach hace esto:

# CARGA LIBRERIA Y DATOS
#---------------------------------------------------
library(doParallel);library(foreach);library(C50);data(churn)
inicio    <- Sys.time()           
datos     <- churnTrain[sample(3333,10000,replace = T),]
 
 
# REGISTRO DE PARALLEL BACKEND
#---------------------------------------------------
cl <- makeCluster(detectCores())
registerDoParallel(cl)
getDoParWorkers()
 
 
#RANDOM FOREST
#---------------------------------------------------
modelo.rf <- foreach(ntree=rep(250, 4),         # 250 arboles x 4 nodo: 1000 arboles
                    # .combine      =  combine,  # creacion de arboles en paralelo
                     .multicombine = TRUE,      # creacion de resultados en paralelo
                     .packages     = 'randomForest') %dopar%  
   randomForest(churn ~.,data=datos, mtry = 6, ntree=ntree)
 
 
# STOP CLUSTER
#---------------------------------------------------
stopCluster(cl)
print(duracion<-Sys.time()-inicio)
 

 


1. http://stackoverflow.com/questions/14106010/parallel-execution-of-random-forest-in-r
2. http://cran.r-project.org/web/packages/foreach/vignettes/foreach.pdf
3. https://github.com/tobigithub/R-parallel/wiki/R-parallel-Errors

 

Recommended Posts

Start typing and press Enter to search