Сбой Curve_fit при экспоненциальном распределении Вейбулла - PullRequest
0 голосов
/ 25 сентября 2018

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

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 Ответ

0 голосов
/ 25 сентября 2018

Читая документацию для метода 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, полный нулей

...