不均衡なデータのバイナリ分類モデル
-
16-10-2019 - |
質問
次の仕様を含むデータセットがあります。
- 2,821ポジティブの193,176サンプルを備えたトレーニングデータセット
- 82,887のサンプルを備えたデータセットは、673ポジティブを備えています
- 10の機能があります。
バイナリ分類(0または1)を実行したい。私が直面している問題は、データが非常に不均衡であるということです。いくつかの機能エンジニアリングとともにデータを正規化してスケーリングし、いくつかの異なるアルゴリズムを使用した後、これらは私が達成できる最良の結果です。
mean square error : 0.00804710026904
Confusion matrix : [[82214 667]
[ 0 6]]
つまり、6つの正しいポジティブヒットのみです。これは、ロジスティック回帰を使用しています。これが私がこれで試したさまざまなことを紹介します:
- RandomForest、DecisionTree、SVMなどのさまざまなアルゴリズム
- パラメーターを変更すると、関数を呼び出す
- 複合機能を含めるための直観ベースの機能エンジニアリング
今、私の質問は次のとおりです。
- ポジティブヒットの数を改善するために私は何ができますか?
- そのようなケースに過剰なものがあるかどうかをどのように判断できますか? (私はプロットなどを試みました。)
- これが私が持っている可能性のある最良のフィットである場合、どの時点で結論付けることができますか? (673のうち6ヒットだけを考えると悲しいようです)
- ポジティブなサンプルインスタンスの重量を増やすことができるように、パターン認識が改善され、より多くのヒットにつながる方法はありますか?
- どのグラフィカルプロットが、どのパターンが最適なのかについて、外れ値や直感を検出するのに役立ちますか?
私はPythonを使用してScikit-Learnライブラリを使用しており、すべての実装はライブラリ機能です。
編集:
他のいくつかのアルゴリズムの結果は次のとおりです。
ランダムフォレスト分類器(n_estimators = 100)
[[82211 667]
[ 3 6]]
決定ツリー:
[[78611 635]
[ 3603 38]]
解決
バイナリ分類を行っているので、分類のしきい値を調整してみましたか?あなたのアルゴリズムはかなり鈍感に思われるので、私はそれを下げて改善があるかどうかを確認してみます。
いつでも使用できます 学習曲線, 、または1つのモデルパラメーターとトレーニングおよび検証エラーのプロットで、モデルが過剰に適合しているかどうかを判断します。それはあなたの場合に適合しているようですが、それは単なる直感です。
まあ、最終的にそれはあなたのデータセットとあなたが試したさまざまなモデルに依存します。この時点で、さらにテストすることなく、明確な答えはありません。
このトピックの専門家であると主張することなく、あなたが従うかもしれない多くの異なるテクニックがあります(ヒント: Googleの最初のリンク)、しかし、私の意見では、最初にあなたが実際に探しているものを表すように、あなたのコスト関数を慎重に選択することを確認する必要があります。
パターンの直感とはどういう意味かわかりませんが、詳しく説明できますか?
ちなみに、試したさまざまなアルゴリズムでの結果はどうでしたか?彼らは違っていましたか?
他のヒント
データは非常に歪んでいるため、そのような場合、過剰サンプリングデータの後にモデルトレーニングを試すこともできます。
スモートとアダシン データを過剰にサンプリングするために使用できる手法の一部です。