我正在尝试研究如何将“数据挖掘与R - 学习与案例研究”中的一些代码并行化,以使其在我的macbook pro上运行得更快。有问题的具体代码如下。该代码基本上使用相同的数据(DS)并应用六种不同的学习者(例如svm,nnet用于回归和分类等)和少量变体。
完整代码为HERE(在“模型评估和选择”部分的底部附近)。
for(td in TODO) {
assign(td,
experimentalComparison(
DSs,
c(
do.call('variants',
c(list('singleModel',learner=td),VARS[[td]],
varsRootName=paste('single',td,sep='.'))),
do.call('variants',
c(list('slide',learner=td,
relearn.step=c(60,120)),
VARS[[td]],
varsRootName=paste('slide',td,sep='.'))),
do.call('variants',
c(list('grow',learner=td,
relearn.step=c(60,120)),
VARS[[td]],
varsRootName=paste('grow',td,sep='.')))
),
MCsetts)
)
# save the results
save(list=td,file=paste(td,'Rdata',sep='.'))
}
我发现的大多数并行化信息似乎更适用于“应用”之类的事情,其中相同的功能应用于数据的不同子集。这段代码的作用恰恰相反 - 不同的函数应用了相同的数据。
并行外部FOR循环是否更好,以便一次为多个学习者运行内部代码,而不是在循环内并行代码,以便为单个学习者并行不同的窗口方法。
单个迭代的执行在我的macbook上只有2个多小时,其中只有2个核心似乎正在做任何事情(其他两个核心只是空闲)。链接中的实际代码设置为20次迭代......使用我的空闲内核来减少这个
会很棒答案 0 :(得分:2)
在非并行的情况下,将函数传递到lapply
循环很简单。
lapply(c(mean, sum), function(f) f(1:5))
使用R进行并行编程的几个不同系统。下一个示例使用snow
。
library(snow)
cl <- makeCluster(c("localhost","localhost"), type = "SOCK")
clusterApply(cl, c(mean, sum), function(f) f(1:5))
stopCluster(cl)
在每种情况下你应该得到相同的答案!