这是我第一次使用并行处理。问题主要是我的语法不好。
我想在捕获大量cv.glmnet迭代的输出方面有所帮助,因为我认为我已经构建了cv_loop_run,效率非常低。这个以及10k的lambdas数量导致了一个庞大的矩阵,它占据了我所有的记忆并导致崩溃。实质上我需要的是每次运行的最小和 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
答案 0 :(得分:0)
好的,我自己也找到了。我所要做的就是限制每个cv.glmnet运行的输出。这样,每次运行中只会获得最小值和1次lambda值。这意味着:
cv_run <-cv.glmnet(X_predictors,Y_dependent,nfolds=fld,
nlambda = 10000,
alpha = 1, #FOR LASSO
grouped = FALSE,
parallel= TRUE
)
成为这个:
cv_run <-cv.glmnet(X_predictors,Y_dependent,nfolds=fld,
nlambda = 10000,
alpha = 1, #FOR LASSO
grouped = FALSE,
parallel= TRUE
)[9:10]