ОБНОВЛЕНИЕ: каретка теперь используется foreach
внутри, поэтому этот вопрос больше не актуален. Если вы можете зарегистрировать рабочий параллельный бэкэнд для foreach
, caret будет использовать его.
У меня есть пакет каретки для R, и мне интересно использовать train
функцию для перекрестной проверки моих моделей. Тем не менее, я хочу ускорить процесс, и, похоже, карета обеспечивает поддержку параллельной обработки. Каков наилучший способ доступа к этой функции на компьютере с Windows? У меня есть пакет doSMP , но я не могу понять, как преобразовать foreach
функцию в lapply
функцию, поэтому я могу передать ее train
функции.
Вот пример того, что я хочу сделать из train
документации: это именно то, что я хочу сделать, но с использованием doSMP
пакета, а не doMPI
пакета.
## 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)
Вот версия функции mbq, которая использует те же имена переменных, что и документация 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)
источник
caret::train()
дляWindows
большинства примеровAPM
книги вычислительно дорого, по крайней мере для меня 3 ГБ ОЗУ, 2,1 ГГц, двухъядерный, 32-битный Win , Если бы я знал эту проблему раньше, я бы изменилсяLinux
, но сейчас слишком поздно для меня, чтобы сделать такую вещь. Знаете ли вы, как бороться с этой проблемой в Windows? Если ответ по-mbq
прежнему активен, можете ли вы просто показать в коде, используя конкретный пример любой модели с умеренным объемом данных о том, как реализоватьcomputeFunction
?foreach
внутреннего использования пакета, который работает с любым параллельным бэкэндом, который вы можете зарегистрировать. Посмотрите на пакет doParallel. Как только вы зарегистрируете серверную часть, она будет автоматически использоваться. Также обратите внимание, что в Windows каждому ядру нужна своя копия оперативной памяти, поэтому если вы регистрируете 4 ядра, вам нужно в 4 раза больше оперативной памяти.caret
, можете ли вы взглянуть на этот вопрос, я был бы очень признателен. stats.stackexchange.com/questions/81962/…