如何使用python将威布尔分布拟合到数据?

如何使用python将威布尔分布拟合到数据?,python,python-3.x,scipy,Python,Python 3.x,Scipy,我希望使用Python 3.4为一组数据找到最合适的weibull参数 import scipy.stats as ss list1 = [] list2 = [] for x in range(0, 10): list1.append(ss.exponweib.pdf(x, a=1, c=2.09, scale=10.895, loc=0)) list2.append(ss.weibull_min.pdf(x, c=2.09, loc=0, scale=10.895))

我希望使用Python 3.4为一组数据找到最合适的weibull参数

import scipy.stats as ss
list1 = []
list2 = []
for x in range(0, 10):
    list1.append(ss.exponweib.pdf(x, a=1, c=2.09, scale=10.895, loc=0))
    list2.append(ss.weibull_min.pdf(x, c=2.09, loc=0, scale=10.895))
    if list1[x]-list2[x] < .000000001:
        list1[x]=list2[x]

if list1 == list2:
    print("true")

print(ss.distributions.weibull_min.fit(list1, floc=0))
print(ss.distributions.weibull_min.fit(list1, loc=0))
print(ss.distributions.weibull_min.fit(list1, floc=0))
print(ss.distributions.exponweib.fit(list1, 1,1))
print(ss.distributions.exponweib.fit(list1, floc=0, f0=1))
print(ss.distributions.exponweib.fit(list1, floc=0, a=1, f0=1))

没有一个是正确的输入参数。(2.09和10.895)感谢您的帮助。谢谢。

fit()方法的第一个参数是要拟合的分布中的值样本(不是PDF值)。因此,您应该使用
rvs()
方法来生成数据,而不是
pdf()
方法

下面是一个简单的示例,我从
exponweib
分布生成了250个值的样本,然后对该样本使用
fit()。假设在拟合数据时,我知道形状参数
a
必须为1,而
loc
参数必须为0:

In [178]: from scipy.stats import exponweib

In [179]: sample = exponweib.rvs(a=1, c=2.09, scale=10.895, loc=0, size=250)

In [180]: exponweib.fit(sample, floc=0, fa=1)
Out[180]: (1, 2.0822583185068915, 0, 10.946962241403902)
In [178]: from scipy.stats import exponweib

In [179]: sample = exponweib.rvs(a=1, c=2.09, scale=10.895, loc=0, size=250)

In [180]: exponweib.fit(sample, floc=0, fa=1)
Out[180]: (1, 2.0822583185068915, 0, 10.946962241403902)