首页 > 解决方案 > 由于“在日志中遇到除以零”错误,我无法拟合 Maxwell 分布

问题描述

我正在尝试使用此文件中包含的值来拟合Maxwell 分布

由于我需要强制 loc 为 0,因此我使用以下表达式:

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

但是,这会因“在日志中遇到除以零”错误而失败:

我估计 loc=0 和 11000 左右的比例的 pdf 会非常好。

此数据集的 PDF 示例

我怎样才能绕过这个问题并使拟合工作?

标签: scipydistributioncurve-fitting

解决方案


最大化对数似然的代码触发了下溢,因为它对比例参数的默认初始猜测是 1,这与实际最优值相差甚远。您可以通过参数传递更好的fit猜测scale。矩量法提供了一个很好的猜测,在这种情况下,这意味着使用样本均值来估计尺度参数。Maxwell-Boltzmann 分布上的维基百科页面给出了平均值 μ 的公式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)

这是 location (您设置为 0)和 scale 的最大似然估计a


推荐阅读