首页 文章

关于在R中并行化Caret nnet的问题

提问于
浏览
0

我有一个看起来像的训练集

Name       Day         Area         X    Y    Month Night
ATTACK    Monday   LA           -122.41 37.78   8      0
VEHICLE  Saturday  CHICAGO      -1.67    3.15   2      0
MOUSE     Monday   TAIPEI       -12.5    3.1    9      1

Name 是结果/因变量 .

这是我的代码到目前为止看起来有用的情况

ynn <- model.matrix(~Name , data = trainDF)
mnn <- model.matrix(~ Day+Area +X + Y + Month + Night, data = trainDF)
yCat<-make.names(trainDF$Name, unique=FALSE, allow_=TRUE)

然后我设置调整参数

nnTrControl=trainControl(method = "repeatedcv",number = 3,repeats=5,verboseIter = TRUE, returnData = FALSE, returnResamp = "all", classProbs = TRUE, summaryFunction = multiClassSummary,allowParallel = TRUE)
nnGrid = expand.grid(.size=c(1,4,7),.decay=c(0,0.001,0.1))
model <- train(y=yCat, x=mnn, method='nnet',linout=TRUE, trace = FALSE, trControl = nnTrControl,metric="logLoss", tuneGrid=nnGrid)

当我跑这个,它仍然运行超过20小时后,所以我不得不停止它

我在下面的链接中读到可以使用 registerDoMC 并行重新采样Caret:R caret nnet package in Multicore

但是,这似乎只适用于核心 . 我的机器在每个核心上使用2个核心和2个线程 . 除了使用2核和 registerDoMC(2) 之外,还有办法使用线程获得加速吗?

我也在下面的链接中看到用户必须为每个重新设置样本设置种子:Fully reproducible parallel models using caret我是否还必须为我的代码执行此操作?为什么在前一个链接中没有使用它?如果我使用xgboost而不是nnet呢?

1 回答

  • 0

    如果要重现结果,则必须在生成的每个线程上设置种子 . 这是必需的,因为每次生成实例时,每个线程都会有不同的随机数 . 根据您正在使用的操作系统,每个线程最有可能安排在CPU的单独核心上 . 这取决于您的OS作业调度程序 . 关于使用xgboost和nnet,我认为最重要的方面应该是你是否对模型属性感兴趣 . 我认为如果你从机器学习开始,xgboost可能比nnet容易一些 . 如果计算性能是您最关心的问题,您可能会尝试首先在较小的子集上运行您的问题 .

    我首先要做的一件事是运行MCA分析,可以在FactoMineR找到 . 这样您就可以查看每个变量的变化量 . 您可以删除变量太小的变量,从而加快学习任务的性能 .

相关问题