泊松分布是一种离散概率分布,它表示在固定的时间或空间间隔内发生给定数量的事件的概率,前提是这些事件以已知的恒定平均速率发生并且与自上次事件以来的时间无关。
泊松分布的概率质量函数(pmf)定义为:
其中,k 是出现次数(k=0,1,2...),λ 是平均事件数.
泊松分布具有均值 λ 和方差 λ。
在 k 处计算的累积分布函数 (cdf),是随机变量 (X) 的值小于或等于 k 的概率。泊松分布的cdf定义为:
其中,[k] 是小于或等于 k 的最大整数。
NumPy random.poisson() 函数返回泊松分布的随机样本。
语法
numpy.random.poisson(lam=1.0, size=None)
参数
lam | 可选。 指定间隔期望,必须为 >= 0。期望间隔序列必须可在请求的大小上广播。默认值为 0.0。 |
size | 可选。 指定输出形状。 int 或 int 元组。如果给定形状为(m, n, k),则绘制m * n * k个样本。如果 size 为 None(默认),且 lam 为标量,则返回单个值。否则,将抽取 np.array(lam).size 样本。 |
返回值
返回来自参数化泊松分布的样本。 ndarray 或标量。
示例:泊松分布的值
在下面的示例中,random.poisson() 函数用于创建给定矩阵包含从指定泊松分布中抽取的随机值的形状。
import numpy as np
size = (5,3)
sample = np.random.poisson(10, size)
print(sample)
上述代码的可能输出可能是:
[[13 10 9]
[11 11 10]
[15 12 11]
[ 6 12 10]
[12 10 11]]
绘制泊松分布
示例:直方图
Matplotlib 是一个 Python 绘图库,可用于绘制泊松分布的概率质量函数 (pmf)使用 hist() 函数。
import matplotlib.pyplot as plt
import numpy as np
#修复种子以提高重现性
#结果
np.random.seed(10)
size = 10000
#抽取10000个样本
#泊松分布
sample = np.random.poisson(10, size)
bin = np.arange(0,20,1)
plt.hist(sample, bins=bin, edgecolor='blue')
plt.title("Poisson Distribution")
plt.show()
上述代码的输出将是:
示例:比较 pmfs
可以使用 Seaborn kdeplot() 函数。在下面的示例中,比较了三个泊松分布(每个具有不同的 λ)的 pmf。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#修复种子以提高重现性
#结果
np.random.seed(10)
size = 1000
#绘制1000个样本
#不同的泊松分布
sns.kdeplot(np.random.poisson(5, size))
sns.kdeplot(np.random.poisson(10, size))
sns.kdeplot(np.random.poisson(15, size))
plt.legend([r"$\lambda = 5$",
r"$\lambda = 10$",
r"$\lambda = 15$"])
plt.show()
上述代码的输出将是:
示例:比较 cdfs
多个累积分布函数可以使用 Seaborn ecdfplot() 函数进行图形比较。在下面的示例中,比较了三个泊松分布(每个具有不同的 λ)的 cdf。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#修复种子以提高重现性
#结果
np.random.seed(10)
size = 1000
#绘制1000个样本
#不同的泊松分布
sns.ecdfplot(np.random.poisson(5, size))
sns.ecdfplot(np.random.poisson(10, size))
sns.ecdfplot(np.random.poisson(15, size))
plt.legend([r"$\lambda = 5$",
r"$\lambda = 10$",
r"$\lambda = 15$"])
plt.show()
上述代码的输出将是: