ATUALIZAÇÃO: o sinal de intercalação agora usa foreach
internamente, portanto, essa pergunta não é mais realmente relevante. Se você pode registrar um back-end paralelo em funcionamento foreach
, o caret o usará.
Eu tenho o pacote de interpolação para R e sou interessante em usar a train
função para validar cruzadamente meus modelos. No entanto, quero acelerar as coisas e parece que o sinal de intercalação fornece suporte para processamento paralelo. Qual é a melhor maneira de acessar esse recurso em uma máquina Windows? Eu tenho o pacote doSMP , mas não consigo descobrir como converter a foreach
função em uma lapply
função, para que eu possa passar para a train
função.
Aqui está um exemplo do que eu quero fazer, a partir da train
documentação: É exatamente isso que eu quero fazer, mas usando o doSMP
pacote, e não o doMPI
pacote.
## 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)
Aqui está uma versão da função mbq que usa os mesmos nomes de variáveis que a documentação da 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)
fonte
caret::train()
paraWindows
, a maioria dos exemplos deAPM
livro são computacionalmente caro, pelo menos para mim 3GB RAM, 2,1 GHz, dual core, 32 bits Win . Se eu conhecesse esse problema antes, mudaria paraLinux
, mas agora é tarde demais para fazer isso. Você tem alguma idéia de como combater esse problema no Windows? se a resposta pormbq
ainda estiver ativa, você pode apenas mostrar no código usando um exemplo concreto de qualquer modelo com tamanho de dados moderado de como implementar ocomputeFunction
?foreach
pacote internamente, que funciona com qualquer back-end paralelo que você possa registrar. Dê uma olhada no pacote doParallel. Depois de registrar um back-end, o acento circunflexo o usará automaticamente. Observe também que, no Windows, cada núcleo precisa de sua própria cópia de memória RAM; portanto, se você registrar 4 núcleos, precisará de 4x mais RAM.caret
, você pode dar uma olhada nesta pergunta, ficaria muito grato. stats.stackexchange.com/questions/81962/…