電車とテストに分割する前後の代入?


18

N〜5000のデータセットがあり、少なくとも1つの重要な変数で約1/2が欠落しています。主な分析方法は、コックス比例ハザードです。

複数の代入を使用する予定です。また、トレインとテストセットに分割します。

データを分割してから個別に代入するか、または代入してから分割する必要がありますか?

問題があれば、で使用PROC MISASます。


2
重要な変数の50%の欠損値?あー 代入するのではなく、変数の「欠落」カテゴリを作成してみませんか?
RobertF

50%が欠落している変数はありませんが、少なくとも1つで約50%が欠落しています。また、それらは連続的であるため、「欠落」は物事を台無しにします。
ピーターフロム-モニカの復職

あ。代入を使用して緊張します。50%の値が代入された連続変数を持つことと、続きを変換することのメリットについて疑問に思います。「欠損」カテゴリに加えて、非欠損値の動作をキャプチャするのに十分なビンを持つカテゴリ変数
ロバートF 14

連続変数のビニングは好きではありません。
ピーターフロム-モニカを復活

回答:


20

前処理または入力の前に分割する必要があります。

トレーニングとテストセットの区分は、過去の情報があり、将来のまだ未知の情報でテストするモデルを構築している状況を再現しようとする試みです。トレーニングセットが過去に取って代わり、テストセットが将来の場所なので、訓練されたモデルを一度だけテストすることができます。

過去/未来の類似性を念頭に置いて、これは、欠損値の代入など、データを前処理または処理するために行うことを意味します。トレーニングセットのみで行う必要があります。テストセットにも前処理または入力が必要な場合は、トレーニングセットに対して行ったことを思い出すことができるため、両方のセットで同じように実行できます。

コメントから追加:テストデータを使用してトレーニングデータに影響を与える場合、テストデータはモデルの構築に使用されるため、テストデータではなくなり、モデルの公正なテストを提供しません。オーバーフィッティングのリスクがあります。そもそもテストデータを分離するのはこれをやめさせるためです。


「両方のセットで同じ方法で行う」と言うとき、「同じメソッドを使用して、テストセットの欠損データを代入しますが、同じデータを代入しない」という意味ですか。
timwiz

@colorlace過去/未来の類推を使用します。過去にトレーニングセットを使用し、いくつかの値を代入しました。これで、将来的にテストセットを取得し、その値の一部を代入したいとします。テストデータに適用される以前のように(あなたがトレーニングデータから学んだものを組み込むことは自由ですが)あなたはおそらく同じ方法を使用します
ヘンリー・

「トレーニングデータから学んだことを自由に組み込むことができる」場合、それは、代入前に分割しないこととどのように違いますか。
ティムウィズ

1
@colorlace:その最終点はまさに私が言っていることです:トレーニングデータであなたが何もしないことはテストデータによって通知されるべきではありません(アナロジーは未来が過去に影響を与えるべきではないということです)が、あなたがテストデータで行うことトレーニングデータから情報を得ることができます(類推は、過去を使用して未来を予測できることです)
ヘンリー

1
@colorlace-テストデータを使用してトレーニングデータに影響を与える場合、テストデータはモデルの構築に使用されるため、テストデータではなくなり、モデルの公正なテストを提供しません。オーバーフィッティングのリスクがあります。そもそもテストデータを分離したのは、これを思いとどまらせるためです。
ヘンリー、

1

代入を行う前に分割した方が良いと思います。たとえば、欠損値を列平均で補完したい場合があります。この場合、最初にtrain + validデータセットを代入し、次に分割する場合、モデルを構築する前に検証データセットを使用しているため、データ漏えい問題が発生します。

しかし、あなたが尋ねるかもしれません、私が分割した後に帰属するならば、私がクロスバリデーションをする必要があるとき、それはあまりに退屈かもしれません。そのための提案は、sklearnパイプラインを使用することです。それは本当にあなたのコードを単純化し、間違いを犯す可能性を減らします。パイプラインを参照


0

上記に追加するだけで、入力または任意のタイプの前処理の前に分割することもお勧めします。トレーニングデータを使用して何もテストデータによって通知されるべきではありません(類推は、未来が過去に影響を与えるべきではないということです)。その後、テストセットにも前処理または代入が必要な場合、トレーニングセットに行ったことを思い出すことができるため、両方のセットで同じように実行できます(例え、過去を使用して未来を予測することができます) 。

テストデータを使用して何らかの方法でトレーニングデータに影響を与える場合、テストデータはモデルの構築に使用されるため、テストデータではなくなり、モデルの公正なテストを提供しません。フィッティングを超えるリスクがあります。そもそもテストデータを分離するのは、これを思いとどまらせるためです。

rのキャレットパッケージはその設定で非常に便利だと思います。具体的には、その投稿が非常に役立つことがわかりましたhttps://topepo.github.io/caret/model-training-and-tuning.html

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