不均衡なデータセットに対するxgboostのscale_pos_weightの適切な使用法は何ですか?


26

非常に不均衡なデータセットがあります。チューニングのアドバイスに従って使用しようとしていますが、scale_pos_weightどのようにチューニングする必要があるかはわかりません。

私はそれを見ることRegLossObj.GetGradientができます:

if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight

そのため、陽性サンプルの勾配はより影響力があります。ただし、xgboostの論文によると、勾配統計は常に特定のツリーの特定のノードのインスタンス内でローカルに使用さます。

  1. ノードのコンテキスト内で、候補分割の損失削減を評価する
  2. 葉ノードのコンテキスト内で、そのノードに与えられる重みを最適化する

したがって、何が良いかを前もって知る方法はありません。scale_pos_weight正と負のインスタンスの比率が1:100になるノードと、比率が1:2のノードでは、数値が大きく異なります。

ヒントはありますか?


おそらく、5回5回の繰り返しでCVのパラメーターを調整できます。ただし、そのためにはコードを記述する必要がある場合があります。
user2149631

回答:


22

一般に、Scale_pos_weightは、ポジティブクラスに対するネガティブクラスの数の比率です。データセットに負のクラスの観測値が90個、正のクラスの観測値が10個あり、scale_pos_Weightの理想値が9であるとします。次のリンクを確認できます。 http://xgboost.readthedocs.io/en/latest/parameter.html


1
それはマルチクラスデータセットにどのように適用されますか?28クラスはどうですか?それは私には明らかではありません
ガブリエル・チーグラー

1
@Gabrielクラスのウェイトに行く方が良いと思います。one vs restアプローチを使用して、scale_pos_weightを使用できます。たとえば、28クラスのダミーを作成します。次に、それぞれをバイナリ分類問題として使用できます。そうすれば、28の異なるモデルを扱うことになります。
Harshit Mehta

わかりましたが、onevsrestを使用すると、分類子はマルチラベル出力も提供しませんか?28のクラスのうち1つだけではありません
Gabriel Ziegler

どうやって ?。例:クラスはA、B、Cです。したがって、(A / Not A)を分類するためのバイナリ分類器を持つことができ、別の分類器は(B / Not B)になります。「n」個のクラスに対してこれを行うことができます。次に、各分類子に対応するすべての確率の中で、クラスを割り当てる方法を見つける必要があります。
Harshit Mehta

私はマルチラベルにonevsrestを使用することに慣れていますが、試してみます!ありがとう!
ガブリエルチーグラー

3

すべてのドキュメントには、次のように記載されています:

scale_pos_weight = count(negative examples)/count(Positive examples)

実際には、それはかなりうまく機能しますが、データセットが極端に不均衡な場合は、次のようなより保守的なものを使用することをお勧めします。

scale_pos_weight = sqrt(count(negative examples)/count(Positive examples)) 

これは、非常に高い重みによる肯定的な例の乗算の効果を制限するのに役立ちます。


1

私はあなたの質問とフラストレーションを理解していますが、これは分析的に計算できるものではないので、ほとんどのハイパーパラメーターで行うように、@ user2149631としてクロス検証を使用して、データの経験的に適切な設定を決定する必要があります提案された。SelectFPRとXgboostおよびsklearn APIを使用して、機能選択を介してXGBoostのFPRを下げ、さらにscale_pos_weightを0から1.0の間でさらに調整することに成功しました。O.9はうまく機能しているように見えますが、データに応じて、YMMVは他のものと同様に機能します。XGboostにドキュメントを参照する場合、XGboostに送信するときに各データポイントに個別に重み付けすることもできます。sklearnラッパーではなく、APIを使用する必要があります。そうすれば、データポイントの1つのセットに他のセットよりもはるかに高い重みを付けることができ、使用するブースティングアルゴリズムに影響を与えます。


0

また、このジレンマにつまずいて、まだ最善の解決策を探していました。ただし、分類器の最適なパラメーター調整のために、Grid Search(sklearnのGridSearchCV)などのメソッドを使用することをお勧めします。ただし、データセットのバランスが非常に悪い場合は、サンプリング手法(特にランダムオーバーサンプリングとSMOTEオーバーサンプリング手法)を検討し、正と負のクラスの例の比率が異なるデータサンプルのアンサンブルをモデル化する価値があります。これは、不均衡なデータセットの処理に関する便利で便利な(ほぼ包括的な)チュートリアルです。

https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.