【发布时间】:2021-11-25 12:34:14
【问题描述】:
我期待在下面最小化这个函数来估计正态分布的参数
我的代码如下所示:
import numpy as np
from scipy import stats
from scipy.optimize import minimize
x = [1,2,3,4,5]
def oro(theta, x):
norma = 0
b = 1
u = theta[0]
o = theta[1]
x = np.array(x)
x0 = 0
f0 = -(((1/(o*(2*3.14)**(0.5)))*(2.718)**-(((x0-u)**2)/(2*(o**2))))**b)**-1
for i in range(x.size):
f = (1/(o*(2*3.14)**(0.5)))*(2.718)**-(((x[i]-u)**2)/(2*(o**2)))**b
norma += f0*f
return norma
theta_init = [0, 1]
res = minimize(oro, theta_init, args=x)
res
但最后我明白了:
<ipython-input-81-ee81472a023a>:8: RuntimeWarning: divide by zero encountered in double_scalars
f0 = -(((1/(o*(2*3.14)**(0.5)))*(2.718)**-(((x0-u)**2)/(2*(o**2))))**b)**-1
<ipython-input-81-ee81472a023a>:11: RuntimeWarning: invalid value encountered in double_scalars
norma += f0*f
<ipython-input-81-ee81472a023a>:8: RuntimeWarning: divide by zero encountered in double_scalars
f0 = -(((1/(o*(2*3.14)**(0.5)))*(2.718)**-(((x0-u)**2)/(2*(o**2))))**b)**-1
<ipython-input-81-ee81472a023a>:11: RuntimeWarning: invalid value encountered in double_scalars
norma += f0*f
<ipython-input-81-ee81472a023a>:8: RuntimeWarning: divide by zero encountered in double_scalars
f0 = -(((1/(o*(2*3.14)**(0.5)))*(2.718)**-(((x0-u)**2)/(2*(o**2))))**b)**-1
<ipython-input-81-ee81472a023a>:11: RuntimeWarning: invalid value encountered in double_scalars
norma += f0*f
fun: nan
hess_inv: array([[9.57096191e+02, 2.41349815e+01],
[2.41349815e+01, 8.33412317e-01]])
jac: array([nan, nan])
message: 'Desired error not necessarily achieved due to precision loss.'
nfev: 357
nit: 4
njev: 119
status: 2
success: False
x: array([165623.69347712, 1751.95100725])
请告诉我,我做错了什么?
在 1 个答案后更新(添加界限)。我得到的错误更少,但仍然不成功:
<ipython-input-271-b51d0c455468>:8: RuntimeWarning: divide by zero encountered in double_scalars
f0 = -(((1/(std*(2*np.pi)**(0.5)))*(np.exp(1))**-(((x0-mean)**2)/(2*(std**2))))**b)**-1
<ipython-input-271-b51d0c455468>:11: RuntimeWarning: invalid value encountered in double_scalars
norma += f0*f
fun: nan
hess_inv: <2x2 LbfgsInvHessProduct with dtype=float64>
jac: array([-0.00012861, 0.00018581])
message: 'ABNORMAL_TERMINATION_IN_LNSRCH'
nfev: 75
nit: 2
njev: 25
status: 2
success: False
x: array([250.13040562, 343.06899721])
【问题讨论】:
标签: python function scipy-optimize-minimize