我有两个数据框(这里是为了重现性)trainFin1
,并且trainFin2
都是从同一个更大的数据集中采样的。
我正在尝试使用包在多处理器rpart
上对它们运行交叉验证。caret
doSNOW
有趣的是,trainFin1
它在 4 个处理器上得到了很好的训练(大约 25 秒内完成)。但trainFin2
似乎只卡在一个处理器上(在 Windows 任务管理器窗口中观察到),即使在将近半小时后我也看不到它完成处理。
我的代码如下
require(caret)
require(rpart)
load("trainFin.RData")
fitControl <- trainControl(method = "repeatedcv", number = 5, repeats = 5)
#setup parallel processing
require(doSNOW)
cl <- makeCluster(4, type = "SOCK")
registerDoSNOW(cl)
#train
set.seed(12345)
firstSet <- train(x = trainFin1[, names(trainFin1) != "Happiness"],
y = trainFin1$Happiness,
method = "rpart2", trControl = fitControl)
set.seed(12345)
secondSet <- train(x = trainFin2[, names(trainFin2) != "Happiness"],
y = trainFin2$Happiness,
method = "rpart2", trControl = fitControl)
stopCluster(cl)
请注意,我避免使用formula
intrain
而是将原始数据提供给它,以避免caret
将我的序数变量转换为虚拟分类变量(请参阅此问题的答案)。当我使用formula
(即train(Happiness ~ ., data = trainFin2, method = "rpart2", trControl = fitControl)
)时,并行处理似乎没有问题。但我想避免formula
按照其他问题使用。
关于如何在不将预测变量转换为分类假人的情况下并行处理这些数据的任何建议?