Как справиться с переполнением времени выполнения в выражении целевой функции геометрической регрессии? - PullRequest
1 голос
/ 14 октября 2019

Я пытаюсь реализовать класс, совместимый с Scikit-learn, для регрессионной модели с геометрическим распределением. Тем не менее, я получаю ошибку переполнения во время выполнения моей целевой функции, которая имеет компонент exp. У меня также есть аналогичная ошибка в моей функции target_grad, которая находит градиент на каждом шаге.

Код моей целевой функции, которая вычисляет целевое значение с использованием параметров, приведен ниже:

        weight = wb[0:-1]
        bias = wb[-1]
        theta = X.dot(weight) + bias
        obj = y.dot(theta)
        obj += np.sum((y + 1).dot((np.log(1 + np.exp(-theta)))))
        obj += self.lam * np.sum(np.square(weight))
        return obj

Я пытаюсь использовать трюк с логарифмической суммой для решения этой проблемы, но я не уверен, как применить этот компонент: np.log(1+np.exp(-theta))

Я также поделился кодом для моей функции градиента, которая также имеет аналогичныепроблема переполнения:

        weight = wb[:-1]
        bias = wb[-1]

        theta = X.dot(weight) + bias
        common_grad = y / (1 + np.exp(-theta)) - 1 / (1 + 
                                                  np.exp(theta))
        dw = X.T.dot(common_grad) - 2 * self.lam * weight
        db = -np.sum(common_grad) - 2 * self.lam * bias
        dwb = np.hstack((dw, db))
        return dwb

Какой должен быть мой подход к решению проблемы опыта в этом сценарии?

1 Ответ

0 голосов
/ 15 октября 2019

Я нашел проблему. В этой строке

obj += np.sum((y + 1).dot((np.log(1 + np.exp(-theta))))),

np.log(1 + np.exp(-theta) взорвалось.

Я решил, используя

-np.log(1/(1 + np.exp(theta))

...