簡體   English   中英

關於在R中並行化Caret nnet的問題

[英]Questions about parallelizing Caret nnet in R

我有一個訓練集,看起來像

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的重采樣: Multicore中的R caret nnet包

但是,這似乎僅適用於核心。 我的機器使用2個核心,每個核心使用2個線程。 除了使用2個內核和registerDoMC(2)之外,是否還有其他方法可以使用線程加速?

我還在下面的此鏈接中看到,用戶必須為每個重采樣設置種子: 使用插入號完全可復制的並行模型是否還必須對我的代碼執行此操作? 為什么在以前的鏈接中未使用它? 如果我用xgboost代替nnet怎么辦?

如果要重現結果,則必須在產生的每個線程上設置種子。 這是必需的,因為每次生成實例時,每個線程將具有不同的隨機數。 根據您使用的操作系統,每個線程很可能會安排在CPU上的單獨內核上。 這取決於您的OS作業調度程序。 關於使用xgboost和nnet,我認為最重要的方面應該是您是否對模型屬性感興趣。 我認為,如果您是從機器學習開始的,那么xgboost可能比nnet容易一些。 如果您最關心計算性能,則可以先嘗試在較小的子集上運行問題。

我首先要做的一件事就是運行MCA分析,該分析可以在FactoMineR中找到。 這將允許您查看每個變量的方差量。 您可以刪除方差太小的變量,從而加快學習任務的執行速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM