1

docs.scipy.org中有一个生成帕累托分布的代码。我可以理解大部分代码片段,除了对 PDF(概率密度函数)使用术语“拟合”和公式:max(count)*fit/max(fit)

这是代码片段:

import matplotlib.pyplot as plt
a, m = 3., 2.  # shape and mode
s = (np.random.pareto(a, 1000) + 1) * m
count, bins, _ = plt.hist(s, 100, normed=True)
fit = a*m**a / bins**(a+1)
plt.plot(bins, max(count)*fit/max(fit), linewidth=2, color='r')
plt.show()

我在网上彻底搜索了公式:max(count)*fit/max(fit) 甚至用 pdf 替换了“fit”一词。但无法获得任何线索。请解释公式所传达的概念。

我假设使用术语“拟合”而不是 PDF,因为他们使用 PDF 的公式进行帕累托分布进行拟合。

最后,代码中的下划线“_”表达了什么:

count, bins, _ = plt.hist(s, 100, normed=True)
4

1 回答 1

1

np.random.pareto从 Pareto-II 分布中抽取随机样本。因此,结果数据是来自该分布的实现,而不是分布的概率密度。

在调用中plt.hist我们使用normed=True参数。这会使数据标准化并在 y 轴上绘制样本的密度,而不是频率。

然后,我们希望将帕累托分布拟合到我们随机采样的数据中,并将该分布绘制在我们的数据之上。

为此,我们首先计算由bins参数a和定义的 x 值处的帕累托分布的概率密度m。这是我们对拟合的定义:fit = a*m**a / bins**(a+1).

这个max(count) * fit / max(fit) 词的必要性有点难以捉摸。我认为很清楚我们为什么要包含fit在绘图命令中,但是为什么要使用 ratiomax(count) / max(fit)呢?实际上,我不是 100% 确定的。

max(count) / max(fit)看起来这可能是通过将帕累托分布拟合到我们的数据来进行的偏差校正。

于 2020-03-09T14:19:56.917 回答