質問: python3を用いて2クラス分類をしています。 データ数は約140ほどしかなく、クラス0が135つ、クラス1が5つほどの偏りがあります。 普通の機械学習では全てを0に分類することで良い精度となっている状態だったため、mbalanced-learnのSMOTE(Synthetic Minority Over-sampling Technique)により均衡データにすることを試みました。 トレーニングデータとテストデータに分けてトレーニングデータにsmoteをかけようと思いましたが、分けた後のトレーニングデータにラベル1の個数が少なすぎて、エラーとなってしまいました。 そこでデータを分ける前の全体にsmoteをかけたのちトレーニングデータとテストデータに分け学習、テストを行ったところ、f値はとてもよくなりました。 ここで質問です。良い精度が得られたのはテストデータに入っているラベル1のデータがトレーニングデータにも共通してしまっているせいなのでしょうか。smoteでラベル1を増やす方法について、全く同じものを複製しているのではないという認識ですが、やはり分ける前の全データに適応してしまうのは誤りでしょうか。
回答: 実際のコードを見ていないので確証はありませんが、手順に問題はないので素直にF値を信じていいと思います。 SMOTEは同じデータを複製していません。この方法だと過学習するという問題を解決するために考案されたものです。具体的な処理は以下です。 1.増幅したいクラス(今回は1)からランダムに1件抽出する。 2.抽出データの近傍にあるデータを判定する。 3.項番1と項番2の間の数値をランダムに決定して変数とする。 今回、クラス1が5件しかないのであまりバリエーションが出ない可能性があります。SMOTE実行後にデータの確認をしたほうがいいでしょう