ACTUALIZACIÓN: caret ahora se usa foreachinternamente, por lo que esta pregunta ya no es realmente relevante. Si puede registrar un backend paralelo que funcione foreach, caret lo usará.
Tengo el paquete de caret para R, y estoy interesado en usar la trainfunción 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 con Windows? Tengo el paquete doSMP , pero no puedo entender cómo traducir la foreachfunción a una lapplyfunción, así que puedo pasarla a la trainfunción.
Aquí hay un ejemplo de lo que quiero hacer, de la traindocumentación: Esto es exactamente lo que quiero hacer, pero usando el doSMPpaquete, en lugar del doMPIpaquete.
## 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 usa 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)
fuente

caret::train()deWindowsla mayoría de los ejemplos deAPMlibro son computacionalmente caro, al menos para mí 3 GB de RAM, 2,1 GHz, de doble núcleo, Win 32 bits . Si hubiera conocido este problema antes, cambiaría aLinux, pero ya es demasiado tarde para hacer eso. ¿Conoces alguna idea de cómo combatir este problema en Windows? Si la respuestambqsigue activa, ¿puede mostrar en el código utilizando un ejemplo concreto de cualquier modelo con un tamaño de datos moderado de cómo implementar elcomputeFunction?foreachpaquete internamente, lo que funciona con cualquier backend paralelo que pueda registrar. Echa un vistazo al paquete doParallel. Una vez que registre un back-end, caret lo usará automáticamente. También tenga en cuenta que, en Windows, cada núcleo necesita su propia copia de RAM, por lo que si registra 4 núcleos, necesita 4 veces más RAM.caret, ¿puedes echar un vistazo a esta pregunta? Te lo agradecería mucho. stats.stackexchange.com/questions/81962/…