这是我第一次使用一般的并行处理。问题主要是关于我糟糕的语法。
我需要一些帮助来捕获大量 cv.glmnet 迭代的输出,因为我相信我已经将 cv_loop_run 构建为非常低效。这与 10k 的 lambda 数量一起导致了一个巨大的矩阵,它占用了我所有的内存并导致崩溃。本质上,我需要的是每次运行的最小值和1se lambda(其中 1000 个,而不是全部 10,000 个)。因此,我不会为 cv_loop_run 捕获一个 1kx10k 的列表,而是得到一个 1k 长的列表。
registerDoParallel(cl=8,cores=4)
cv_loop_run<- rbind( foreach(r = 1:1000,
.packages="glmnet",
.combine=rbind,
.inorder =F) %dopar% {
cv_run <-cv.glmnet(X_predictors,Y_dependent,nfolds=fld,
nlambda = 10000,
alpha = 1, #FOR LASSO
grouped = FALSE,
parallel= TRUE
)
}
)
l_min<- as.matrix(unlist(as.matrix(cv_loop_run[,9 ,drop=FALSE] ))) # matrix #9 is lamda.min
l_1se<- as.matrix(unlist(as.matrix(cv_loop_run[,10 ,drop=FALSE] ))) # matrix #10 is lamda.1se