Normalization時と、交差検証時のデータリークに関する注意書き

前処理で標準化するタイミングを間違えるとdata leakingが発生するので、注意メモ。


参考サイト


Normalization時のデータリークについて

データセットを標準化するとき、trainデータとtestデータをまとめてfitしてしまうと、testデータもfit時に入ってしまい、データリークが生じる。なので、trainデータとtestデータをまず分けて、trainデータでfitさせてから、trainデータとtestデータをそれぞれtransfromする。なので、testデータはtrainデータの平均・標準偏差でスケーリングされる。

そのため、必ずtrainデータとtestデータに分けてからtrainデータでfit()し、別々にスケーリングすること。


交差検証時のデータリークについて

また、交差検証時には、訓練データをtrainデータとtestデータに分割し直すので、交差検証のモデリング時に、testデータの内容が入り込んでしまっている。そのため、sklearnでは、交差検証の個々の分割に対して、train用のパートのみを対象として標準化できるPipelineクラスを提供している。

例)インディアンの成人病関連データによる成人病罹患判別

データ内容

pipelineによる交差検証

best_estimator_には、Standardscalerとlogisticregressionの2ステップからなるパイプラインが格納されている。

logisticregressionにアクセルするには、パイプラインのnamed_steps属性を用いる。

sklearn Pipelineのマニュアル


補:データリークを防ぐ方法として、データを訓練用、テスト用、検証用の3つにわけると確実。(前処理前に、データを訓練・テスト用と、検証用にあらかじめわけてから、訓練・テスト用データで前処理を行い、最後に検証用データでスコアを調べる。)

ブログによると、データを3つに分割する方法は、重回帰分析の時は不要らしいが、Neural Network や 分類木を使うときには、利用を検討した方がいいらしい。

機械学習Tips保管庫

データ解析、機械学習のための学習内容の保管庫。復習用。

0コメント

  • 1000 / 1000