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
No hay comentarios:
Publicar un comentario