Сбой Curve_fit при экспоненциальном распределении Вейбулла

1

Я пытаюсь использовать

scipy.optimize.curve_fit(func,xdata,ydata)

Для определения параметров экспоненциального распределения вейбулла:

#define exponentiated weibull distribution
def expweib(x,k,lamda,alpha):
      return alpha*(k/lamda)*((x/lamda)**(k-1))*((1-np.exp(-(x/lamda)*k))**(alpha-1))*np.exp(-(x/lamda)*k)


 #First generate random sample of exponentiated weibull distribution using stats.exponweib.rvs
data = stats.exponweib.rvs(a = 1, c = 82.243021128368554, loc = 0,scale = 989.7422, size = 1000 )


#Then use the sample data to draw a histogram
entries_Test, bin_edges_Test, patches_Test = plt.hist(data, bins=50, range=[909.5,1010.5], normed=True)

#calculate bin middles of the histogram
bin_middles_Test = 0.5*(bin_edges_Test[1:] + bin_edges_Test[:-1])

#use bin_middles_Test as xdata, bin_edges_Test as ydata, previously defined expweib as func, call curve_fit method:
params, pcov = curve_fit(weib,bin_middles_Test, entries_Test )

Затем возникает ошибка:

OptimizeWarning: Covariance of the parameters could not be estimatedcategory=OptimizeWarning)

Я не могу определить, на каком шаге есть проблема, может ли кто-нибудь помочь?

Спасибо

  • 1
    Я думаю, curve_fit(weib самом деле должен быть curve_fit(expweib ?!
  • 1
    Вместо того, чтобы подгонять PDF к гистограмме, вы можете подогнать распределение к образцам, используя метод exponweib.fit . Этот метод соответствует распределению с максимальной вероятностью.
Теги:
scipy
curve-fitting
weibull

1 ответ

1

Прочитав документацию по методу curve_fit здесь, https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html, для аргумента метода они упоминали, что the default 'lm' method won't work if the number of observations is less than the number of variables, in which case you should use either of *'trf'* or *'dogbox'* method.

Кроме того, прочитав раздел "pcov" в разделе "Возвращаемые значения", они отметили, что записи будут inf, если the Jacobian matrix at the solution does not have a full rank.

Я попробовал свой код с trf и dogbox и получил массив pconv, полный нулей

Ещё вопросы

Сообщество Overcoder
Наверх
Меню