我在用python实现负对数似然函数时遇到了一些困难
我的负对数似然函数为:
这是我的实现,但我不断收到错误消息: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)
的数据帧
我无法弄清楚我想念的是什么。我的实现不正确吗?任何帮助将非常感激。谢谢
答案 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!
,还应更新代码以使其匹配。