Не получается минимизировать функцию потерь
Пытаюсь минимизировать функцию потерь радикальных оценок для оценки параметров нормального распределения
Мой код выглядит следующим образом:
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
mean = theta[0]
std = theta[1]
x = np.array(x)
x0 = 0
f0 = -(((1/(std*(2*np.pi)**(0.5)))*(np.exp(1))**-(((x0-mean)**2)/(2*(std**2))))**b)**-1
for i in range(x.size):
f = (1/(std*(2*np.pi)**(0.5)))*(np.exp(1))**-(((x[i]-mean)**2)/(2*(std**2)))**b
norma += f0*f
return norma
theta_init = [0, 1]
res = minimize(oro, theta_init, args=x)
res
Но на выходе появляется ошибка:
<ipython-input-244-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-244-b51d0c455468>:11: RuntimeWarning: invalid value encountered in double_scalars
norma += f0*f
<ipython-input-244-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-244-b51d0c455468>:11: RuntimeWarning: invalid value encountered in double_scalars
norma += f0*f
<ipython-input-244-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-244-b51d0c455468>:11: RuntimeWarning: invalid value encountered in double_scalars
norma += f0*f
fun: nan
hess_inv: array([[9.60440620e+02, 2.42216097e+01],
[2.42216097e+01, 8.34817024e-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([166092.13702358, 1772.7446745 ])
Подскажите, пожалуйста, что я делаю не так?
Добавил ограничения по совету:
res = minimize(oro, theta_init, args=x, bounds=((None, None), (1e-4, None)))
Но все равно получается ошибка на выходе:
<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])
