予測が目標である場合、標準化/正規化をトレーニングおよびテストセットに適用する方法は?


47
  1. すべてのデータまたはフォールド(CVが適用されている場合)を同時に変換しますか?例えば

    (allData - mean(allData)) / sd(allData)

  2. trainsetとtestsetを別々に変換しますか?例えば

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(testData)) / sd(testData)

  3. または、トレインセットを変換し、テストセットで計算を使用しますか?例えば

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(trainData)) / sd(trainData)

3は正しい方法だと思います。3が正しい場合、平均が0でないこと、または範囲が[0;の間にないことを心配する必要があります。1]または[-1; 1]テストセットの(正規化)?


これをコード化するエレガントな方法はありRますか?この質問を参照してください:stackoverflow.com/questions/49260862/…–
Boern

回答:


41

3番目の方法は正しいです。正確な理由については、統計学習の要素のすばらしい詳細で説明されています。「クロス検証を行うための間違った正しい方法」セクションと、株式市場の例の「データから学ぶ」の最終章も参照してください。

基本的に、手順1と2は、モデルのトレーニングまたは評価へのホールドアウトデータセットから、応答または将来の情報を漏らします。これにより、モデルの評価にかなりの楽観的なバイアスが生じる可能性があります。

モデル検証のアイデアは、真の応答にアクセスできない場合に、モデルが生産上の決定を下すときの状況を模倣することです。その結果、予測値と比較する以外のテストセットで応答を使用できません。

アプローチの別の方法は、一度に1つのデータポイントにしかアクセスできないことを想像することです(実稼働モデルの一般的な状況)。あなたは何もすることはできませんあなたは素晴らしい疑いで保持する必要があり、この仮定の下で行います。明らかに、できないことの1つは、過去と未来のすべての新しいデータポイントを集計して、データの生産ストリームを正規化することです。したがって、モデル検証に対して同じことを行うことは無効です。

テストセットの平均が0でないことを心配する必要はありません。それは、パフォーマンスの見積もりを偏らせるよりも良い状況です。もちろん、テストが実際にあなたの列車と同じ基礎となる分布から引き出された場合(統計学習の基本的な仮定)、平均はほぼゼロになるはずです。


私もそう思っていました。これを明確にしていただきありがとうございます!
DerTom

Clearly, one thing you cannot do is aggregate over all new data-points past and future to normalize your production stream of data。何故なの?
アンモルシンジャギ

1
@AnmolSinghJaggiその「そして未来」。実際にデータをまだ収集していない場合、それを使用して正規化することはできません。
マシュードゥルーリー

4
y

1
しょーた 明確な説明をありがとう。私は今あなたに同意します。3番目の方法のみが正しいです。
洪水
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.