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