caret::train()
を実行する前に値が不足しているケースを識別することができます。これは、データ・セット内の行番号をデフォルトとして使用する行番号を持つ新しい列を作成することです。
library(mlbench)
data(Sonar)
library(caret)
set.seed(95014)
# add row numbers
Sonar$rowId <- rownames(Sonar)
# create training & testing data sets
inTraining <- createDataPartition(Sonar$Class, p = .75, list=FALSE)
training <- Sonar[inTraining,]
testing <- Sonar[-inTraining,]
# set column 60 to NA for some values in test data
testing[48:51,60] <- NA
testing[!complete.cases(testing),"rowId"]
...と出力:
> testing[!complete.cases(testing),"rowId"]
[1] "193" "194" "200" "206"
あなたは、テストデータの行にpredict()
を実行することができ、例としてmlbench
パッケージから設定Sonar
データを使用して
完全なケースを持つセット。再び処理を促進するために、ランダムフォレストモデルと3倍のクロスバリデーションでSonar
データセットを使用してこのような状況に対処するために
fitControl <- trainControl(method = "cv",number = 3)
fit <- train(x,y, method="rf",data=Sonar,trControl = fitControl)
predicted <- predict(fit,testing[complete.cases(testing),])
もう一つの方法は、モデル内の独立変数の欠損値を排除するために帰属戦略を使用することです。 Githubに関する私の記事、Strategies for Handling Missing Valuesは、このトピックに関する多くの研究論文へのリンクです。
あなたの答えはねえよ! complete.casesの使用は確かにオプションですが、データセットに欠損値を含む列が含まれていることがありますが、列はトレーニングには使用されません。だから私はあなたのソリューションを使用する前に、まずそれらの列を削除する必要があります。私は、与えられたデータセットAを知ることを望んでいます。これは、Aの予測におけるrownumberは、基礎となるデータセットを変更することなく対応しています。 – Christoph
@Christoph - 出力モデルの 'colnames()'でテストデータセットの列をサブセット化し、残りの列で 'complete.cases()'を使用して、列があるテストデータセットからケースを削除しないようにすることができますモデルには存在しません。 –
ちょっと、遅い返事をしてください。はい、私はそれを行うことができますが、それはかなりの追加コードを必要とします。そうしないと、あらかじめ見つかっていない行をフィルタリングする必要があります。予測が行われた日付列。私はむしろ、予測が不可能なときには、入力データと同じ長さの予測ベクトル、または予測が対応する行を示すIDを得る。 – Christoph