2017-12-04 20 views
1

データセットと同様のロジックから、以下に投稿したコードでエラーが発生しています。私はトレーニングデータの数を増やしてみましたが、解決しませんでした。私はすでにすべてNAの値を除外しました。 model.frame.defaultでR:テストデータで予測したときの新しいレベル

エラー(条件、NEWDATA、na.action = na.action、xlev =オブジェクト$ xlevels): 率yが持つ新しいレベルL、X

set.seed(234) 
d <- data.frame(w=abs(rnorm(50)*1000), 
      x=rnorm(50), 
      y=sample(LETTERS[1:26], 50, replace=TRUE)) 



train_idx <- sample(1:nrow(d), floor(0.8*nrow(d))) 
train <- d[train_idx,] 
test <- d[-train_idx,] 



fit <- lm(w ~x + y, data=train) 
predict(fit, test) 

答えて

1

は既にこのエラーは、私は素直に解決アプローチにジャンプしますポップアップ理由の理由を説明しています

ちょうどpredict声明

#add all levels of 'y' in 'test' dataset to fit$xlevels[["y"]] in the fit object 
fit$xlevels[["y"]] <- union(fit$xlevels[["y"]], levels(test[["y"]])) 

希望する前に、コードの行の下に試してみましょうこれはあなたの問題を解決するでしょう!

+0

これはOPのために何をしているのか説明していません。 – zacdav

+0

@zacdavそれが私がjdobresのレスポンスを参照した理由です。それは彼が説明したものとまったく同じ問題の解決です。つまり 'test'から' fit'モデルへのレベルの追加です。これを持っている。乾杯! – Prem

+0

ありがとう!これは問題を解決しました! – joerna

2

要因と文字データはカテゴリ変数として扱われます。そのため、モデルはこれまでに見たことのないカテゴリラベルの予測を形成することはできません。 「プードル」と「ピットブル」について予測するモデルを作成した場合、モデルに「ゴールデンレトリバー」を指定するとモデルが失敗します。

さらに具体的には、テストセットに含まれるラベル「L」と「X」がトレーニングセットに表示されないというエラーが表示されます。彼らは訓練セットに含まれていないので、テストでこれらのモデルに遭遇したときに何をすべきかをモデルは知らない。 @jdobresとして

関連する問題