アンバランスデータセットをたたみ込みニューラルネットワーク(CNN)で分類する方法


10

バイナリ分類タスクに不均衡なデータセットがあり、陽性量と陰性量は0.3%対99.7%です。ポジティブとネガティブの間のギャップは巨大です。MNIST問題で使用されている構造でCNNをトレーニングすると、テスト結果に高い偽陰性率が示されます。また、トレーニングエラーカーブは、最初はいくつかのエポックで急速に低下しますが、その後のエポックでは同じ値のままです。

この問題を処理する方法を教えてください。ありがとう!

回答:


10

これは、ミニバッチを使用する場合、ミニバッチがポジティブのサンプルをまったく含まない可能性が非常に低いためです(ここで比率の比率を考えると)。そのため、ネガティブクラスのパターンを学習し、数回のエポックの後、すべてがネガティブクラスとして分類されます。

このような状況に対処するには、2つの方法があります。

  1. 比率を0.3%〜99.7%とすると、これは非常に歪んだデータセットです。1000サンプルごとに3つの陽性クラスのサンプルはほとんどありません。もっとポジティブなクラスを取得して、データセットのバランスをとる必要があると思います。できるだけ多くの陽性サンプルを入手してください。その後、よりバランスのとれたデータセットを使用できます。たとえば、1000個のポジティブサンプルを取得し、1000個のネガティブサンプルのランダムなセットを選択して、分類子を作成できます。これで、両方のクラスを学習できるはずです。

  2. ミニバッチの後に重みを更新するときは、重み付けされた誤差測定を使用します。重みは、ミニバッチ中に陽性および陰性クラスのサンプル数に比例して更新されます。現在、プロポーションを3:1000に設定した現在の状況では、このトリックでさえ機能しない可能性があります。したがって、より多くのポジティブサンプルを297個取得し、それらを1000個のネガティブサンプルと組み合わせることにより、300:1000のような比率を取得してみることができます。次に、300:1000の比率で、各クラスのサンプル数に基づいてミニバッチ中のエラーに重みを付けます。これはうまくいくはずです。


ここで最適な比率がわかりますか?3時10分ですか、それとも他の何かですか?
donlan

4

ここでCNNを使用する理由は何ですか?不均衡なデータを実際に処理する他のモデルを検討しましたか?

たとえば、次の2つの手法が非常にうまく機能していることがわかりました。

  • SMOTEブースティング付きのランダムフォレストSMOTE調整可能なパーセンテージによって、多数派クラスをアンダーサンプリングし、少数派クラスをオーバーサンプリングするハイブリッドを使用します。トレーニングセット内の応答変数の分布に応じて、これらのパーセンテージを選択します。このデータをRFモデルにフィードします。常にグリッド検索を実行してグリッド検索を実行し、RFに最適なパラメーター設定を見つけます。

  • XGBoost w /ハイパーパラメーター最適化:再度、交差検証またはグリッド検索を実行して、モデルに最適なパラメーター設定を見つけます。さらに、をxgboost使用して、正と負のクラスの重みのバランスをとることができますscale_pos_weight。完全なリストについては、パラメータのドキュメントを参照してください

また、作業しているデータセットのスキューの割合が同じで、で感度スコア0.941と特異度0.71を取得できたことも追加する必要がありますxgboost。これは、モデルが真の陽性を非常に正確に予測しており、私にとっても。

(申し訳ありませんが、コメントを残すことはできず、評判も不十分です。なぜCNNを選択したのかを知りたかったのです)


1

不均衡なデータセットはすべての分野で共通の問題であり、特にコンピュータービジョンやたたみ込みニューラルネットワーク(CNN)が扱う問題には関係しません。

この問題に取り組むには、マイノリティクラスのオーバーサンプリングまたは過半数クラスのアンダーサンプリング(あるいはその両方)によって、データセットのバランスをとる必要があります。おそらく、上で述べたように、良い選択はSMOTE(Synthetic Minority Over-sampling Technique)アルゴリズムでしょう。ここでは、さまざまなオーバーサンプリングアルゴリズムの比較を見つけることができます。Pythonユーザーの場合、imbalanced-learnは、データセットのバランスをとるための多くの便利な手法を実装する優れたライブラリです。

一方、画像を分類しようとしている場合、データセットのサイズを増やすための良い方法は、それを増やすことです(つまり、適切な合成例を作成することにより、たとえば、類似の画像ですが、元の画像に対して小さなビットを回転/シフトします)。マイノリティクラスを強化してより良いバランスを実現すると便利な場合があります。Keras ImageDataGeneratorクラスは、この目的に適したツールです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.