gpt4 book ai didi

r - 使用 R 并行加速 Bootstrap

转载 作者:行者123 更新时间:2023-12-02 04:32:33 25 4
gpt4 key购买 nike

我想加速我的引导函数,它本身运行得很好。我读到,从 R 2.14 开始,有一个名为 parallel 的包,但我发现这对某人来说非常困难。计算机科学知识匮乏,无法真正实现它。也许有人可以帮忙。

所以这里我们有一个 Bootstrap :

n<-1000
boot<-1000
x<-rnorm(n,0,1)
y<-rnorm(n,1+2*x,2)
data<-data.frame(x,y)
boot_b<-numeric()
for(i in 1:boot){
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
boot_b[i]<-lm(y~x,bootstrap_data)$coef[2]
print(paste('Run',i,sep=" "))
}

目标是使用并行处理/利用我的 PC 的多个内核。我在 Windows 下运行 R。谢谢!

编辑(诺亚回复后)

以下语法可用于测试:

library(foreach)
library(parallel)
library(doParallel)
registerDoParallel(cores=detectCores(all.tests=TRUE))
n<-1000
boot<-1000
x<-rnorm(n,0,1)
y<-rnorm(n,1+2*x,2)
data<-data.frame(x,y)
start1<-Sys.time()
boot_b <- foreach(i=1:boot, .combine=c) %dopar% {
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
unname(lm(y~x,bootstrap_data)$coef[2])
}
end1<-Sys.time()
boot_b<-numeric()
start2<-Sys.time()
for(i in 1:boot){
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
boot_b[i]<-lm(y~x,bootstrap_data)$coef[2]
}
end2<-Sys.time()
start1-end1
start2-end2
as.numeric(start1-end1)/as.numeric(start2-end2)

但是,在我的机器上,简单的 R 代码速度更快。这是并行处理的已知副作用之一,即它会导致 fork 进程的开销,从而增加像这样的“简单任务”的时间?

编辑:在我的机器上,并行代码比“简单”代码花费的时间大约是 5 倍。当我增加任务的复杂性(例如增加 bootn)时,这个因素显然不会改变。所以也许代码或我的机器有问题(基于 Windows 的处理?)。

最佳答案

尝试 boot 包。它经过良好优化,并包含一个并行参数。这个包的棘手之处在于,您必须编写新函数来计算统计数据,该函数接受您正在处理的数据和索引向量以对数据进行重新采样。因此,从定义 data 的位置开始,您可以执行以下操作:

# Define a function to resample the data set from a vector of indices
# and return the slope
slopeFun <- function(df, i) {
#df must be a data frame.
#i is the vector of row indices that boot will pass
xResamp <- df[i, ]
slope <- lm(y ~ x, data=xResamp)$coef[2]
}

# Then carry out the resampling
b <- boot(data, slopeFun, R=1000, parallel="multicore")

b$t 是重采样统计量的向量,并且 boot 有很多很好的方法可以轻松地用它来做事情 - 例如 plot(b )

请注意,并行方法取决于您的平台。在 Windows 计算机上,您需要使用 parallel="snow"

关于r - 使用 R 并行加速 Bootstrap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15978361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com