UPDATE: caret sekarang menggunakan foreach
internal, jadi pertanyaan ini tidak lagi benar-benar relevan. Jika Anda dapat mendaftarkan backend paralel yang berfungsi untuk foreach
, caret akan menggunakannya.
Saya memiliki paket caret untuk R, dan saya menarik menggunakan train
fungsi untuk memvalidasi silang model saya. Namun, saya ingin mempercepat, dan tampaknya caret memberikan dukungan untuk pemrosesan paralel. Apa cara terbaik untuk mengakses fitur ini pada mesin Windows? Saya memiliki paket doSMP , tetapi saya tidak tahu bagaimana menerjemahkan foreach
fungsi menjadi lapply
fungsi, jadi saya bisa meneruskannya ke train
fungsi.
Berikut adalah contoh dari apa yang ingin saya lakukan, dari train
dokumentasi: Ini persis apa yang ingin saya lakukan, tetapi menggunakan doSMP
paket, bukan doMPI
paket.
## 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)
Berikut adalah versi fungsi mbq yang menggunakan nama variabel yang sama dengan dokumentasi 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)