MISE À JOUR: caret utilise désormais en foreach
interne, donc cette question n'est plus vraiment pertinente. Si vous pouvez enregistrer un backend parallèle fonctionnel foreach
, caret l'utilisera.
J'ai le package caret pour R, et je suis intéressé par l'utilisation de la train
fonction pour effectuer une validation croisée de mes modèles. Cependant, je veux accélérer les choses, et il semble que caret prenne en charge le traitement parallèle. Quelle est la meilleure façon d'accéder à cette fonctionnalité sur une machine Windows? J'ai le paquet doSMP , mais je ne sais pas comment traduire la foreach
fonction en lapply
fonction, donc je peux la transmettre à la train
fonction.
Voici un exemple de ce que je veux faire, à partir de la train
documentation: C'est exactement ce que je veux faire, mais en utilisant le doSMP
package, plutôt que le doMPI
package.
## 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)
Voici une version de la fonction de mbq qui utilise les mêmes noms de variables que la documentation 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)
la source
caret::train()
pourWindows
, la plupart des exemples deAPM
livres sont coûteux en calcul, au moins pour moi 3 Go de RAM, 2,1 GHz, double cœur, 32 bits Win . Si j'avais connu ce problème auparavant, je changerais pourLinux
, mais il est trop tard pour moi maintenant de faire une telle chose. Savez-vous comment lutter contre ce problème sous Windows? si la réponse parmbq
est toujours active, pouvez-vous simplement afficher le code en utilisant un exemple concret de tout modèle avec une taille de données modérée de la façon de mettre en œuvre lecomputeFunction
?foreach
package en interne, ce qui fonctionne avec tout backend parallèle que vous pouvez enregistrer. Jetez un œil au package doParallel. Une fois que vous avez enregistré un backend, caret l'utilisera automatiquement. Notez également que, sous Windows, chaque cœur a besoin de sa propre copie de RAM, donc si vous enregistrez 4 cœurs, vous avez besoin de 4 fois plus de RAM.caret
, pouvez-vous jeter un œil à cette question, je vous en serais très reconnaissant. stats.stackexchange.com/questions/81962/…