勾配ブースティングによる分類:[0,1]で予測を維持する方法


17

質問

Gradient Boostingを使用してバイナリ分類を行うときに、予測が間隔内にどのように保持されるかを理解するのに苦労しています。[01]

バイナリ分類問題に取り組んでおり、目的関数は対数損失であり、はターゲット変数、は現在のモデルです。yログHmバツ+1yログ1Hmバツy{01}H

新しいモデルがになるように次の弱学習トレーニングする場合、を維持するはずのメカニズムは何ですか?または、より関連性の高い質問かもしれませんが、そのようなメカニズムはありますか?hiHi=Hi1+hiHi[0,1]


私がやっていることの詳細

回帰ツリーを使用して、勾配ブースティングを実装しようとしています。それを避けるために、H + c _ {\ text {max}} hがゼロ以下にならないように、hに係数c \ in [0、c _ {\ text {max}}]を掛けます 1つ、および損失関数を最小化するこの範囲でcを選択します。c[0c最大]H+c最大hc

これは次の問題をもたらします:いくつかのラウンドの後、私は完全に分類された1つのポイントを持ち、勾配の方向に分類子をプッシュするために利用できる最良の分割はこのポイントを1つ上にプッシュしたいので、c = 0を設定しますc=0。したがって、次のすべての反復では、同じ分割と同じc = 0が選択されますc=0

一般的な正則化プラクティスを試しました

  • c\ mu = 0.01を掛けて学習率を減らしμ=0.01ます。これは問題を遅らせるだけです。
  • 特徴空間をサブサンプリングしますが、いくつかのポイントは非常に簡単に分類でき、「これはポジティブですか?」のほぼすべてのボックスにチェックを付けます。フォーム、およびほぼすべての「適切な分割」がこの動作を示しています。

これはパラメーターの問題ではないと思うので、これを修正するためのより適切方法があるはずです。私は実装が壊れている可能性を捨てていませんが、この問題を解決するものは何も見つかりませんでした。

ロジスティック損失のコンテキストで操作しているのは確率でなければなりません。それをどのように回避するのでしょうか?


私の直感は、構築中のモデルをバインドされるようにシグモイド関数に入れて、それでうまくいくと思いますが、他の解決策があるかどうか知りたいです。勾配ブースティングは分類タスクでうまく使用されているように見えるため、「正しい」(つまり正当化を伴う)ソリューションが存在するはずです。[ 0 1 ]H[01]


が他の専門家と相加的に振る舞うという点で、が乗法的であることを要求できます。ln H HlnH
アレックスR.

回答:


21

私は、線形モデルの場合と、GLM(一般化線形モデル)への拡張との類推でこれを考えるのが好きです。

線形モデルでは、線形関数を近似して応答を予測します

y^=β0+β1x1+βnxn

他の状況に一般化するために、モデルの線形部分を応答のスケールに変換するリンク関数を導入します(技術的にこれは逆リンクですが、線形予測子を変換すると、このように考える方が簡単だと思います)応答を線形予測子に変換するよりも、応答に変換します)。

たとえば、ロジスティックモデルはシグモイド(またはロジット)関数を使用します

y^=11+exp((β0+β1x1+βnxn))

ポアソン回帰は指数関数を使用します

y^=exp(β0+β1x1+βnxn)

勾配ブースティングとの類似性を構築するために、これらのモデルの線形部分をブーストされたツリーの合計で置き換えます。したがって、たとえば、ガウスの場合(線形回帰に類似)はよく知られるようになります

y^=ihi

ここで、は弱学習器のシーケンスです。二項の場合は、ロジスティック回帰に似ています(回答で述べたように)hi

y^=11+exp(ihi)

ポアソンブースティングはポアソン回帰に似ています

y^=exp(ihi)

問題は残っています。リンク機能が関係する場合、これらのブーストされたモデルにどのように適合しますか?リンクが恒等関数であるガウスケースの場合、現在の作業モデルの残差に弱学習器を適合させるというよく聞かれるマントラが機能しますが、これは実際にはより複雑なモデルに一般化されません。トリックは、モデルの線形部分の関数として最小化される損失関数を記述することです(つまり、GLM公式の部分)。iβixi

たとえば、二項損失は通常次のように発生します。

iyilog(pi)+(1yi)log(1pi)

ここで、損失は応答と同じスケールの予測値である関数であり、は線形予測子非線形変換です。代わりに、これを関数として再表現できます(この場合、対数オッズとも呼ばれます)p i L i L ipipiLiLi

iyiLilog(1+exp(Li))

次に、この勾配をに関して取得し、ブーストしてこの量を直接最小化します。L

最後にのみ、ユーザーの予測を作成する場合、リンク関数を弱学習器の最終シーケンスに適用して、予測を応答と同じスケールにします。モデルをフィッティングしている間、私たちは常に線形スケールで内部的に作業します。


2
「モデルの線形部分の関数として最小化される損失関数を書く」に同意します。しかし、対数オッズを導き出さずにそれを理解する簡単な方法は、モデルの線形部分、すなわちについて、損失関数をと考えてください、および擬似残差は、損失wrt導関数を作成することです。r(,)i(yilog11+er+(1yi)log(111+er))r
user2830451

@ matthew-drury同様のアイデアが機能するように拡張されている同じアルゴリズムのKクラスの多項セクションに光を追加してください。
MixCoded

6

いくつかの研究の後、私の直感とアレックスR.のコメントは正しいようです。

予測で連続モデルを構築するために、モデルをロジスティック関数(Wikipedia)に入れて、に対して 勾配ブースティングステップは、ロジスティック関数がコスト関数の一部であるかのように、に関する微分を取り、モデルを更新します。[0,1]HHR

11+eH[0,1]
H

これは、論文Additive logistic回帰:ブーストの統計的見解、 Friedman、Hastie、およびTibshiraniによって提案されており、LogitBoost(Wikipedia)AdaBoost(Wikipedia)のロジスティック損失への適応を構築します。

非常に基本的な用語では、シグモイドの追加により線形回帰からロジスティック回帰に移行できる場合、回帰ブースティングを分類ブースティングに変換することもできます。

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