XGBoost出力は極端になる傾向があります


15

私は現在リスク予測にXGBoostを使用していますが、バイナリ分類部門ではうまく機能しているようですが、確率出力はかなりずれています。つまり、観測値の特徴の値を少しだけ変更すると、確率が高くなります。 0.5から0.99への出力ジャンプ。

0.6〜0.8の範囲の出力はほとんど見えません。すべての場合において、確率は0.99または1未満です。

Platt ScalingやLogistic Correctionなどのトレーニング後のキャリブレーション方法は知っていますが、XGBoostトレーニングプロセスで調整できることがあるかどうか疑問に思っていました。

私はFFIを使用してさまざまな言語からXGBoostを呼び出します。そのため、他のキャリブレーションライブラリを導入せずにこの問題を修正できると便利です。たとえば、評価メトリックをAUCからログ損失に変更します。


トレーニングセットに適用したスケーリングがテストセットにも正しく適用されていることを確認しましたか?
bradS 2018年

同じ問題があります。何か役立つことはありますか?一時的な解決策として、確率にソートし、発生に基づいて0から1に正規化しましたが、良い解決策とは思いません。
Ilker Kurtulus

モデルにはカテゴリカル変数がいくつありますか?
ngopal

XGBoostような他のバニラ手法と比較すると、実際には外れ値に対して非常に堅牢SVMです。
Piotr Rarus-19年

回答:


1

XGBoostは、確率で自然に調整されません。あなたは次のようなものを使う必要があります:

objective = "binary:logistic"

モデルの出力が確率として解釈できることを確認します。それ以外の場合は、インスタンスのランク付けにのみ使用できるスコアのみを取得できます。ほとんどのパフォーマンスメトリックはスコアで計算できるため、「実際の」確率の代わりに(適切なパフォーマンスメトリックに関連する)確率のように見えるものを使用することはよくある間違いです。

モデルの不安定性(ここでは、説明変数のわずかな変化が予測を大きく変化させるという意味で)と同様に、キャリブレーションプロセス全体を再確認する必要があります。モデルが適合しすぎないようにするために使用されるメトリック。


0

はい、反復回数が増加するにつれて、ログ損失分布を確認します。最後のブースト反復の前に急上昇し始めた場合、それは過剰適合です。


0

最初に尋ねるのは、「正/負の比率とは何ですか?」です。クラスが非常に不均衡だったときに私が同じような問題を何度も抱えていたからです。その場合は、データセットのバランスをとるかscale_pos_weight、XGboostのパラメーターで遊んでみてください。50/50クラス比の場合、確率は多かれ少なかれ正規化される可能性があります。

また、同時にオーバーフィットしている可能性が高いです。学習率、サンプリングパラメーター、正則化パラメーター(reg_alpha、reg_lambda)を調整してみてください。


-1

まず、XGBoostやLightGBMなどのツリーベースのアルゴリズムを使用する場合、データが十分に大きいことを確認する必要があります。このような突然の変化は、過剰適合を示す場合があります。(10,000サンプル以上、経験則)

次に、カーディナリティはどうですか。3〜4個の機能がある場合は、機能の変更によってそのような影響が生じることが予想されます。

3番目に、ハイパーパラメーターの選択は何ですか?ツリーベースのモデルは、パラメーターの変化に非常に敏感です。ハイパーパラメータ調整を慎重に実装してください。

最後に、バイナリ分類を扱う場合。エラー指標は非常に重要になります。バイナリログの損失とバイナリエラーの組み合わせを実行できます(XGBoostでは複数を選択できます)。また、XGBoostのtrainメソッドでearly_stopping_rounds = Nを選択して、早期停止を実装してください。Nは反復の選択です。これにより、損失が減少しなくなる合理的な時点でアルゴリズムが早期に停止し、過剰適合を回避できます。

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