scipy - 由于“在日志中遇到除以零”错误,我无法拟合 Maxwell 分布
问题描述
我正在尝试使用此文件中包含的值来拟合Maxwell 分布。
由于我需要强制 loc 为 0,因此我使用以下表达式:
params = st.maxwell.fit(values, floc=0)
但是,这会因“在日志中遇到除以零”错误而失败:
我估计 loc=0 和 11000 左右的比例的 pdf 会非常好。
我怎样才能绕过这个问题并使拟合工作?
解决方案
最大化对数似然的代码触发了下溢,因为它对比例参数的默认初始猜测是 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
。
推荐阅读
- apache-kafka-streams - KafkStreams:在窗口期间丢弃消息
- c# - 如何在 IClassifier.GetClassificationSpans 上获取行号?
- c# - 级联下拉菜单并正确设置详细信息值
- android - 读取 CompletableFuture 中返回的值
- java - 扫描程序java没有在for循环中获得输入
- c# - UWP:- 每次清除和添加集合(绑定到 itemsource)时,Listview 都会闪烁
- linux - 如何在 Linux 中安排任务仅在计算机空闲时运行?
- recursion - 递归时间复杂度定义混淆
- scala - 如何将两个数据集的模式与 Spark 进行比较?
- python - 是否可以更改 sklearn 决策树中节点的标签?