web-dev-qa-db-ja.com

不均衡なクラスを使用したsklearnロジスティック回帰

Pythonでのsklearnのロジスティック回帰を使用して分類の問題を解決しています。

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

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

私がこれまでに行ったことは、ポジティブな結果のエントリとランダムに選択されたネガティブなエントリの数を選択することによって、バランスの取れたトレーニングセットを構築することです。その後、モデルをこのセットにトレーニングできますが、モデルを変更して元の不均衡な母集団/セットで作業する方法に固執しています。

これを行うための具体的な手順は何ですか? sklearnのドキュメントと例を調べましたが、適切な説明が見つかりませんでした。

21
agentscully

class_weight="auto"分類子に渡そうとしましたか? sklearnのすべての分類子がこれをサポートしているわけではありませんが、一部はサポートしています。 docstringを確認してください。

また、ネガティブな例をランダムに削除したり、ポジティブな例をオーバーサンプリングしたりすることで、データセットのバランスを取り直すことができます(+潜在的にわずかなガウス特徴ノイズを追加します)。

20
ogrisel

@agentscully次の論文を読んだことがありますか?

[SMOTE]( https://www.jair.org/media/953/live-953-2037-jair.pdf )。私は同じ非常に有益なものを見つけました。 Repo へのリンクは次のとおりです。ターゲットクラスのバランスをとる方法に応じて、どちらを使用することもできます

  • 'auto':(は新しいバージョン0.17では非推奨です)または 'balanced'または自分のクラス比{0:0.1、1:0.9}。
  • 'バランス':このモードは、クラス頻度に反比例して重みを調整しますn_samples / (n_classes * np.bincount(y)

さらに洞察が必要な場合はお知らせください。

4
Pramit