SVMで不均衡なマルチクラスデータセットを処理する最良の方法


9

かなり不均衡なデータにSVMを使用して予測モデルを構築しようとしています。私のラベル/出力には、ポジティブ、ニュートラル、ネガティブの3つのクラスがあります。ポジティブな例では、データの約10〜20%、ニュートラルでは約50〜60%、ネガティブでは約30〜40%になります。クラス間の誤った予測に関連するコストが同じではないため、クラスのバランスをとろうとしています。1つの方法は、トレーニングデータをリサンプリングし、元のデータセットよりも大きい、均等にバランスのとれたデータセットを作成することでした。興味深いことに、そうすると、他のクラスの予測が良くなる傾向があります(たとえば、データのバランスをとると、陽性クラスの例の数が増えましたが、サンプルの予測では、陰性クラスの方が優れていました)。誰もがこれが発生する理由を一般的に説明できますか?ネガティブクラスの例の数を増やすと、サンプルの予測外(たとえば、より良い予測)でポジティブクラスのようなものを取得できますか?

また、誤った分類に異なるコストを課すか、LibSVMでクラスの重みを使用することによって、不均衡なデータに対処する方法に関する他の考えにも非常にオープンです(適切に選択/調整する方法はわかりません)。

回答:


6

各クラスのパターンのマージンスラック変数に異なるペナルティを設定することは、データをリサンプリングするよりも優れたアプローチです。いずれにしても、漸近的にリサンプリングと同等ですが、実装するのが簡単で、離散的ではなく連続的であるため、より細かく制御できます。

ただし、重みの選択は簡単ではありません。原則として、誤分類のコストとトレーニングの違いを考慮した理論上の重み付けを使用して、事前のクラスの運用確率を設定できますが、最適なパフォーマンスは得られません。最善の方法は、交差検証による損失の最小化(誤分類コストを考慮)を介して、各クラスのペナルティ/ウェイトを選択することです。


それを行う方法の自動化された方法はありますか、またはこの機能が組み込まれた学習者は存在しますか?
Vam

私は通常、特定のペナルティセットの損失を評価し、次にNelder-Meadシンプレックスアルゴリズムを使用してそれを最小限に抑えるために、MATLAB関数を記述します。私はこれを内蔵している任意のライブラリを知りません。
Dikran有袋類

@DikranMarsupial 2つのクラスの問題における2つのマージンスラック変数のグリッド検索は、シンプレックスアルゴリズムで実行しているものと同等ですか?
スペイシー2014年

@Tarantulaはい、正確な最適化方法は比較的重要ではありません。重要な点は、アプリケーションの目的で本当に関心のある交差検証統計を最適化していることを確認することです(つまり、運用上の使用で遭遇する同じクラス頻度)そして、もし既知であれば誤分類コストを考慮に入れます)。
Dikran Marsupial 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.