Tôi muốn biết đó là biểu thức sai lệch trong hồi quy poisson bằng xgboostcông cụ (tăng cường độ dốc cực độ).
Theo mã nguồn, chức năng đánh giá là:
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;
}
}
Vì vậy, độ lệch (trong R) phải là một cái gì đó như:
poisson_deviance <- function(y, py, eps) {
mean(LogGamma(y + 1.0f) + pmax(py, eps) - log(pmax(py, eps)) * y);
}
Tôi có hai câu hỏi ở đây:
1) Làm thế nào LogGammađể dịch sang R?. Tôi đã tìm thấy một số liên kết googling 'loggamma' và dường như mỗi ngôn ngữ hiểu các biểu thức khác nhau cho thuật ngữ này.
2) Làm gì với phơi sáng? Tôi biết chúng ta cần đặt thành xgbMatrix bằng cách sử dụng:
setinfo(xgbMatrix, "base_margin", log(exposure))
Nhưng trong mã của EvalPoissonNegLogLiktôi không bao giờ thấy phần bù nữa, vì vậy điều tôi trừ là điều duy nhất chúng ta cần là thêm phần log(exposure)dự đoán:
poisson_deviance <- function(y, py, exposure, eps) {
mean(LogGamma(y + 1.0f) + pmax(py + log(exposure), eps) - log(pmax(py + 
log(exposure), eps)) * y);
}
Công thức lệch được sử dụng bởi gbmgói R tăng cường độ dốc cho hồi quy poisson là:
poisson_deviance <- function(y, py) {mean(y*py - exp(py))}
(giới hạn pyở epsquá)
Như bạn có thể thấy trong trang cuối của tài liệu này :
Được gbmvà xgboostsử dụng cùng một lỗi cho hồi quy poisson? Biểu hiện của sự lệch lạc này có vẻ khác với những gì được sử dụng trong xgboost.
Cuối cùng, công thức sai lệch trong hồi quy poisson theo B.5.3 ở đây phải là:
2 * mean(y * log(y / py) - (y - py))
đó là công thức khác nhau.
Tôi sẽ đánh giá cao bất kỳ trợ giúp để hiểu lý do tại sao cả hai gbmvà xgboostsử dụng công thức lệch lạc khác.