ACTUALIZACIÓN: caret ahora se usa foreach
internamente, 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 train
funció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 foreach
función a una lapply
función, así que puedo pasarla a la train
función.
Aquí hay un ejemplo de lo que quiero hacer, de la train
documentación: Esto es exactamente lo que quiero hacer, pero usando el doSMP
paquete, en lugar del 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 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()
deWindows
la mayoría de los ejemplos deAPM
libro 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 respuestambq
sigue 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
?foreach
paquete 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/…