Как нормализовать оценки вероятности модели в двоичном классификаторе? - PullRequest
1 голос
/ 25 января 2020

Я унаследовал этот код от предыдущего инженера-программиста на работе, которую я только что начал. Он сказал мне, что унаследовал это от кого-то другого. Разработчик описал это мне так: код должен калибровать выходные оценки вероятности в двоичном классификаторе (в данном случае 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 и здесь , но, похоже, это не относится к конкретной проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...