我的训练集看起来像
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呢?
答案 0 :(得分:0)
如果要重现结果,则必须在生成的每个线程上设置种子。这是必需的,因为每次生成实例时,每个线程都会有不同的随机数。根据您正在使用的操作系统,每个线程最有可能安排在CPU的单独核心上。这取决于您的OS作业调度程序。关于使用xgboost与nnet,我认为最重要的方面应该是你是否对模型属性感兴趣。我认为,如果你从机器学习开始,xgboost可能比nnet更容易一些。如果计算性能是您最关心的问题,您可能会尝试首先在较小的子集上运行您的问题。
我首先要做的一件事是运行MCA分析,可以在FactoMineR中找到。这将允许您查看每个变量的方差量。您可以删除差异太小的变量,从而加快学习任务的性能。