ポアソン偏差(xgboost vs gbm vs回帰)


7

xgboostツール(極端なグラディエントブースティング)を使用したポアソン回帰の逸脱度式はどれか知りたいのですが。

ソースコードによると、評価関数は次のとおりです。

struct EvalPoissonNegLogLik : public EvalEWiseBase {

const char *Name() const override {

return "poisson-nloglik";

}

inline bst_float EvalRow(bst_float y, bst_float py) const {

const bst_float eps = 1e-16f;

if (py < eps) py = eps;

return common::LogGamma(y + 1.0f) + py - std::log(py) * y;

}

}

したがって、逸脱度(R)は次のようになります。

poisson_deviance <- function(y, py, eps) {

mean(LogGamma(y + 1.0f) + pmax(py, eps) - log(pmax(py, eps)) * y);

}

ここで2つの質問があります。

1)どのようLogGammaにRに変換しますか?私は「loggamma」をググるリンクをいくつか見つけました、そして、各言語はこの用語の異なる表現を理解しているようです。

2)露出をどうするか?私は私たちがxgbMatrixに設定する必要があることを知っています:

setinfo(xgbMatrix, "base_margin", log(exposure))

しかし、コードでEvalPoissonNegLogLikはオフセットを二度と見たことがないので、控除したのはlog(exposure)予測子にを追加することだけです。

poisson_deviance <- function(y, py, exposure, eps) {

mean(LogGamma(y + 1.0f) + pmax(py + log(exposure), eps) - log(pmax(py + 

log(exposure), eps)) * y);

}

gbmポアソン回帰の勾配ブースティングRパッケージで使用される逸脱度公式は次のとおりです。

poisson_deviance <- function(y, py) {mean(y*py - exp(py))}

(キャップ付きpyeps、あまりにも)

あなたはの最後のページで見ることができるように、この文書

あるgbmxgboostポアソン回帰のために同じエラーを使用していますか?この逸脱の表現は、で使用されているものとは異なるようですxgboost

最後に、ここの B.5.3に基づくポアソン回帰の逸脱度公式 は次のようになります。

2 * mean(y * log(y / py) - (y - py))

それは他の異なる式です。

私はなぜ両方を理解し、他の逸脱性の定式化gbmxgboost使用する助けになれば幸いです。

回答:


9

十分に文書化されていませんが、xgboostのソースコードを調べて、count:poissonの目的について次のことを確認しました。

  1. ログリンクでポアソン尤度を使用します。
  2. base_marginパラメータはリニアスケールではなく、応答スケールです。ブースティングラウンドが進むにつれて、新しいツリーも線形スケールで追加されます。
  3. xgboostポアソンの負の対数尤度の式は正しいですが、ポアソンの逸脱とは少し異なります。ただし、負の対数尤度と偏差は非常に近く、2の因数までは漸近的に同等です。
  4. に設定base_marginすることlog(exposure)は、log(exposure)オフセット項を含めることと同じです。

これらの点についてもう少し詳しく:

LogGammaは、階乗の連続的な拡張であるガンマ関数の対数です。具体的には、整数。このように、。LogGamma項は、完全なポアソン対数尤度での項を表します。(この項は最適化に影響しないため、通常、対数尤度式から省略されます。)Γ(n)=(n1)!nLogGamma(y + 1) = factorial(y)log(y!)

スターリングの近似によれば、です。LogGammaをこの近似値で置き換え、置換(つまり、線形予測子を対数リンクを介して平均で置き換える)すると、が得られます。これは、2の因数が欠落していることを除いて、ほぼ標準のポアソン偏差です。log(y!)ylog(y)ypy=exp(p)y * log(y / py) - (y - py)

GBMで求めた式は、標準のポアソン偏差ではありませんが、加法(y依存)定数までは同じです。紛らわしいことに、pyGBM式のは実際には応答スケールではなく線形スケール予測pyですが、他の式では応答、yの予測平均です。

log(exposure)目的の式に追加する必要はありません。あなたがする必要があるすべては設定されていbase_margin=log(exposure)ます。これにより、ブースティングシリーズの最初の合計項がになりlog(exposure)ます。後続のブースティングラウンドにより項が追加されますが、初期オフセットが削除または変更されることはありません。

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