LoginSignup
3
2

More than 5 years have passed since last update.

SMOTEはデータを分割した後に実行する

Posted at

SMOTEを使うタイミング

今日、プログラムを書いているときに指摘されて、すべての工程をやり直しになるほどの失敗を犯しました。
ほぼ初心者であるための失敗なのかどうか分からないので、私のような不幸物を二度と出さないことを祈りつつ書きます。

私の失敗例

陽性データと陰性データが偏っていたので、SMOTEを使って増やそうとしました。
普通にSMOTEを使って、陽性と陰性のデータ数を合わせて、データインバランスを解消しました。
その後、学習データとテストデータに分割しました。
学習データで機械学習にガンガン学習させて、テストセットで評価しました。

……ここですでに間違いがありました。

SMOTEで作ったデータをテストセットに入れてはいけない

よく考えたら当たり前ですが、実際に存在しないデータで評価したところで何の意味もありませんでした。
テストセットは実際に実在するデータを用いてこそ、汎化性能を評価することができるのであります。

つまり……?

SMOTEを用いるときは、テストセットはインバランス状態になってもいいので、先にデータを学習データとテストデータに分割しておく。
次に、インバランス状態の学習データをSMOTEで増やして、インバランスを解消します。

こうすれば学習データはちゃんと増えているし、テストデータは実際のデータのみで構築することができます。

さっさと気づいていればよかった。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2