scipy.optimize.minimize 返回 [inf]
scipy.optimize.minimize returning [inf]
我正在尝试调用 scipy.optimize.minimize
来最小化函数 poissonNegLogLikelihood
,其定义如下:
def poissonNegLogLikelihood(lam, y):
Computes the negative log-likelihood for a Poisson random variable.
Inputs:
lam - float or array. Parameter for the poisson distribution.
y - float or array. Observed data.
Outputs:
log_lik - float. The negative log-likelihood for the data (y) with parameter (lam).
Y = np.atleast_1d(y)
LAM = np.atleast_1d(lam)
log_lik = -np.sum(np.multiply(Y,np.log(LAM)) - gammaln(Y+1) - LAM)
return log_lik
这个函数工作正常,但是当我尝试将它用作 scipy.optimize.minimize
的输入时,它 return [inf]。这就是我传递它的方式:
data = np.array([1.0])
betas = np.array([0])
minimize(poissonNegLogLikelihood,betas,args=(data),jac=False)
我是不是用错了scipy.optimize.minimize
功能?
您正在计算 poissonNegLogLikelihood()
中的 np.log(LAM = beats = [0])
,而 log(0)
是 -inf
。因此,在我看来,您最初的猜测 betas
就是问题所在。您应该使用足够的值进行测试。
我正在尝试调用 scipy.optimize.minimize
来最小化函数 poissonNegLogLikelihood
,其定义如下:
def poissonNegLogLikelihood(lam, y):
Computes the negative log-likelihood for a Poisson random variable.
Inputs:
lam - float or array. Parameter for the poisson distribution.
y - float or array. Observed data.
Outputs:
log_lik - float. The negative log-likelihood for the data (y) with parameter (lam).
Y = np.atleast_1d(y)
LAM = np.atleast_1d(lam)
log_lik = -np.sum(np.multiply(Y,np.log(LAM)) - gammaln(Y+1) - LAM)
return log_lik
这个函数工作正常,但是当我尝试将它用作 scipy.optimize.minimize
的输入时,它 return [inf]。这就是我传递它的方式:
data = np.array([1.0])
betas = np.array([0])
minimize(poissonNegLogLikelihood,betas,args=(data),jac=False)
我是不是用错了scipy.optimize.minimize
功能?
您正在计算 poissonNegLogLikelihood()
中的 np.log(LAM = beats = [0])
,而 log(0)
是 -inf
。因此,在我看来,您最初的猜测 betas
就是问题所在。您应该使用足够的值进行测试。