|
# Fused types for input like y_true, raw_prediction, sample_weights. |
|
ctypedef fused floating_in: |
|
double |
|
float |
|
|
|
|
|
# Fused types for output like gradient and hessian |
|
# We use a different fused types for input (floating_in) and output (floating_out), such |
|
# that input and output can have different dtypes in the same function call. A single |
|
# fused type can only take on one single value (type) for all arguments in one function |
|
# call. |
|
ctypedef fused floating_out: |
|
double |
|
float |
|
|
|
|
|
# Struct to return 2 doubles |
|
ctypedef struct double_pair: |
|
double val1 |
|
double val2 |
|
|
|
|
|
# C base class for loss functions |
|
cdef class CyLossFunction: |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyHalfSquaredError(CyLossFunction): |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyAbsoluteError(CyLossFunction): |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyPinballLoss(CyLossFunction): |
|
cdef readonly double quantile # readonly makes it accessible from Python |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyHuberLoss(CyLossFunction): |
|
cdef public double delta # public makes it accessible from Python |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyHalfPoissonLoss(CyLossFunction): |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyHalfGammaLoss(CyLossFunction): |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyHalfTweedieLoss(CyLossFunction): |
|
cdef readonly double power # readonly makes it accessible from Python |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyHalfTweedieLossIdentity(CyLossFunction): |
|
cdef readonly double power # readonly makes it accessible from Python |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyHalfBinomialLoss(CyLossFunction): |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyExponentialLoss(CyLossFunction): |
|
cdef double cy_loss(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double cy_gradient(self, double y_true, double raw_prediction) noexcept nogil |
|
cdef double_pair cy_grad_hess(self, double y_true, double raw_prediction) noexcept nogil |
|
|
|
|
|
cdef class CyHalfMultinomialLoss(): |
|
cdef void cy_gradient( |
|
self, |
|
const floating_in y_true, |
|
const floating_in[::1] raw_prediction, |
|
const floating_in sample_weight, |
|
floating_out[::1] gradient_out, |
|
) noexcept nogil |
|
|