Реализация функции отрицательного логарифмического правдоподобия в python - PullRequest
0 голосов
/ 04 ноября 2019

У меня возникли трудности с реализацией функции отрицательного логарифмического правдоподобия в python

Моя функция негативного логарифмического правдоподобия имеет вид:

Screenshot of negative Log Likelihood equation

Этомоя реализация, но я получаю сообщение об ошибке: ValueError: shapes (31,1) and (2458,1) not aligned: 1 (dim 1) != 2458 (dim 0)

def negative_loglikelihood(X, y, theta):
    J = np.sum(-y @ X @ theta) + np.sum(np.exp(X @ theta))+ np.sum(np.log(y))
    return J

X - это размер кадра данных: (2458, 31), y - это размер данных: (2458, 1) theta - размер кадра данных: (31,1)

Я не могу понять, чего мне не хватает. Моя реализация неверна как-то? Любая помощь приветствуется. спасибо

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Вы не можете использовать матричное умножение здесь, вам нужно умножить элементы с одинаковым индексом вместе, то есть умножение элементов. Для этой цели правильным оператором является *.

Более того, вы должны транспонировать тэту, чтобы numpy мог транслировать измерение с размером от 1 до 2458 (то же самое для y: 1 транслируется до 31.)

x = np.random.rand(2458, 31)
y = np.random.rand(2458, 1)
theta = np.random.rand(31, 1)

def negative_loglikelihood(x, y, theta):
    J = np.sum(-y * x * theta.T) + np.sum(np.exp(x * theta.T))+ np.sum(np.log(y))
    return J
negative_loglikelihood(x, y, theta)

>>> 88707.699

РЕДАКТИРОВАТЬ: ваша формула содержит y! внутри логарифма, вы также должны обновить свой код для соответствия.

0 голосов
/ 04 ноября 2019

Если вы посмотрите на свое уравнение, вы передаете yixiθ Суммирование по i = 1 в M, так что это означает, что вы должны передать то же самое i по y и x, в противном случае передайте через него отдельную функцию.

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