因为我正在拟合威布尔分布,并在其他问题中找到Fitting distribution with fixed parameters in SciPy
使用floc=0
和loc=0
weibull_params = 1, 2.0755160030790547, 0, 16.273031221223277
data = sp.stats.exponweib.rvs(*weibull_params, size=50000)
data = data.astype(int)
x = linspace(0, 55)
weibull_params1 = sp.stats.weibull_min.fit(data)
weibull_params2 = sp.stats.weibull_min.fit(data, loc=0)
weibull_params3 = sp.stats.weibull_min.fit(data, floc=0)
for weibull_params, line_style in zip([weibull_params1, weibull_params2, weibull_params3],['-','--','-.']):
plt.figure()
plt.hist(data, bins=arange(0,55),alpha=0.5, normed=True)
y_weibull = sp.stats.weibull_min.pdf(x, *weibull_params)
plot(x, y_weibull, line_style, color='black')
print(weibull_params)
会生成像这样的Weibull:
Weibull params:
(0.50240047370945606, -4.501644985259555e-28, 2.9918077253782287)
(2.0610053128948245, -0.45099484072568979, 16.299110670854041) #loc=0
(1.0, 0, 1.05) #floc=0
有什么区别?我什么时候应该使用哪一个?
答案 0 :(得分:3)
简短的回答是:floc
(和fscale
)用于指定将location参数(和scale参数)分别保持固定在指定值。 loc
和scale
仅提供适合的起始值。
sp.stats.weibull_min
继承fit
的{{1}}方法。 documentation of scipy.stats.rv_continuous.fit
指定了scipy.stat.rv_continuous
和floc
保持所述参数不变的事实。 fscale
,loc
以及派生分布识别的其他关键字参数仅用作起始值。
因此,如果您希望保持位置不变,则应使用scale
,如果您只想提供起始参数,则应使用floc=0
。