我正在使用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%)
答案 0 :(得分:2)
您可以使用getModelInfo
向cat
函数添加fit
语句。此外,verboseIter
中有一个trainControl
选项,您在这里忽略。
问题可能是您正在使用trainControl(allowParallel = TRUE)
。这将尝试适应不同核心的重采样迭代,并使用method="parRF"
并行地拟合每个核心。
如果您在计算机上指定了4个核心,则可能会产生16个工作线程。您最好使用method = "rf"
和trainControl(allowParallel = TRUE)
。这也可能意味着您在内存中有17个数据副本。