有没有办法跟踪并行化随机森林建设过程中的进展?

时间:2015-03-18 10:15:05

标签: r parallel-processing random-forest r-caret

我正在使用R的插入包来为Coursera课程进行机器学习建模。

我目前正在用11k观测和40个特征的数据集构建500棵树的随机森林。

单核实现计算结果花了大约3个小时,我现在正在尝试多核实现(下面的代码)

library(parallel)
library(caret)
library(doParallel)
library(foreach)

cl <- makePSOCKcluster(4)
clusterEvalQ(cl, library(foreach))
registerDoParallel(cl)

trCtrl <- trainControl(allowParallel = TRUE)

modFit2 <- train(classe~ ., data=training, trControl = trCtrl, method="parRF", prox=TRUE, ntree = 500)

现在我的问题是:有没有办法在运行时查看构建模型的进度?是否存在并行化RF的包/实现,例如输出在运行时构建的树的数量的进度?

明显的问题是:为什么我需要知道?我不能等待这一两个小时的结果吗?它不会更快,但可能会慢一点!

我有很多模型需要为我的课程构建,我不想在每个模型上花费几个小时,并想知道它是否正在运行。我想确认它是在建造树木,停止执行并安排它在我运行完整模型的那个晚上。我将为RF以及其他一些时间密集型模型运行不同的参数配置,所以我宁愿花一天时间编写代码,同时让我的计算机在我睡觉时全速运行计算机(我的浏览器是现在几乎不工作:P因为我的RAM和CPU几乎都是100%)

1 个答案:

答案 0 :(得分:2)

您可以使用getModelInfocat函数添加fit语句。此外,verboseIter中有一个trainControl选项,您在这里忽略。

问题可能是您正在使用trainControl(allowParallel = TRUE)。这将尝试适应不同核心的重采样迭代,并使用method="parRF"并行地拟合每个核心。

如果您在计算机上指定了4个核心,则可能会产生16个工作线程。您最好使用method = "rf"trainControl(allowParallel = TRUE)。这也可能意味着您在内存中有17个数据副本。