如何使用并行计算优化Caret的速度和内存使用?

时间:2018-04-10 04:05:11

标签: r r-caret parallel.foreach

我正在使用插入符号在大网格上找到最佳调整参数。我发现使用带有插入符号的doSnow,内存耗尽如此之快。是否有一些优化策略?

这是C50模型,搜索网格如下:

mygrid <- expand.grid(trials=c(1, 1:4*10),
                  model=c('rules', 'tree'),
                  winnow=FALSE,
                  fuzzy=c(TRUE, FALSE),
                  cutoff=c(0.01, seq(0.025, 0.5, by=0.025))) 

1)为了节省内存,我设置了trim = TRUE和returnData = FALSE来减少单个模型的大小,如下所示:

mycontrol2 <- trainControl(method = "repeatedcv",
                      number = 3,#10,
                      repeats = 3,#5,
                      classProbs = TRUE,
                      summaryFunction = fiveStats,
                      verboseIter=TRUE,
                      trim=TRUE, returnData = FALSE #to make the model size smaller.
                      )

2)为了提高速度,我使用DoSnow的并行计算,如下所示:

 library(doSNOW)
 library(parallel)
 cores <- detectCores()
 cl <- makeCluster(cores-2, outfile="")
 registerDoSNOW(cl)

然而,由于我通过“top”命令进行监视,由于内存不足,Linux系统会终止该进程,错误信息如下所示。

  

执行暂停unserialize(节点$ con)中的错误:读取错误   连接

在这里,是否有更好的方法以良好的速度管理插入符号培训?以下是我的一些想法,可供讨论:

  1. 将搜索网格设置为几个小网格并逐个训练。问题:

    • 是否有系统的方法来确定最佳网格尺寸?
    • 分割后,是否有更好的方法来组合模型,因为我仍然想使用 plot.train(mod)方法来查看性能图。
  2. 设置并行节点数,即c1,更小。问题:

    • 是否有设定最佳c1值的策略?

1 个答案:

答案 0 :(得分:0)

鉴于您的话题很多,我将根据最近的经验来回答一些问题。

我想并行应用插入符号的计算方法是:

library(doParallel)
n_cores <- detectCores(); n_cores
# As my pc has three cores, I will use 3 of them: 
registerDoParallel(cores = n_cores - 1)

然后,当您调动trainControl时,可以应用:

mycontrol2 <- trainControl(
    method = "repeatedcv",
    number = 3,
    repeats = 3,
    classProbs = TRUE,
    verboseIter=TRUE,
    allowParallel = TRUE)

然后,您可以训练模型,并且我会列出一些可以使用的行,因为显然您没有指定要使用的模型。最重要的是定义预测变量(T1〜。),方法,数据和trControl,键入如下内容:

modFit_1 <- train(T1~.,
    method="nnet",
    trControl=cvCtrl, # Here you tune, among others, the "allowParallel"
    data=train,
    metric = "RMSE",
    preProcess = "scale",
    tuneGrid = mygrid)

您还有其他问题,我认为这些不是针对该主题的。但是,很快,与“确定最佳网格大小的系统方法”和“比较模型”有关,您可能会对以下链接的内容感兴趣:https://rpubs.com/chidungkt/389013,作者在其中编写了该策略,应用了插入符号R包,以比较五个模型的性能。

嘿,如果您有意见,请提供您的反馈! 保重!