Python Numpy泊松分布

时间:2016-03-01 17:21:28

标签: python numpy poisson

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

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. 绘制时,poisson dist。仅占用整数值 和最大价值大约是7,有时是6,而我的旧功能 你有最大的在1.Afai明白,泊松函数应该 给我一些“适合”我的实际功能y。怎么来最大的 价值不相等?抱歉我的数学不正确, 实际上,我这样做是为了模拟泊松分布的噪音,但我 猜你在这种背景下理解'适合'。
  3. 编辑:3。问题:在这种情况下,'size'变量用于什么?我已经看到了不同类型的用法,但最后他们没有给我不同的结果,但在选择错误时却失败了......

    EDIT2:好的,从我得到的答案我认为我不够清楚(虽然它已经帮助我纠正了我做的其他一些愚蠢的错误,谢谢你!)。我想要做的是将poisson(白色)噪声应用于函数y。正如MSeifert在下面的帖子中所描述的,我现在使用期望值作为lam。但这只会给我带来噪音。我想我在应用噪声的程度上有一些理解问题(也许它与物理学有关??)。

1 个答案:

答案 0 :(得分:11)

首先,假设您import numpy as np,我会写下这个答案,因为它明确区分numpy函数与内置函数或mathrandom的函数包的python。

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

是的,泊松统计量的均值等于方差,但假设您使用常数 lam。但你不是。你输入高斯的y值,所以你不能指望它们是恒定的(它们是你的定义高斯!)。

使用np.random.poisson(lam=0.5)从泊松分布中获取一个随机值。但要小心,因为这个泊松分布甚至与你的高斯分布大致相同,因为你处于低均值"两者都有显着差异的区间,例如参见Wikipedia article about Poisson distribution

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

之前,我已经提到你创建了一个带有常数lam的泊松分布,所以现在是时候讨论size了:你创建了随机数,所以近似真实的泊松分布你需要绘制大量随机数。大小来自: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

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

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

原始信号仅包含0到1之间的值,因此泊松分布仅允许正整数,标准差与平均值相关联。从高斯的平均值到目前为止,你的信号大约为0,因此泊松分布几乎总是为0。高斯具有它的最大值为1. 1的泊松分布看起来像这样(左边是信号+泊松,右边是泊松分布,值为1)

enter image description here

因此你会在该地区获得大量的0和1以及2。但是也有可能你将值绘制到7。这正是我提到的反对称性。如果你改变高斯的幅度(例如乘以1000),那么" fit"因为泊松分布在那里几乎是对称的,所以要好得多:

enter image description here