2017-12-07 26 views
2

私はSuperLearner Rパッケージを使用しています。 私は列車とテストセットの両方の予測y値を生成しようとしています。SuperLearner予測誤差

"newX"を定義せずにsuperlearnerモデルをフィッティングした後、MSEを計算して予測値と実際のY値を計算できるように列車セットの予測を取得した後、 "predict"コマンドを使用してテストは、次のコードを実行することで設定します。 :次に

sl.cv<-SuperLearner(Y = label, X = train, 
       SL.library=c("SL.randomForest", "SL.glmnet", "SL.svm"), 
       method = "method.NNLS", verbose=TRUE, cvControl=list(V=10)) 

pred.sl.cv <- predict(sl.cv, newdata=test, onlySL = T) 

を、私は「予測」した後、次のエラーを取得する「オブジェクト$ whichScreenでエラーが発生しました:$演算子は、原子のベクトルには無効です」

私は多くを閲覧SuperLearnerモデルをフィッティングした後に「予測する」方法を学ぶためのオンライン情報源です。他の人はそうです:つまり、フィットされたSuperLearnerモデルのオブジェクト名(この場合は "sl.cv")を入力し、その後に新しいテストセットを置くことです。私は$演算子をタイプしなかった。

なぜこのエラーメッセージが表示されますか?この問題をどうやって解決するのですか?

もう1つ質問があります:オプションとしてcvControl = list(V = 10)を追加しても変更されますか? SuperLearnerモデルのデフォルト設定は、10倍のクロスバリデーションを実行することだと思います。したがって、 "cvControl = list(V = 10)"を削除しても何も変更されません。

私はあなたの助言に感謝します。ありがとうございました!

+0

ラベルと列車のデータはどのように見えますか?これらの行列、ベクトル、int、文字列、またはそれらは何ですか? – JMA

+0

ラベルは数字の点数で、列車のデータは単語行列(単語の袋)です。 –

+0

Y変数ラベルはベクトルです。 X変数は行列です。列車と試験の両方のデータセットは、同じ形式のマトリックスになっています。 –

答えて

0

問題は、列車や試験データに行列を使用していることです。 data.frameを使うべきです。したがって、コードを次のように変更してください。

sl.cv<-SuperLearner(Y = label, X = as.data.frame(train), 
       SL.library=c("SL.randomForest", "SL.glmnet", "SL.svm"), 
       method = "method.NNLS", verbose=TRUE, cvControl=list(V=10)) 

pred.sl.cv <- predict(sl.cv, newdata=as.data.frame(test), onlySL = T) 

また、ラベルがリストであることを確認してください。

+0

ああ、申し訳ありません。 Xをテストデータと列車データに分割する前に、行列をデータフレームに変換しました。したがって、テストセットとトレーニングセットの両方がデータフレームです。だから、私はモデルのフィッティングに問題がありました。しかし、私はラベルをリストに変えようとしますが、それは本当に重要でしょうか? –

+0

リストを変更して問題を解決しましたか? – JMA