Si se quiere entrenar un modelo usando la tecnica de bagging (ver concepto de bagging AQUI) y se tienen muchos datos, puede que el proceso demore mucho tiempo.
Una forma de reducir el tiempo es paralelizando los procesos, asignando a cada procesador una parte de los modelos a entrenar y luego unificar los resultados en un único modelo.
Conceptuelmente seria así:
library(rpart);library(C50);data(churn);library(foreach); Train <- churnTrain[sample(3333,1e5,replace = T), ] Iteraciones <- 4 n <- nrow(Train) inicio <- Sys.time() modelo <- foreach(i=1:Iteraciones) %do% { muestra <- sample(n, n, replace = T) rpart(churn ~ .,data = Train[muestra, ]) } (duracion <- Sys.time()-inicio)
#============================================ # BAGGING EN PARALELO #============================================ # CARGAR DATOS Y LIBRERIAS # ----------------------------------------------------------- library(C50);data(churn);library(foreach);library(doParallel) Train <- churnTrain[sample(3333,1e5,replace = T), ] Test <- churnTest # CREA MODELOS EN PARALELO # ----------------------------------------------------------- inicio <- Sys.time() Iteraciones <- 4 n <- nrow(Train) cl <- makeCluster(4) registerDoParallel(cl) modelo <- foreach(i = 1:Iteraciones) %dopar% { library(rpart) muestra <- sample(n, n, replace = T) rpart(churn ~ ., data = churnTrain[muestra, ]) } stopCluster(cl) print(duracion <- Sys.time() - inicio) # PREDICCION # ----------------------------------------------------------- Prediccion <- foreach(i=1:Iteraciones, .combine=cbind) %do% { as.character(predict(modelo[[i]], churnTest, type = "class")) } Prediccion <- as.data.frame(Prediccion) # PREDICCION POR VOTO MAYORITARIO # ----------------------------------------------------------- Prediccion$Cantidad_yes <- rowSums(Prediccion [, 1:Iteraciones] == "yes") Prediccion$Cantidad_no <- rowSums(Prediccion [, 1:Iteraciones] == "no") Prediccion$Prediccion <- ifelse(Prediccion$Cantidad_yes>Prediccion$Cantidad_no,"yes","no") # MATRIZ CONFUSION # ----------------------------------------------------------- MC <- table(Test[, "churn"], Prediccion[, "Prediccion"]) print(MC)
(duracion <- Sys.time()-inicio)
No hay comentarios:
Publicar un comentario