0

次のユーザー定義関数を使用して分類を行うために mlr パッケージを使用しようとしていますclasFunc。を使用して関数を呼び出すとき

 clasFunc("classif.lda")

というエラーメッセージが表示されます

model.frame.default(Terms, newdata, na.action = na.pass, xlev = object$xlevels) のエラー: 因子 col1 に新しいレベル 'new level' があります

コードを使用してトレーニングデータとテストデータの要素をマージすることで、それを修正しようとしました

 for(j in 1: ncol(train)){

   if(class(train[,j])=="factor"){
         lvls=   union(levels(train[,j]), levels(test[,j]))
         levels(train[,j]) =lvls
         levels(test[,j]) =lvls

   }

 }

しかし、うまくいかないようです。

makeTask での警告 (type = type、data = data、weights = weights、blocking = blocks、: 列の空の因子レベルが削除されました: col1、col2、col3、col4、col5

これが私の完全なコードです。

clasFunc = function(clsnam){
try(

for( i in 1:5){

  print(paste0("fold ", i))
  train = read.csv(file =paste0("D:\\arff_csv_folds\\real_original\\train", i,".csv"))
  test = read.csv(file =paste0("D:\\arff_csv_folds\\real_original\\test", i,".csv"))

 for(j in 1: ncol(train)){

   if(class(train[,j])=="factor"){
         lvls=   union(levels(train[,j]), levels(test[,j]))
         levels(train[,j]) =lvls
         levels(train[,j]) =lvls

   }

 }

  trainTask <- makeClassifTask(data = train,target = "cls", positive = "yes")
  testTask <- makeClassifTask(data = test, target = "cls",  positive = "yes")

 Clslearn = makeLearner(clsnam, predict.type = "prob")

  trained <- train(Clslearn, trainTask)

  predicted <- predict(trained, testTask)

  print(paste0(clsnam, " fold ", i," test auc:",auc(predicted$data$truth, predicted$data$prob.yes)))

}
)
}

ここに完全な出力があります

[1]「折り1」

makeTask での警告 (type = type、data = data、weights = weights、blocking = blocks、: 列の空の因子レベルが削除されました: col1、col2、col3、col4、col5

[1] 「classif.lda フォールド 1 テスト auc:0.673604162894944」

[1]「たたむ2」

makeTask での警告 (type = type、data = data、weights = weights、blocking = blocks、: 列の空の因子レベルが削除されました: col1、col2、col3、col4、col5

[1] 「classif.lda フォールド 2 テスト auc:0.686717528654292」

[1]「三つ折り」

makeTask での警告 (type = type、data = data、weights = weights、blocking = blocks、: 列の空の因子レベルが削除されました: col1、col2、col3、col4、col5

タイミング停止: 0 0 0

model.frame.default(Terms, newdata, na.action = na.pass, xlev = object$xlevels) のエラー: 因子 col1 に新しいレベル 'new level' があります

どうすればこれを修正できますか?

4

0 に答える 0