gpt4 book ai didi

r - R中的doRedis/foreach GBM并行处理错误

转载 作者:可可西里 更新时间:2023-11-01 10:59:05 24 4
gpt4 key购买 nike

我正在使用 caret 包运行 gbm 模型,并尝试使用 doredis 包的并行处理使其工作。我可以让后端工作人员全部启动并运行,但是当他们重新组合成最终模型时遇到问题。我收到此错误:

    Error in foreach(j = 1:12, .combine = sum, .multicombine = TRUE) %dopar%  : 
target of assignment expands to non-language object

这是我第一次尝试运行 foreach 循环(更不用说像 gbm 这样的复杂问题了)并且在尝试理解和实现它时遇到了问题。我做了很多谷歌搜索,没有发现任何关于用 gbm 实现 foreach 的信息,任何帮助理解 foreach 的帮助将不胜感激。这是我的代码:

    set.seed(825)
library(caret)
require(foreign)

data <- read.spss("C:\\Users\\cc\\Documents\\mydata.sav",use.value.labels=TRUE, to.data.frame = TRUE)
getOption("max.print")
options(max.print = 99999999)
set.seed(825)
start.time <- Sys.time()
x <- data[, -162]
y <- data[, 162]
fitControl = trainControl(method = "cv", number = 8, allowParallel=TRUE)
gbmGrid <- expand.grid(interaction.depth = c(49), n.trees = (1:2), shrinkage = c(0.03), n.minobsinnode = 50)


require(doRedis)
registerDoRedis('jobs')
options('redis:num'=TRUE)
foreach(j=1:12,.combine=sum,.multicombine=TRUE) %dopar%

gbmFit <- train(x=x,y=y,"gbm", tuneGrid = gbmGrid, trControl=fitControl)
gbmFit
summary(gbmFit)

end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken

更新根据关于使用某种数据集进行复制的建议,我将 mydata 切换为 Iris 数据集 data <- iris并将 X 和 Y 更改为 x <- data[, -5] y <- data[, 5]并且发生了同样的错误。

最佳答案

我找到了答案!我与redis的创建者取得了联系,而redis的创建者又与caret的创建者取得了联系。似乎插入符号会自动处理拆分作业,因此不需要 foreach 循环。只需完全删除该行,它就会完美运行。

在旁注中,他指示我告诉其他人去 gitihub 下载最新的 doRedis 包,因为它比当前的 doredis 包更好,但不要为 CRAN 退出做好准备。

使用此代码安装新的 doRedis 包(请注意,在运行代码之前请确保您还安装了 Rtools)

install.packages("devtools")
devtools::install_github("bwlewis/doRedis")

关于r - R中的doRedis/foreach GBM并行处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32971288/

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