Ich würde gerne wissen, welches der Abweichungsausdruck in der Poisson-Regression ist, der mit einem xgboost
Werkzeug verwendet wird (extreme Gradientenverstärkung).
Laut Quellcode lautet die Auswertungsfunktion:
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;
}
}
Abweichung (in R) sollte also so etwas sein wie:
poisson_deviance <- function(y, py, eps) {
mean(LogGamma(y + 1.0f) + pmax(py, eps) - log(pmax(py, eps)) * y);
}
Ich habe hier zwei Fragen:
1) Wie LogGamma
in R übersetzen ?. Ich habe mehrere Links gefunden, die 'loggamma' googeln, und es scheint, dass jede Sprache unterschiedliche Ausdrücke für diesen Begriff versteht.
2) Was tun mit Belichtungen? Ich weiß, wir müssen auf xgbMatrix setzen mit:
setinfo(xgbMatrix, "base_margin", log(exposure))
Aber im Code von habe EvalPoissonNegLogLik
ich den Offset nie wieder gesehen. Was ich also abgezogen habe, ist, dass wir nur das log(exposure)
zu den Prädiktoren hinzufügen müssen :
poisson_deviance <- function(y, py, exposure, eps) {
mean(LogGamma(y + 1.0f) + pmax(py + log(exposure), eps) - log(pmax(py +
log(exposure), eps)) * y);
}
Die Abweichungsformel, die vom Gradientenverstärkungs- gbm
R-Paket für die Poisson-Regression verwendet wird, lautet:
poisson_deviance <- function(y, py) {mean(y*py - exp(py))}
(verkappte py
bei eps
zu)
Wie Sie auf der letzten Seite dieses Dokuments sehen können :
Ist gbm
und xgboost
die gleichen Fehler für poisson Regression? Dieser Ausdruck der Abweichung scheint anders zu sein als das, was in verwendet wird xgboost
.
Schließlich sollte die Abweichungsformel in der Poisson-Regression gemäß B.5.3 hier lauten:
2 * mean(y * log(y / py) - (y - py))
das ist eine andere Formel.
Ich würde mich über jede Hilfe freuen, um zu verstehen, warum beides gbm
und xgboost
andere Abweichungsformulierungen verwendet werden.