我正在使用插入符号在大网格上找到最佳调整参数。我发现使用带有插入符号的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)中的错误:读取错误 连接
在这里,是否有更好的方法以良好的速度管理插入符号培训?以下是我的一些想法,可供讨论:
将搜索网格设置为几个小网格并逐个训练。问题:
设置并行节点数,即c1,更小。问题:
答案 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包,以比较五个模型的性能。
嘿,如果您有意见,请提供您的反馈! 保重!