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)
sumber
caret::train()
untukWindows
, sebagian besar contohAPM
buku yang komputasi mahal, setidaknya untuk saya 3GB RAM, 2.1GHz, dual core, 32bit Win . Seandainya saya mengetahui masalah ini sebelumnya, saya akan berubahLinux
, tetapi sekarang sudah terlambat bagi saya untuk melakukan hal seperti itu. Apakah Anda tahu cara mengatasi masalah ini di windows? jika jawabannya olehmbq
masih aktif, dapatkah Anda hanya menampilkan kode menggunakan contoh nyata dari setiap model dengan ukuran data moderat bagaimana menerapkannyacomputeFunction
?foreach
paket secara internal, yang berfungsi dengan backend paralel yang dapat Anda daftarkan. Lihatlah paket doParallel. Setelah Anda mendaftarkan backend, tanda sisipan akan secara otomatis menggunakannya. Perhatikan juga, pada windows, setiap core membutuhkan salinan ramnya sendiri, jadi jika Anda mendaftar 4 core, Anda membutuhkan RAM sebanyak 4x.caret
, dapatkah Anda melihat pertanyaan ini, saya akan sangat berterima kasih. stats.stackexchange.com/questions/81962/…