有关在R

时间:2016-02-21 17:23:27

标签: r multithreading parallel-processing r-caret

我的训练集看起来像

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 registerDoMC(2)并行重新采样Caret:R caret nnet package in Multicore

然而,这似乎只适用于核心。我的机器在每个核心上使用2个核心和2个线程。除了使用2核和System.out.println("Your sum is "+sum); 之外,有没有办法使用线程获得加速?

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

1 个答案:

答案 0 :(得分:0)

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

我首先要做的一件事是运行MCA分析,可以在FactoMineR中找到。这将允许您查看每个变量的方差量。您可以删除差异太小的变量,从而加快学习任务的性能。