我正在尝试使用stats.optimize.minimize函数。首先,我正在尝试一些非常简单的事情。
我定义:
lik1 = lambda n,k,p: math.log(stats.binom.pmf(k,n,p))
我试图看看最小化是否会给我正确的MLE,即k/n == p
。
然后我尝试:
optimize.minimize(lik1, 0.5, args=(10,2))
我假设n == 10
和k == 2
,我对p
的猜测(参数x0)是0.5
。我收到以下错误:
fun: nan
hess_inv: array([[1]])
jac: array([ nan])
message: 'Desired error not necessarily achieved due to precision loss.'
nfev: 3
nit: 0
njev: 1
status: 2
success: False
x: array([ 0.5])
我做错了什么?
答案 0 :(得分:0)
一些变化:
代码:
import scipy as sp
import scipy.stats
import scipy.optimize
lik1 = lambda p, n, k: -sp.log(sp.stats.binom.pmf(k, n, p))
res = sp.optimize.minimize(lik1, 0.5, args=(10, 2), method='TNC')
print(res)
输出:
fun: array([ 1.19736175])
jac: array([ 1.22124533e-05])
message: 'Converged (|f_n-f_(n-1)| ~= 0)'
nfev: 10
nit: 4
status: 1
success: True
x: array([ 0.20000019])