2017-12-09 21 views
1

私はRで自分のマシンを学習するために多くのキャレットを使用しています。キャレットを使用した予測の行番号を取得する

しかし、私は次のような問題に直面:私は、新しいデータをスコアしたい場合は、私がキャレットでモデルを訓練

  • は、私は、lm()
  • との線形回帰を言う:predict(model, new_data)
  • ときnew_data予測値に欠損値が含まれていますが、予測では予測が返されません。NA

可能ですかそれが不可能であるか、

  • リターン予測+予測に対応するデータフレームの行番号場合

    • リターンNAの予測とNEW_DATAのすべての行の予測:いずれか?

    など。 MLRパッケージのような予測に対応する行を示し、ID列で行います大幅に任意の助け mlr-package: predict with row-id


    ここ enter image description here

    詳細とMLR-予測ページにリンクされています感謝!

  • 答えて

    1

    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は、このトピックに関する多くの研究論文へのリンクです。

    +0

    あなたの答えはねえよ! complete.casesの使用は確かにオプションですが、データセットに欠損値を含む列が含まれていることがありますが、列はトレーニングには使用されません。だから私はあなたのソリューションを使用する前に、まずそれらの列を削除する必要があります。私は、与えられたデータセットAを知ることを望んでいます。これは、Aの予測におけるrownumberは、基礎となるデータセットを変更することなく対応しています。 – Christoph

    +0

    @Christoph - 出力モデルの 'colnames()'でテストデータセットの列をサブセット化し、残りの列で 'complete.cases()'を使用して、列があるテストデータセットからケースを削除しないようにすることができますモデルには存在しません。 –

    +0

    ちょっと、遅い返事をしてください。はい、私はそれを行うことができますが、それはかなりの追加コードを必要とします。そうしないと、あらかじめ見つかっていない行をフィルタリングする必要があります。予測が行われた日付列。私はむしろ、予測が不可能なときには、入力データと同じ長さの予測ベクトル、または予測が対応する行を示すIDを得る。 – Christoph

    関連する問題