Я пытаюсь реализовать класс, совместимый с 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
Какой должен быть мой подход к решению проблемы опыта в этом сценарии?