【发布时间】:2015-11-14 09:58:06
【问题描述】:
我目前正在尝试使用 BLB bootstrap 计算模型估计器,并且希望并行进行。当我不并行执行时,我的代码可以正常工作。当我并行计算时的问题是我从每个核心得到的结果都包含 NA 值。我不明白如何获得 NA 值,而 Iris 数据集的值根本不包含 NA。 这是我正在使用的代码:
library(doParallel)
library(itertools)
num_of_cores <- detectCores()
cl <- makePSOCKcluster(num_of_cores)
registerDoParallel(cl)
attach(iris)
data <- iris
coeftmp <- data.frame()
system.time(
r <- foreach(dat = isplitRows(data, chunks=num_of_cores),
.combine = cbind) %dopar% {
BLBsize = round(nrow(dat)^0.6)
for (i in 1:400){
set.seed(i)
# sampling B(n) data points from the original data set without replacement
sample_BOFN <- dat[sample(nrow(dat), size = BLBsize, replace = FALSE), ]
# sampling from the subsample with replacment
sample_bootstrap <- sample_BOFN[sample(nrow(sample_BOFN), size = nrow(sample_BOFN), replace = TRUE), ]
bootstrapModel <- glm(sample_bootstrap$Petal.Width ~ Petal.Length + Sepal.Length + Sepal.Width, data = sample_bootstrap)
coeftmp <- rbind(coeftmp, bootstrapModel$coefficients)
}
#calculating the estimators of the model with mean
colMeans(coeftmp)
})
【问题讨论】:
-
由于我不知道你有多少个核心,我不确定这个问题是否能解决你的问题。但它可能:stackoverflow.com/questions/33221779
-
另外,我不清楚如果你是引导程序,你为什么对
sample_BOFN进行采样而不用替换。但是您似乎也没有使用sample_BOFN,因此您可能希望从(示例)代码中删除它。 -
我正在尝试实现 BLB 引导程序,该引导程序需要从子样本中采样而无需替换。所以这就是为什么。
-
实际上对该链接的引用并没有帮助,因为我有 4 个内核,并且我正在使用迭代器将我的数据集分成 4 个块。我想使用 BLB 引导程序在每个核心上训练模型。我不明白我怎么可能得到 NA 值? (顺便说一句,我在 MAC 上运行代码)
-
如果你只使用 1 个核心,你会得到
NAs 吗?
标签: r parallel-processing cluster-computing parallel-foreach