由于“在日志中被零除”错误,我无法拟合Maxwell分布

问题描述 投票:0回答:1

我正在尝试使Maxwell distribution包含this file中包含的值。

由于我需要将位置设为0,所以我使用的是表达式:

params = st.maxwell.fit(values, floc=0)

但是,此操作失败,并出现“在日志中遇到零除”错误:

我估计loc = 0且范围在11000左右的pdf会很好。

PDF Example for this dataset

我如何绕过这个问题并使装配工作?

scipy distribution curve-fitting
1个回答
0
投票

我怀疑最大化对数似然性的代码正在触发上溢或下溢,因为其对scale参数的默认初始猜测为1,与实际的最佳值相差甚远。您可以使用fit参数将更好的猜测传递给scale。矩量法提供了一个很好的猜测,在这种情况下,这意味着使用样本均值来估计比例参数。 Maxwell-Boltzmann distribution上的Wikipedia页面以比例a给出了平均μ的公式。求解a得到:

In [19]: a = np.mean(values)/(2*np.sqrt(2/np.pi))

In [20]: a
Out[20]: 10587.275841415043

现在将该值作为fit参数传递给scale,它将覆盖优化代码使用的默认初始值:

In [21]: p = maxwell.fit(values, floc=0, scale=a)

In [22]: p
Out[22]: (0, 10455.558876443883)

这是该位置(将其设置为0)和比例尺a的最大似然估计。

© www.soinside.com 2019 - 2024. All rights reserved.