Python Numpy 泊松分布

Python Numpy Poisson Distribution

我正在生成高斯,为了完整起见,这就是我的实现:

from numpy import *
x=linspace(0,1,1000)
y=exp(-(x-0.5)**2/(2.0*(0.1/(2*sqrt(2*log(2))))**2))

峰值位于 0.5fwhm=0.1。到目前为止还不是很有趣。在下一步中,我使用 numpys random.poisson 实现来计算我的数据集的泊松分布。

poi = random.poisson(lam=y)

我有两个主要问题。

  1. 泊松的一个特点是方差等于exp。价值, 比较 mean() 和 var() 的输出确实让我感到困惑,因为 输出不相等。
  2. 绘制此图时,泊松分布。只占用整数值 和最大。价值大约是 7,有时是 6,而我的旧功能 y 有最大值。在 1. Afai 理解,泊松函数应该 给我一个 'fit' 的实际函数 y。最大怎么来的 值不相等?抱歉我的数学错误, 实际上我这样做是为了模拟泊松分布的噪声,但我 我猜你理解 'fit' 在这种情况下。

编辑:3. 问题:在此上下文中使用的 'size' 变量是什么?我见过不同类型的用法,但最后它们并没有给我不同的结果,而是在选择错误时失败了...

EDIT2:好的,从我得到的答案来看,我认为我不够清楚(尽管它已经帮助我纠正了我犯的其他一些愚蠢的错误,谢谢!)。我想要做的是将泊松(白)噪声应用于函数 y。正如 MSeifert 在下面的 post 中所描述的,我现在使用期望值作为 lam。但这只会给我噪音。我想我在如何应用 th{is,e} 噪声的层面上存在一些理解问题(也许它与物理更相关?!)。

首先,我假设你是 import numpy as np 来写这个答案,因为它清楚地将 numpy 函数与内置函数或 mathrandom 的函数区分开来python.

我认为没有必要回答你指定的问题,因为你的基本假设是错误的:

是的,泊松统计有一个等于方差的均值,但假设您使用 常数 lam。但你没有。您输入高斯的 y 值,因此您不能期望它们是常数(根据您的定义,它们是高斯​​!)。

使用np.random.poisson(lam=0.5)从泊松分布中得到一个随机值。但要小心,因为此泊松分布甚至与您的高斯分布都不大致相同,因为您处于 "low-mean" 区间,这两者有显着差异,例如参见 [​​=28=].

此外,您正在创建随机数,因此您不应该真正绘制它们,而应该绘制其中的 np.histogram。由于统计分布都是关于概率密度函数的(参见 Probability density function)。

之前,我已经提到你创建了一个常数 lam 的泊松分布,所以现在是时候谈谈 size:你创建随机数,以便逼近真实的泊松分布distribution 你需要抽取很多随机数。大小就在这里:np.random.poisson(lam=0.5, size=10000) 例如创建一个包含 10000 个元素的数组,每个元素都取自泊松概率密度函数,平均值为 0.5

如果您还没有在之前提到的维基百科文章中阅读它,泊松分布根据定义只给出无符号 (>= 0) 整数作为结果。

所以我猜您想做的是创建一个包含 1000 个值的高斯和泊松分布:

gaussian = np.random.normal(0.5, 2*np.sqrt(2*np.log(2)), 1000)
poisson = np.random.poisson(0.5, 1000)

然后绘制直方图:

import matplotlib.pyplot as plt
plt.hist(gaussian)
plt.hist(poisson)
plt.show()

或改用 np.histogram

要从随机样本中获取统计信息,您仍然可以对高斯和泊松样本使用 np.varnp.mean。而这一次(至少在我的样本中 运行)他们给出了很好的结果:

print(np.mean(gaussian))
0.653517935138
print(np.var(gaussian))
5.4848398775
print(np.mean(poisson))
0.477
print(np.var(poisson))
0.463471

请注意高斯值几乎与我们定义为参数的值完全相同。另一方面,泊松均值和 var 几乎相等。您可以通过增加上面的 size 来提高 mean 和 var 的精度。

为什么泊松分布不接近您的原始信号

您的原始信号仅包含 0 到 1 之间的值,因此泊松分布只允许正整数,标准差与平均值相关联。离高斯均值很远,你的信号近似为 0,所以泊松分布几乎总是绘制 0。高斯分布的最大值为 1。1 的泊松分布看起来像这样(左边是信号 + 泊松右边是值 1)

附近的泊松分布

所以你会在那个地区得到很多 0 和 1,还有一些 2。但也有可能你绘制的值最大为 7。这正是我提到的反对称性。如果你改变高斯的振幅(例如乘以 1000),"fit" 会好得多,因为那里的泊松分布几乎是对称的: