不均衡なクラスでは、検証/テストデータセットでサンプリングで使用する必要がありますか?

datascience.stackexchange https://datascience.stackexchange.com/questions/8895

質問

私は機械学習の初心者であり、状況に直面しています。私はIpinyouデータセットでリアルタイムの入札問題に取り組んでおり、クリック予測をしようとしています。

問題は、ご存知のように、データセットは非常に不均衡であるということです。1つの肯定的な例(クリック)の約1300のネガティブ例(非クリック)です。

これが私がすることです:

  1. データをロードします
  2. データセットを3つのデータセットに分割します:a =トレーニング(60%)b =検証(20%)c =テスト(20%)
  3. 各データセット(a、b、c)について、各ネガティブクラスで過少サンプリングを行い、5の比率を持つようにします(1つの肯定的な例では5ネガティブ例)。これにより、よりバランスのとれた3つの新しいデータセットが与えられます:a 'b' c '

次に、データセットA 'およびロジスティック回帰でモデルをトレーニングします。

私の質問は次のとおりです。

  1. どのデータセットを検証に使用する必要がありますか? bまたはb '?

  2. どのデータセットをテストに使用する必要がありますか? cまたはc '

  3. 私のモデルを評価するのに最も関連性の高いメトリックはどれですか? F1Scoreはよく使用されているメトリックのようです。しかし、ここでは不均衡なクラス(データセットBとCを使用する場合)により、精度は低く(0.20未満)、F1スコアは低リコール/精度の影響を非常に受けます。 AUCPRまたはAUCROCを使用する方が正確でしょうか?

  4. 学習曲線をプロットしたい場合、どのメトリックを使用する必要がありますか? (検証にB 'データセットを使用した場合、%エラーが関連しないことを知っています)

よろしくお願いします!

よろしく。

役に立ちましたか?

解決

素晴らしい質問...ここにあなたの番号付きの質問に対するいくつかの具体的な答えがあります:

1) Bでは、Bで検証する必要があります。そうしないと、クラスのバランスがどれだけうまく機能しているかわかりません。両方のbで検証することは害になることはありませんでした b`と以下の4の答えに基づいて役立ちます。

2) 以下の4に基づいて、CとC`の両方でテストする必要があります。

3) 私はF1に固執しますが、ROC-AUCを使用すると便利です。これは良い正気チェックを提供します。どちらも不均衡なクラスで役立つ傾向があります。

4) これは本当に難しくなります。これの問題は、最良の方法では、学習曲線がどのように見えるか、または再サンプリングされたデータセットと元のデータセットの両方を再解釈する必要があることです。

学習曲線の古典的な解釈は次のとおりです。

  • オーバーフィット - ラインはまったく一緒になっていません。
  • アンダーフィット - ラインが一緒になりますが、F1スコアが低すぎます。
  • ちょうどいい - ラインには合理的なF1スコアが付いています。

現在、A`でトレーニングしてCでテストしている場合、ラインが完全にまとめられることはありません。 a`でトレーニングをし、c`でテストしている場合、元の問題のコンテキストでは結果が意味がありません。それで、あなたは何をしますか?

答えは、a`とb`でテストするだけでなく、Bでもテストすることです。B`のF1スコアを取得し、B`を使用してからBのF1スコアを確認し、テストを実行して学習曲線を生成しますCの場合、曲線は一緒になりませんが、許容可能なバイアスの感覚があります... F1(b)とF1(b`)の違い。

さて、学習曲線の新しい解釈は次のとおりです。

  • オーバーフィット - 線が一緒になっておらず、F1(b`)-f1(b)よりも遠くにあります。
  • アンダーフィット - ラインは一緒になりませんが、差はF1(b`)-F1(b)未満であり、F1(c)スコアはF1(b)未満です。
  • ちょうどいい - ラインは一緒になりませんが、差はF1(b`)-F1(b)未満です。F1(c)スコアはF1(b)に似ています。

全般的: :不均衡なクラスの場合、上記のすべての厳格な道徳を回避するため、最初に学習アルゴリズムのクラスの重みを学習アルゴリズムのクラスの重みを調整してみてください。 Scikit-Learnのようなライブラリでは非常に簡単で、シグモイド関数や多数決を使用するものでは非常に簡単に手でコードできます。

お役に立てれば!

他のヒント

にとって 1)2), 、 あなたはしたい

1) choose a model that performs well on data distributed as you 
   expect the real data will be 
2) evaluate the model on data distributed the same way

したがって、これらのデータセットでは、クラスのバランスを取る必要はありません。

また、この決定に対処するため、アンダー/オーバーサンプリングの代わりにクラスの重みを使用してみてください。

にとって 3) スコアリングされるメトリックを使用して最適化したい可能性があります(競争の場合)。しかし、それが考慮事項ではない場合、これらのモデルはすべて問題ありません。 F1は低精度の影響を受ける可能性がありますが、それをキャプチャすることを望みます。これは、F1のようなスコアが関連するいくつかのメトリックによって(多数派クラスを推測するなど)、ナイーブモデル(多数派クラスの推測など)がうまくスコアを付けることができる場合です。

はどうかと言うと 4) 最適化するメトリックを表示することには何の問題もありません。

使用される理由を表すデータセットで分類器をテストする必要があります。最良のものは通常、変更されていない分布です。

学習中に、とにかくデータセットを変更してください。

詳細については、参照してください 「バランスの取れた」データセットまたは「代表的な」データセットに行くべきですか?

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top