NumPy - 泊松分布
什么是泊松分布?
泊松分布的特征在于一个参数 (lambda),即给定区间内事件的平均数量。泊松分布的概率质量函数 (PMF) 给出了在区间内观察到 k 个事件的概率,定义为 −
P(X = k) = (k * e(-)) / k!
其中:
- :表示区间内事件的平均数量。
- k:表示事件的数量。
- e:表示欧拉常数(约为 2.71828)。
NumPy 中的泊松分布
NumPy 提供了 numpy.random.poisson() 函数来生成符合泊松分布的样本。您可以指定平均速率 () 和生成样本的大小。
示例
在此示例中,我们从泊松分布中生成 10 个随机样本,平均每个间隔发生 3 次事件 -
import numpy as np # 从泊松分布中生成 10 个随机样本,样本数 =3 samples = np.random.poisson(lam=3, size=10) print("泊松分布的随机样本:", sample)
以下是得到的输出 -
泊松分布的随机样本:[3 1 2 2 1 1 2 5 5 3]
泊松分布的可视化
泊松分布的可视化有助于更好地理解其特性。我们可以使用 Matplotlib 等库来创建直方图,以显示生成样本的分布。
示例
在下面的示例中,我们首先从 σ =3 的泊松分布中生成随机样本。然后,我们创建一个直方图来可视化此分布 -
import numpy as np import matplotlib.pyplot as plt # 从泊松分布中生成 1000 个随机样本,样本数 =3 samples = np.random.poisson(lam=3, size=1000) # 创建一个直方图来可视化此分布 plt.hist(samples, bins=range(10), edgecolor='black', density=True) plt.title('泊松分布') plt.xlabel('事件数') plt.ylabel('频率') plt.xticks(range(10)) plt.show()
直方图显示了泊松试验中事件数的频率。条形表示每种可能结果的概率,构成泊松分布的特征形状 -

泊松分布的应用
泊松分布在各个领域都有应用,用于模拟事件随时间或空间发生的情形。以下是一些实际应用 -
- 交通工程: 对通过检查站的汽车数量进行建模。
- 金融: 对证券交易所执行的交易数量进行建模。
- 排队论: 对到达服务点的顾客数量进行建模。
生成累积泊松分布
有时,我们对泊松分布的累积分布函数 (CDF) 感兴趣,它给出了区间内最多包含 k 个事件的概率。
NumPy 没有内置的泊松分布 CDF 函数,但我们可以使用循环和 SciPy 库中的 scipy.stats.poisson.cdf() 函数来计算它。库。
示例
在下面的示例中,我们在 NumPy 中生成累积泊松分布 -
import numpy as np import matplotlib.pyplot as plt from scipy.stats import poisson # 定义平均发生率 lam = 3 # 生成累积分布函数 (CDF) 值 x = np.arange(0, 10) cdf = poisson.cdf(x, lam) # 绘制累积分布函数 (CDF) plt.plot(x, cdf, marker='o', linestyle='-', color='b') plt.title('累积泊松分布') plt.xlabel('事件数') plt.ylabel('累积概率') plt.grid(True) plt.show()
该图显示了泊松试验中达到并包含每个事件数的累积概率。 CDF 是一个阶跃函数,随着事件数量的增加而增加到 1。-

泊松分布的性质
泊松分布有几个关键性质,它们是:-
- 离散性:泊松分布是离散的,这意味着它只接受整数值。
- 均值和方差:泊松分布的均值和方差都等于。
- 偏度:分布向右偏斜,尤其是较小的值。
用于假设检验的泊松分布
泊松分布通常用于假设检验,尤其是在事件计数检验中。
泊松检验是一种常见的检验方法,用于确定观察到的事件数是否与预期数存在显著差异。以下是一个使用 scipy.stats.poisson() 函数的示例。
示例
在此示例中,我们执行泊松检验来确定观察到的事件数 (10) 是否与预期发生率 (5) 存在显著差异。 p值表示假设零假设成立,获得至少与观察结果同样极端的结果的概率 -
from scipy.stats import poisson # 观察到的事件数 observed_events = 10 # 预期事件数(平均发生率) expected_rate = 5 # 执行泊松检验 p_value = poisson.sf(observed_events-1, expected_rate) print("泊松检验的P值:", p_value)
得到的输出如下所示 -
泊松检验的P值:0.03182805730620481
种子可重复性
为了确保可重复性,您可以在生成泊松分布之前设置特定的种子。这样可以确保每次运行代码时都生成相同的随机数序列。
示例
通过设置种子,可以确保每次执行代码时随机生成的结果都相同,如下例所示 -
import numpy as np # 设置种子以提高可重复性 np.random.seed(42) # 从泊松分布中生成 10 个随机样本,样本数为 =3 samples = np.random.poisson(lam=3, size=10) print("种子为 42 的随机样本:", sample)
生成的结果如下 -
种子为 42 的随机样本:[4 1 3 3 2 3 2 3 0 2]