8000 ENH add common loss function submodule · scikit-learn/scikit-learn@a8692c3 · GitHub
[go: up one dir, main page]

Skip to content

Commit a8692c3

Browse files
committed
ENH add common loss function submodule
1 parent 808997c commit a8692c3

File tree

5 files changed

+3572
-0
lines changed

5 files changed

+3572
-0
lines changed

sklearn/_loss/_loss.pxd

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# cython: language_level=3
2+
3+
import numpy as np
4+
cimport numpy as np
5+
6+
np.import_array()
7+
8+
9+
# Fused types for y_true, y_pred, raw_prediction
10+
ctypedef fused Y_DTYPE_C:
11+
np.npy_float64
12+
np.npy_float32
13+
14+
15+
# Fused types for gradient and hessian
16+
ctypedef fused G_DTYPE_C:
17+
np.npy_float64
18+
np.npy_float32
19+
20+
21+
# Struct to return 2 doubles
22+
ctypedef struct double2:
23+
double val1
24+
double val2
25+
26+
27+
# C base class for loss functions
28+
cdef class cLossFunction:
29+
cdef double closs(self, double y_true, double raw_prediction) nogil
30+
cdef double cgradient(self, double y_true, double raw_prediction) nogil
31+
cdef double2 cgrad_hess(self, double y_true, double raw_prediction) nogil
32+
33+
34+
cdef class cHalfSquaredError(cLossFunction):
35+
cdef double closs(self, double y_true, double raw_prediction) nogil
36+
cdef double cgradient(self, double y_true, double raw_prediction) nogil
37+
cdef double2 cgrad_hess(self, double y_true, double raw_prediction) nogil
38+
39+
40+
cdef class cAbsoluteError(cLossFunction):
41+
cdef double closs(self, double y_true, double raw_prediction) nogil
42+
cdef double cgradient(self, double y_true, double raw_prediction) nogil
43+
cdef double2 cgrad_hess(self, double y_true, double raw_prediction) nogil
44+
45+
46+
cdef class cPinballLoss(cLossFunction):
47+
cdef readonly double quantile # readonly makes it inherited by children
48+
cdef double closs(self, double y_true, double raw_prediction) nogil
49+
cdef double cgradient(self, double y_true, double raw_prediction) nogil
50+
cdef double2 cgrad_hess(self, double y_true, double raw_prediction) nogil
51+
52+
53+
cdef class cHalfPoissonLoss(cLossFunction):
54+
cdef double closs(self, double y_true, double raw_prediction) nogil
55+
cdef double cgradient(self, double y_true, double raw_prediction) nogil
56+
cdef double2 cgrad_hess(self, double y_true, double raw_prediction) nogil
57+
58+
59+
cdef class cHalfGammaLoss(cLossFunction):
60+
cdef double closs(self, double y_true, double raw_prediction) nogil
61+
cdef double cgradient(self, double y_true, double raw_prediction) nogil
62+
cdef double2 cgrad_hess(self, double y_true, double raw_prediction) nogil
63+
64+
65+
cdef class cHalfTweedieLoss(cLossFunction):
66+
cdef readonly double power # readonly makes it inherited by children
67+
cdef double closs(self, double y_true, double raw_prediction) nogil
68+
cdef double cgradient(self, double y_true, double raw_prediction) nogil
69+
cdef double2 cgrad_hess(self, double y_true, double raw_prediction) nogil
70+
71+
72+
cdef class cBinaryCrossEntropy(cLossFunction):
73+
cdef double closs(self, double y_true, double raw_prediction) nogil
74+
cdef double cgradient(self, double y_true, double raw_prediction) nogil
75+
cdef double2 cgrad_hess(self, double y_true, double raw_prediction) nogil

0 commit comments

Comments
 (0)
0