我希望使用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))
我尝试过的所有内容都没有产生输入参数,我无法弄清楚原因.
此代码的输出是:
true
(2.03661, 0, 0.0)
(0., 0.0066645, 0.0)
(2.03661, 0, 0.0)
(0., 3.21197, -3.31162e-27, 0.0)
(1, 2.03661, 0, 0.0)
(1, 2.03661, 0, 0.0)
这些都不是正确的输入参数. (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.08915, 0, 10.3902)
标签:python,python-3-x,scipy
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209011.html原文链接:https://javaforall.net
