高い再現率-不均衡なデータセットの精度が低い


10

現在、サポートベクターマシンでツイートデータセットを分析しているときに問題が発生しています。問題は、バランスの取れていないバイナリクラストレーニングセット(5:2)があることです。これは実際のクラス分布に比例すると予想されます。予測すると、検証セットの少数派クラスの精度が低くなります(0.47)。再現率は0.88です。実際のクラス分布を反映するために検証セットも不均衡であるため、精度を向上させなかった(トレーニングセットで実行される)いくつかのオーバーサンプリングおよびアンダーサンプリングメソッドを使用しようとしました。また、サポートベクターマシンにさまざまなコストを実装しました。もうパフォーマンスが上がらないようです。

私の想起を損なうことなく精度を向上させるために私ができることについて、何かアドバイスはありますか?さらに、なぜ私が偽陰性より陽性の方がはるかに多いのか誰かに手掛かりがありますか(陽性は少数派クラスです)?


3
問題の少なくとも一部は、不適切なスコアリングルールに基づいてモデルを評価することです。
Sycoraxによると、モニカは2016

「オーバーサンプリングとアンダーサンプリング手法」で、SMOTE(合成マイノリティオーバーサンプリングテクニック)を試しましたか?私の経験から、300:1の不均衡なデータセットのマイノリティクラスの分類率が向上しました。
Matthew Lau

こんにちはマシュー、返信ありがとうございます。複数のオーバーサンプリング、アンダーサンプリング、さらにあらゆる種類のSMOTE手法を含むエンセンブル手法まで試しました。
Filippo Scopel

2
scikitを使用しているので、データで勾配ブーストツリーを試してください。箱から出してすぐに、精度の高いAUCが得られるでしょう。ご指摘のとおり、SVCは非常に小さなデータセット以外にはあまり実用的ではありません。
rinspy 2017年

1
こんにちはフィリッポ!私は現在あなたが説明しているのとまったく同じ問題を扱っています:-)通常のすべてのもの(オーバーサンプリング/アンダーサンプリング、SMOTE、クラスウェイト)を試し、いくつかの異なる学習者(SVM、ランダムフォレスト、完全に接続されたニューラルネットワーク)、ただし効果はどこでも同じです:SMOTEまたはクラスの重みを適用した後の少数派クラスの再現率は高いが、精度は非常に低い。最後にあなたは解決策を見つけましたか?
u_b

回答:


6

誰かが偽陰性よりも偽陽性の方がはるかに多い理由を誰かが手掛かりを持っていますか(陽性は少数派クラスです)?よろしくお願いします!

なぜなら、ポジティブは少数派だからです。誤検知になる可能性のある否定的な例はたくさんあります。逆に、偽陰性となる可能性のある陽性例は少なくなります。

Recall = Sensitivityあることを思い出してください=TPTP+FN

感度(真陽性率)は、ROC曲線で視覚化される偽陽性率(1特異度)に関連しています。極端な例として、すべての例を正と呼び、100%の感度と100%のFPRがあります。別の例では、正の例を呼び出さず、FPRが0%で感度が0%です。肯定的なクラスが少数派である場合、FPRが比較的小さい場合(recall = sensitive = TPRが高いために発生する可能性があります)でも、FPの数が多くなります(多くの否定的な例があるため)。

以来

=TPTP+FP

FPRが比較的低い場合でも、否定的な例の数がはるかに多い場合、FPはTPを圧倒します。

または、

C+

O+

PO+|C+=PC+|O+PO+PC+

ポジティブクラスが小さい場合、P(O +)は低くなります。

私の想起を損なうことなく精度を向上させるために私ができることについて、何かアドバイスはありますか?

@rinspyで述べたように、GBCは私の経験ではうまく機能します。ただし、線形カーネルのSVCよりも遅くなりますが、非常に浅いツリーを作成して高速化できます。また、より多くの機能またはより多くの観察が役立つ場合があります(たとえば、現在のすべてのFPで常に何らかの値に設定されている、現在分析されていない機能がある場合があります)。

ROC曲線と検量線をプロットする価値もあります。分類器の精度が低い場合でも、非常に有用な確率推定につながる可能性があります。たとえば、絶対確率がかなり低い場合でも、ハードドライブの故障の可能性が500倍増加する可能性があることを知っているだけでも、重要な情報になる可能性があります。

また、精度が低いということは、本質的に分類子が多くの誤検知を返すことを意味します。しかし、誤検知が安ければ、これはそれほど悪くないかもしれません。


2

試す方法:

アンダーサンプリング:

アンダーサンプリングテクニックを使用して、分類子をトレーニングすることをお勧めします。

不均衡な学習は、不均衡なデータセットに対してscikitの学習スタイルAPIを提供し、サンプリングとアルゴリズムを試すための良い出発点になるはずです。

ライブラリhttps : //imbalanced-learn.readthedocs.io/en/stable/

ランクベースのSVM:

これにより、高精度システムの再現率が向上することが示され、Googleは不適切な広告を検出するために使用します。ぜひ試してみてください。

SVMのリファレンスペーパー:

https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37195.pdf


1

標準的なアプローチは、クラスの頻度に基づいてエラーに重みを付けることです。たとえば、sklearnを使用してPythonで実行している場合:

model = sklearn.svm.SVC(C=1.0, kernel='linear', class_weight='balanced')
model.fit(X, y)

こんにちはmprat、返信ありがとうございます。すでにclass_weight = balancedを使用しています。
Filippo Scopel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.