1

caret パッケージを使用して gbm モデルを実行しており、doredis パッケージで並列処理を使用して動作させようとしています。バックエンド ワーカーをすべて稼働させることはできますが、最終モデルに再結合するときに問題が発生します。このエラーが発生しています:

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

foreach ループを実行しようとするのはこれが初めてであり (gbm のような複雑な問題は言うまでもなく)、これを理解して実装しようとして問題が発生しています。私は多くの Google 検索を行ってきましたが、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]と、同じエラーが発生しました。

4

1 に答える 1