libSVMを使用したSVMのデータの不均衡

Source machine-learning svm libsvm

75%の「true」ラベルと25%の「false」ラベルで構成される不均衡なデータセットを使用している場合、libSVMでガンマパラメータとコストパラメータをどのように設定する必要がありますか?データの不均衡が原因で、予測されたすべてのラベルが「True」に設定されているというエラーが常に発生します。

問題がlibSVMではなく、私のデータセットにある場合、理論的な機械学習の観点からこの不均衡をどのように処理する必要がありますか? *使用している機能の数は4〜10で、250個のデータポイントの小さなセットがあります。
推奨答え
クラスの不均衡は、Cとガンマの選択とは関係ありません。この問題に対処するには、たとえばscikit-learnパッケージ(libsvm上に構築)で使用可能なclass weighting schemeを使用する必要があります。

最適なCgammaの選択は、相互検証を伴うグリッド検索を使用して実行されます。ここでは広範囲の値を試す必要があります。Cの場合、110^15の間で値を選択するのが合理的ですが、gammaの範囲値の単純で優れたヒューリスティックは、すべてのデータポイント間のペアワイズ距離を計算し、このパーセンタイルに従ってガンマを選択することです。分布-各ポイントに1/gammaに等しい分散を持つガウス分布を配置することを検討してください-この分布が重なるようなgammaを選択すると、多くのポイントが得られますが、小さな分散を使用するとオーバーフィットになります。
その他答え #1
不均衡なデータセットには、さまざまな方法で取り組むことができます。クラスバランスは、RBFカーネルのgammaなどのカーネルパラメーターには影響しません。

最も一般的な2つのアプローチは次のとおりです。
  • クラスごとに異なる誤分類ペナルティを使用します、これは基本的にCを変更することを意味します。通常、最小のクラスの重みが高くなります。一般的なアプローチはnpos * wpos = nneg * wnegです。 LIBSVMでは、-wXフラグを使用してこれを行うことができます。
  • 過剰に表現されたクラスをサブサンプリングして、同量のポジティブとネガティブを取得し、バランスの取れたセットの場合と同じようにトレーニングを続行します。基本的に、この方法では大量のデータを無視することに注意してください。これは直感的に悪い考えです。
  • その他答え #2
    少し前に聞いたことがあると思いますが、お役に立てればと思いますので、お答えしたいと思います。

    他の人が述べているように、マイノリティクラスに異なる重みを使用するか、異なる誤分類ペナルティを使用することを検討することをお勧めします。ただし、不均衡なデータセットを処理するためのより賢い方法があります。

    SMOTE ( S ynthetic M inority O ver-sampling Te chnique)アルゴリズムを使用して、マイノリティクラスの合成データを生成できます。これは、いくつかの不均衡なデータセットをかなりうまく処理できる単純なアルゴリズムです。

    アルゴリズムの各反復で、SMOTEはマイノリティクラスの2つのランダムなインスタンスを考慮し、その間のどこかに同じクラスの人工的な例を追加します。アルゴリズムは、2つのクラスのバランスがとれるか、他の基準(たとえば、特定の数の例を追加する)になるまで、データセットにサンプルを注入し続けます。以下に、2Dフィーチャ空間の単純なデータセットに対してアルゴリズムが何を行うかを説明する画像を示します。

    重みを少数派クラスに関連付けることは、このアルゴリズムの特殊なケースです。重み$ w_i $をインスタンスiに関連付けると、基本的に、インスタンスiの上に追加の$ w_i-1 $インスタンスが追加されます。

  • 必要なことは、このアルゴリズムによって作成されたサンプルで初期データセットを拡張し、この新しいデータセットでSVMをトレーニングすることです。 PythonやMatlabなどのさまざまな言語でオンラインで多くの実装を見つけることもできます。
  • このアルゴリズムには他にも拡張機能があります。必要に応じて、さらに多くの資料を紹介できます。
  • 分類子をテストするには、データセットをテストとトレーニングに分割する必要があります。合成インスタンスをトレインセットに追加し(テストセットに何も追加しないでください)、トレインセットでモデルをトレーニングし、最後にでテストします。テストセット。テスト中に生成されたインスタンスを考慮すると、偏った(そして途方もなく高い)精度と再現率が得られます。
  • 関連記事

    Django管理パネルにすべての外部キー関連オブジェクトを一覧表示するにはどうすればよいですか?
    phpからリアルタイムの出力を取得する方法は?
    ランダムフォレスト-確率推定(+ scikit-learn固有)
    低レイテンシの本番環境での勾配ブースティング予測?
    単一パーセプトロン-非線形評価関数