機械学習における不均衡データ対策について
機械学習における不均衡データとは,クラスごとのデータ数が均一でない場合のデータである.
例えば,Aクラスが99件,Bクラスが1件の場合,すべて,Aクラスと予測すれば,100件中99件が正解となりAcurracyは0.99と一見高性能であるが,Bクラスを予測することは難しい.
少数のクラスをきちんと予測することができるように不均衡データを扱う際には,対策を行わなければならない.
実際のAクラス | 実際のBクラス | |
---|---|---|
予測したAクラス | 99 | 1 |
予測したBクラス | 1 | 0 |
対策の種類
- サンプリング
- 異常検知問題として解決
- コスト考慮型学習
- 不均衡データに対応した損失関数の使用
サンプリング
不均衡データ対策として,簡単に行えるのはサンプリングである.
サンプリングには二種類あり,多数のクラスに合わせるオーバーサンプリングと少数のクラスに合わせるアンダーサンプリングがある.
しかし,単純にサンプリングを行うとオーバーサンプリングでは,少数のクラスの重複が発生し過学習につながる可能性がある.
また,アンダーサンプリングでは,多数クラスの重要な特徴量を取りこぼす可能性がある.
オーバーサンプリングで代表的なものとしてSMOTEがある.
SMOTEは図のように新しいベクトルを同じクラスタの2点間から内挿を取って作成するという手法である.
r1 = X1 + d \times gap

異常検知問題として解決
データの不均衡が極端な場合には,異常検知を考える.
データの分布を分析し,その分布を通常とし,逸脱した値を異常値として,クラスを分ける.
1 class SVM,Isolation Forestsといったアルゴリズムがある.
ただし,下記のように分布が重なるような場合には使用することができない.
コスト考慮型学習
機械学習では,誤分類を等しく扱うことが多い.
これを不均衡データに適用すると,
そこで,コスト考慮型学習では,データ数の少ないクラスの誤分類のペナルティを大きくすることにより,再現率を向上させる効果が期待できる.
XGBoostなどのアルゴリズムがある.
不均衡データに対応した損失関数の使用
深層学習では,損失関数の定義を変更することで,不均衡データ対策を行うことが可能.
例えば,Focal Loss関数は,
正解に近い予測値の場合はそれ以上学習する事を抑えることになり、不正解なデータに対する学習をより進める性質がある.
他にClass-Balanced LossやAffinity lossといった損失関数がある.