Tôi muốn biết đó là biểu thức sai lệch trong hồi quy poisson bằng xgboost
cô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 EvalPoissonNegLogLik
tô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 gbm
gó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
ở eps
quá)
Như bạn có thể thấy trong trang cuối của tài liệu này :
Được gbm
và xgboost
sử 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 gbm
và xgboost
sử dụng công thức lệch lạc khác.