Я унаследовал этот код от предыдущего инженера-программиста на работе, которую я только что начал. Он сказал мне, что унаследовал это от кого-то другого. Разработчик описал это мне так: код должен калибровать выходные оценки вероятности в двоичном классификаторе (в данном случае Logisti c регрессия), который обычно распределяется вокруг показателя 500. Оценки будут между 1 и 1000.
В коде, который у меня есть, есть комментарии и сказано, что это реализация обобщенной кривой калибровки Logisti c, однако я не совсем понимаю, что она делает, и ищу более простой способ ее выполнения sh что делается.
Код:
python
class GenLogCalibration:
"""A Generalized Logistic Calibration curve, built to map input review
rates (between 0 and 100%) to the appropriate output score.
"""
def __init__(self):
"""Initialize calibration parameters"""
self.A = 1.038
self.K = -0.042
self.Q = 18.046
self.B = 0.0069
self.M = 100.76
self.V = 1 #must be > 0. Use 1 to make fn invertible
self.min_score = 1
self.max_score = 990
def get_score(self, review_rate):
"""Return the score value for the input review_rate. Should be in
[0,1] range"""
assert 0 <= review_rate <= 1
score = ((self.B * self.M) - math.log((review_rate - self.K) /
(self.Q * (self.A - review_rate)))) / self.B
# cap scores at desired min and max value
if score > self.max_score: score = self.max_score
if score < self.min_score: score = self.min_score
# round score to nearest integral value
return round(score)
def get_review_rate(self, score):
"""Return the review rate that best corresponds to the given calibrated
score"""
if score > self.max_score: score = self.max_score
if score < self.min_score: score = self.min_score
return self.A + (self.K - self.A) / (1 +
self.Q * math.exp(- self.B * (score - self.M)))**(1/self.V)
Может ли кто-нибудь указать мне правильное направление на то, куда я могу посмотреть, чтобы понять, что такое происходит?
Я посмотрел на реализации калибровочной кривой в sci-kit learn и здесь , но, похоже, это не относится к конкретной проблеме.