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))}
(キャップ付きpy
でeps
、あまりにも)
あなたはの最後のページで見ることができるように、この文書:
あるgbm
とxgboost
ポアソン回帰のために同じエラーを使用していますか?この逸脱の表現は、で使用されているものとは異なるようですxgboost
。
最後に、ここの B.5.3に基づくポアソン回帰の逸脱度公式 は次のようになります。
2 * mean(y * log(y / py) - (y - py))
それは他の異なる式です。
私はなぜ両方を理解し、他の逸脱性の定式化gbm
をxgboost
使用する助けになれば幸いです。