旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【ディープラーニング】 不均衡データへの対処法

ディープラーニングというより、機械学習全般で起こりうる問題として不均衡データ問題があります。例えばラベル0のデータが99個あり、ラベル1のデータが1個しかない、といったように教師データのバランスが悪い場合、モデルは「とりあえず0と回答すれば99%の正解率が得られる」というようなずる賢い学習をしてしまいます。
この対処法の一つとしてこちらの論文(https://users.cs.fiu.edu/~chens/PDF/ISM15.pdf)ではデータの与え方を工夫しているのですが、自分のケースではかなり有効だったため、論文のpp.3に書いてある疑似コードをメモします。

!!!注意!!!
元の論文では"for N"の外側でCNNのトレーニングを行っていますが、kerasはデフォルトではトレーニングデータをシャッフルするので、内側でトレーニングした方が正例と負例の比率が意図した通りに保たれるので良いと考え意図的に変更しています

1. トレーニングデータを負例(大量)と正例(少量)に分割する
2. 負例をN個のバッチに分割する
3. for エポック
4.     for N
5.         ランダムにNp個の正例をピックアップする
6.         負例、正例を混ぜる
7.         CNNのトレーニング

f:id:ni4muraano:20170607225555p:plain