Предупреждение о времени выполнения в scipy.оптимизируйте.минимизируйте при попытке MLE соответствовать распределению Вейбулла

#python #optimization #scipy #statistics

Вопрос:

У меня есть следующая функция to_minimize , которая должна быть равна логарифмической вероятности набора данных для распределения Вейбулла, усеченного слева на d.

 import numpy as np from scipy.optimize import minimize  def to_minimize(args, data, d=1):  theta, tau = args  n = len(data)  if tau lt;= 0 or theta lt;= 0:  pass  term1 = n * (np.log(tau) - tau * np.log(theta) - (-d / theta) ** tau)  term2 = 0  for x in data:  term2  = (tau - 1) * np.log(x)   (-x / theta) ** tau  return term1   term2  data = numpy.random.rand(100) weibull = minimize(lambda args: -to_minimize(args, data),  x0=np.array((1., 1.)), bounds=np.array([(1e-15, 10), (1e-15, 10)]))  

Насколько я могу судить, единственное, что должно вызвать ошибку формы

 RuntimeWarning: invalid value encountered in double_scalars  

должно быть, если тау или тета равны 0. Но границы этих параметров специально превышают 0, так почему же моя процедура оптимизации завершается сбоем?

Ответ №1:

После вызова np.seterr(all='raise') и дополнительной отладки я заметил, что в моих расчетах произошла ошибка. - В экспоненциальной функции должно быть применено после мощности. В противном случае он попытается извлечь корень из отрицательного числа, которое не будет работать по очевидным причинам.