Scipy:使用loc = 0,floc = 0,拟合的区别是什么?

时间:2017-12-08 08:25:22

标签: python numpy scipy

因为我正在拟合威布尔分布,并在其他问题中找到Fitting distribution with fixed parameters in SciPy

使用floc=0loc=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:

enter image description here

Weibull params:

(0.50240047370945606, -4.501644985259555e-28, 2.9918077253782287)
(2.0610053128948245, -0.45099484072568979, 16.299110670854041) #loc=0
(1.0, 0, 1.05) #floc=0

有什么区别?我什么时候应该使用哪一个?

1 个答案:

答案 0 :(得分:3)

简短的回答是:floc(和fscale)用于指定将location参数(和scale参数)分别保持固定在指定值。 locscale仅提供适合的起始值。

sp.stats.weibull_min继承fit的{​​{1}}方法。 documentation of scipy.stats.rv_continuous.fit指定了scipy.stat.rv_continuousfloc保持所述参数不变的事实。 fscaleloc以及派生分布识别的其他关键字参数仅用作起始值。

因此,如果您希望保持位置不变,则应使用scale,如果您只想提供起始参数,则应使用floc=0