UPDATE: Caret wird jetzt foreach
intern verwendet, sodass diese Frage nicht mehr wirklich relevant ist. Wenn Sie ein funktionierendes paralleles Backend für registrieren können foreach
, wird es von Caret verwendet.
Ich habe das Caret- Paket für R und bin daran interessiert, die train
Funktion zur Kreuzvalidierung meiner Modelle zu verwenden. Ich möchte die Dinge jedoch beschleunigen, und es scheint, dass Caret die Parallelverarbeitung unterstützt. Wie kann ich auf einem Windows-Computer am besten auf diese Funktion zugreifen? Ich habe das doSMP- Paket, kann aber nicht herausfinden, wie die foreach
Funktion in eine lapply
Funktion übersetzt werden soll, sodass ich sie an die train
Funktion übergeben kann.
Hier ist ein Beispiel für das, was ich tun möchte, aus der train
Dokumentation: Genau das möchte ich tun, aber das doSMP
Paket anstelle des doMPI
Pakets verwenden.
## 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)
Hier ist eine Version der Funktion von mbq, die dieselben Variablennamen wie die lapply-Dokumentation verwendet:
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)
quelle
caret::train()
für durchführenWindows
kann. Die meisten Beispiele fürAPM
Bücher sind rechenintensiv, zumindest für mich 3 GB RAM, 2,1 GHz, Dual Core, 32 Bit Win . Hätte ich dieses Problem schon einmal gekannt, würde ich zu wechselnLinux
, aber es ist jetzt zu spät für mich, so etwas zu tun. Kennen Sie eine Idee, wie Sie dieses Problem in Windows bekämpfen können? Wenn die Antwort vonmbq
noch aktiv ist, können Sie pls einfach im Code anhand eines konkreten Beispiels eines Modells mit mäßiger Datengröße anzeigen, wie das implementiert werden sollcomputeFunction
?foreach
Paket intern zu verwenden, das mit jedem parallelen Backend funktioniert, das Sie registrieren können. Schauen Sie sich das doParallel-Paket an. Sobald Sie ein Backend registriert haben, wird es von Caret automatisch verwendet. Beachten Sie auch, dass unter Windows jeder Kern eine eigene RAM-Kopie benötigt. Wenn Sie also 4 Kerne registrieren, benötigen Sie 4x so viel RAM.caret
Können Sie sich diese Frage ansehen? Ich wäre Ihnen sehr dankbar. stats.stackexchange.com/questions/81962/…