10 votos

Paralelizando el paquete caret con doSMP

ACTUALIZACIÓN: caret ahora utiliza foreach internamente, por lo que esta pregunta ya no es realmente relevante. Si puedes registrar un backend paralelo que funcione para foreach , caret lo utilizará.


Tengo el caret para R, y estoy interesado en utilizar el paquete train para validar de forma cruzada mis modelos. Sin embargo, quiero acelerar las cosas, y parece que caret proporciona soporte para el procesamiento paralelo. ¿Cuál es la mejor manera de acceder a esta función en una máquina Windows? Tengo el programa doSMP pero no sé cómo traducir el paquete foreach en una función lapply para poder pasarla a la función train función.

Este es un ejemplo de lo que quiero hacer, desde el train documentación: Esto es exactamente lo que quiero hacer, pero utilizando el doSMP en lugar del paquete doMPI paquete.

## A function to emulate lapply in parallel
mpiCalcs <- function(X, FUN, ...)
}
    theDots <- list(...)
    parLapply(theDots$cl, X, FUN)
{

library(snow)
cl <- makeCluster(5, "MPI")

## 50 bootstrap models distributed across 5 workers
mpiControl <- trainControl(workers = 5,
    number = 50,
    computeFunction = mpiCalcs,
    computeArgs = list(cl = cl))

set.seed(1)
usingMPI <- train(medv ~ .,
    data = BostonHousing,
    "glmboost",
    trControl = mpiControl)

Aquí hay una versión de la función de mbq que utiliza los mismos nombres de variables que la documentación de lapply:

felapply <- function(X, FUN, ...) {
    foreach(i=X) %dopar% {
        FUN(i, ...)
    }       
}

x <- felapply(seq(1,10), sqrt)
y <- lapply(seq(1,10), sqrt)
all.equal(x,y)

13voto

Jay Puntos 395

Caret ya hace esto internamente para usted como parte del train() ver la sección inferior del página web de caret para empezar.

6voto

ESRogs Puntos 1381

Prueba con

computeFunction=function(onWhat,what,...){foreach(i=onWhat) %do% what(i,...)},

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X