RキャレットとNA


26

パラメーターの調整機能と統一されたインターフェイスは非常に気に入っていますが、適用された "裸の"モデルでNAが許可されていても、常に完全なデータセット(つまりNAなし)が必要です。そもそも必要ではない面倒な代入法を適用する必要があるという点で、これは非常に面倒です。代入を回避し、キャレットの利点をどのように使用できますか?


3
あなたは常に欠損値で何かをしなければなりません。私はあなたの質問を本当に理解していないと言わなければなりません-あなたは何らかの万能のアプローチを探しています。NAを帰属させたくない場合、NAで何をしたいですか?削除しますか?
ティム

1
そこでNAを残し、NAに対処するためにモデルに任せたいと思います。たとえば、C50でC5.0関数を使用すると、NA自体に対処できますが、この場合はキャレットを使用できません。キャレットのtrain関数では、C5を使用する場合でもデータセットでNAを使用できないためです。上記のC50の0機能。
フレドリック

3
しかし、「モデル」が行うことは、このデータを無視(削除)して、サンプルを小さくすることです。それらの値を推定(入力)します。または、「NA」カテゴリを予測します(たとえば、一部のツリーベースのモデル)。「モデル」に他に何をしてほしいですか?一部のソフトウェアは自動的にこれらの処理を行いますが、コーヒーマシンから「デフォルトの」コーヒーが提供されることを想像してください。
ティム

3
キャレットがNAを許可しないことを確認しますか?列車のヘルプページのデフォルトの例でNAを導入しようとしましたが、メソッドC5.0の列車ではうまく機能しました。ランダムフォレストで失敗しました。
mpiktas

回答:


32

キャレットのtrain関数には、パラメーターna.action = na.passを渡すことができ、前処理は行われません(preProcessを指定せず、デフォルト値NULLのままにします)。これにより、変更されていないNA値が予測関数に直接渡されます(これにより、予測関数を呼び出す前に欠損値を代入するpreProcessを指定する必要があるため、欠損値をサポートしない予測関数が失敗します)。例えば:

train(formula,
      dataset,
      method = "C5.0",
      na.action = na.pass)

この場合、C5.0は欠損値を単独で処理します。


1
これは興味深い議論です。カテゴリ予測子に別のレベルとしてNAを追加する落とし穴は何でしょうか?NAをモデル化または帰属できない場合、つまり不在の存在が実際に有益である場合、単純にNAを追加レベルにすることが理にかなっているように思われますか?
Seanosapien

1は、Xを使用している場合は、内のy仕様のtrain持つna.action = na.passオプションのセットは次のようなエラーが発生します:Something is wrong; all the RMSE metric values are missing
user29609

3

NAの再コーディングを試みましたか?データ外の標準偏差が3を超えるもの(例:-12345)は、NAの場合と同様に、C5.0でそれらを個別に予測することを推奨します。


2

あなたの解決策は、predict ()関数を使用しながら値を代入することだと思います。

詳細?predict.trainを参照してください。

na.omitキャレットが値を代入できるようにするために使用できます。例えば:

    ## S3 method for class 'train':
    predict((object, newdata = NULL, type = "raw", na.action = na.omit, ...)

http://www.inside-r.org/packages/cran/caret/docs/predict.trainから

別の解決策は、データの前処理中に代入することです。

    ## S3 method for class 'default':
    preProcess(x, 
       method = "knnImpute",   # or *bagImpute* / *medianImpute*
       pcaComp = 10,
       na.remove = TRUE,
       k = 5,
       knnSummary = mean,
       outcome = NULL,
       fudge = .2,
       numUnique = 3,
       verbose = TRUE,
       )

http://www.inside-r.org/node/86978から

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.