次の仕様のデータセットがあります。
- 2,821陽性の193,176サンプルのトレーニングデータセット
- 673個の陽性の82,887個のサンプルを含むテストデータセット
- 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]]