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

时间:2015-10-06 13:29:53

标签: r foreach parallel-processing redis gbm

我正在使用插入包运行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

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

1 个答案:

答案 0 :(得分:0)

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

另一方面,他指示我告诉其他人去gitihub下载最新的doRedis软件包,因为它比当前的doredis软件包更好,但是没有为CRAN做好准备。

使用此代码安装新的doRedis软件包(请注意,在运行代码之前,请确保已安装Rtools

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