我正在尝试最小化Weibull分布式数据(数据https://docs.google.com/spreadsheets/d/1QzWgA04Dy7AKVAOFNG5bjpnYv6-hBSXUygthElH6QwY/edit?usp=sharing)的负对数似然性。
这是我编写的代码:
def weibulngll(theta,X):
n = len(X)
a = theta[0]
l = theta[1]
ngll = -n*(a*np.log(l)+np.log(a))-(a-1)*X.sum()+l**(a)*np.sum(X**a)
return(ngll);
theta = np.array([1,1])
minimize(weibulngll, theta, args = (np.array(X)))
最小化功能不适用于我。最佳参数应为(2,1),但无法获得所需的答案。
我不知道什么是Weibull,但这不是正确的功能。原因如下:让我们看一下行
ngll = -n*(a*np.log(l)+np.log(a))-(a-1)*X.sum()+l**(a)*np.sum(X**a)
a = 1,l =1。因此,-n *(a * np.log(l)+ np.log(a))为零。
这给我们留下了术语:
ngll = -(a-1)*X.sum()+l**(a)*np.sum(X**a)
项-(a-1)* X.sum()也是零,因为a =1。所以(a-1)= 0。
这使我们有了术语:
ngll = l**(a)*np.sum(X**a)
再次l **(a)=1。所以您的整个功能不过是:
ngll = np.sum(X). The sum of all elements of X.
如果要最小化所有元素的总和,软件将寻找负无穷大。您将得到类似-2E-16的信息(在旧计算机中为-2E-8)
返回到绘图板,找到合适的功能。