2013-02-13 19 views
16

私はpythonでsklearnのロジスティック回帰の分類問題を解決しています。クラスが不均衡なsklearnロジスティック回帰

私の問題は一般的なものです。 2つのクラス/結果(正/負または1/0)のデータセットがありますが、このセットは非常に不均衡です。 〜5%のポジティブと〜95%のネガティブがあります。

このような不均衡な問題に対処する方法はいくつかありますが、sklearnパッケージを使用して正しく実装する方法についての良い説明は見つかりませんでした。

私がこれまで行ってきたことは、肯定的な結果とランダムに選択された負のエントリの数が等しいエントリを選択することによってバランスの取れたトレーニングセットを構築することでした。私はこのモデルをこのセットに訓練することができますが、モデルを修正して元の不均衡な母集団/集合を処理する方法に悩まされています。

これを行う具体的な手順は何ですか?私はSklearnの文書や例を書いてきましたが、良い説明は見つかりませんでした。

答えて

16

あなたのclass_weight="auto"分類器に渡そうとしましたか? sklearnのすべてのクラシファイアがこれをサポートするわけではありませんが、いくつかはサポートしています。ドキュメントストリングを確認してください。

また、負のサンプルをランダムに削除したり、正のサンプルをオーバーサンプリングしたりすることで、データセットのバランスをとることができます(+わずかなガウスノイズが追加される可能性があります)。

+0

はい、class_weight = 'auto'はうまく動作します。ビルトイン/ブラックボックスの自動重量を使用しないで、トレーニングセットを再バランスさせるのに利点はありますか?それにもかかわらず、トレーニングセットのバランシングのアプローチをとった場合、バランスのとれていないテストセットに適用するために適合/訓練されたモデルを調整するにはどうすればよいですか? – agentscully

+7

それはブラックボックスではありません。アルゴリズムによって最適化されている経験的な目的関数のサンプルを再重み付けするだけです。 トレーニングが速いため、過大表現のクラスをアンダーサンプリングするのは良いですが、特にモデルがオーバーフィッティング領域にある場合(列車とテストのスコアの間に大きな差がある場合)は、データが欠落しています。 オーバーサンプリングは、再重み付けとは数学的には同等ですが、重複した操作のために遅くなります。 – ogrisel

0

は@agentscully

[打っ](https://www.jair.org/media/953/live-953-2037-jair.pdf)、あなたは以下の論文を読みました。 私は非常に有益な同じことがわかりました。 Repoへのリンクは次のとおりです。 あなたのターゲットクラスのバランスに取り掛かる方法に応じて、どちらかが

  • 「自動」使用することができます(は、新しいバージョン0.17に廃止されました)または「バランス」や、クラスの比率を自分で{指定します0:0.1,1:0.9}である。
  • 「バランスの取れた」:このモードでは、より多くの洞察力が必要な場合n_samples/(n_classes * np.bincount(y)

クラスの周波数に反比例した重みが、私は知ってみましょう調整します。

関連する問題