在python中实现负对数似然函数

时间:2019-11-04 14:41:52

标签: python gradient-descent log-likelihood

我在用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 :(得分:0)

如果您查看方程式,则将yixiθ传递给i = 1至M,这意味着您应将相同的i传递给y,将x传递给另外的函数。

答案 1 :(得分:0)

您不能在此处使用矩阵乘法,您想要的是将具有相同索引的元素相乘在一起,即逐元素乘法。为此,正确的运算符是*

此外,您必须转置theta,以便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!,还应更新代码以使其匹配。