0

以下は再現可能な例です。基本的に私がやろうとしているのは、5 つの代入データセットを作成し、キャレットの train 関数を使用して各代入データセットに SVM を適用し、caretEnsemble を使用して結果のトレーニング モデルをアンサンブルすることです。最後に、アンサンブル モデルを使用して各テスト セットを予測しています。

ただし、このエラーが発生します

check_bestpreds_obs(modelLibrary) のエラー:
各コンポーネント モデルの観測値が同じではありません。同じ Y 変数でモデルを再トレーニングしてください

とにかく、さまざまなトレーニングモデルをアンサンブルするのに役立つものはありますか?

どんな助けでも本当に感謝しています。

    library(mice)
    library(e1071)
    library(caret)
    library("caretEnsemble")

data <- iris
#Generate 10% missing values at Random 
iris.mis <- prodNA(iris, noNA = 0.1)
#remove categorical variables
iris.mis <- subset(iris.mis, select = -c(Species))

# 5 Imputation using mice pmm

imp <- mice(iris.mis, m=5, maxit = 10, method = 'pmm', seed = 500)

# save 5 imputed dataset.
x1 <- complete(imp, action = 1, include = FALSE)
x2 <- complete(imp, action = 2, include = FALSE)
x3 <- complete(imp, action = 3, include = FALSE)
x4 <- complete(imp, action = 4, include = FALSE)
x5 <- complete(imp, action = 5, include = FALSE)

## Apply the following method for each imputed set 

form <- iris$Sepal.Width # target column
n <- nrow(x1)  # since all data sample are the same length
prop <- n%/%fold
set.seed(7)
newseq <- rank(runif(n))
k <- as.factor((newseq - 1)%/%prop + 1)
CVfolds <- 10


CVrepeats <- 3
  indexPreds <- createMultiFolds(x1[k != i,]$Sepal.Width, CVfolds, CVrepeats)
  ctrl <- trainControl(method = "repeatedcv", repeats = CVrepeats,number = CVfolds, returnResamp = "all", savePredictions = "all", index = indexPreds)




fit1 <- train(Sepal.Width ~., data = x1[k !=i, ],method='svmLinear2',trControl = ctrl)
fit2 <- train(Sepal.Width ~., data = x2[k != i, ],method='svmLinear2',trControl = ctrl)
fit3 <- train(Sepal.Width ~., data = x3[k != i, ],method='svmLinear2',trControl = ctrl)
fit4 <- train(Sepal.Width ~., data = x4[k != i, ],method='svmLinear2',trControl = ctrl)
fit5 <- train(Sepal.Width ~., data = x5[k != i, ],method='svmLinear2',trControl = ctrl)




#combine the created model to a list
      svm.fit <- list(svmLinear1 = fit1, svmLinear2 = fit2, svmLinear3 = fit3, svmLinear4 = fit4, svmLinear5 = fit5)

  # convert the list to cartlist
  class(svm.fit) <- "caretList" 

  #create the ensemble where the error occur.
  svm.all <- caretEnsemble(svm.fit,method='svmLinear2')
4

1 に答える 1

0

例を単純化する必要があります。可動部分が多すぎるため、エラーを取得するためにループは必要ありません。内部 caretEnsemble コントロールの 1 つがこのエラーをスローしていますが、メッセージが明確に定義されていません。

そうは言っても、 caretList には、trainControl各トレーニング モデルで使用する特定のオブジェクトが必要です。そうしないと、モデルごとにリサンプリングが異なり、次のエラーが発生します。

「コンポーネント モデルには、同じリサンプリング戦略がありません」

次の問題は、各トレーニング オブジェクトで異なるデータセットを使用していることです。CaretEnsemble は、同じトレーニング データセットで使用するためのものです。あなたの x1 から x5 は、ベースは同じですが、すべて異なります。これにより、次のエラーが発生します。

「各コンポーネント モデルの観測値が同じではありません。同じ Y 変数でモデルを再トレーニングしてください」

model.list最後に、個別にトレーニングされたモデルからを構築する場合は、 を使用するだけc(model1, model2)です。ドキュメントを見るc.train

于 2016-11-25T15:36:58.570 に答える