泊松分布

如果在有限时间 ( 0 , 1 ) (0,1) (0,1)内进行 n n n次伯努利实验,那么每次伯努利实验所占用的时间为 1 n \frac{1}{n} n1,按照自然规律,一件事情肯定是时间越长越容易发生,假定事件发生的概率与 1 n \frac{1}{n} n1成正比,记作 λ n \frac\lambda n nλ,则二项分布变为

P { X = k } = ( n k ) ( λ n ) k ( 1 − λ n ) n − k P\{X=k\}=\binom{n}{k}(\frac{\lambda}{n})^k(1-\frac{\lambda}{n})^{n-k} P{X=k}=(kn)(nλ)k(1nλ)nk

如果这个时间差 1 n \frac1n n1非常小,以至于事件变得近似连续,则有

lim ⁡ n → ∞ P { X = k } = lim ⁡ n → ∞ ( n k ) ( λ n ) k ( 1 − λ n ) n − k \lim_{n\to\infty} P\{X=k\}=\lim_{n\to\infty}\binom{n}{k}(\frac{\lambda}{n})^k(1-\frac{\lambda}{n})^{n-k} nlimP{X=k}=nlim(kn)(nλ)k(1nλ)nk

其中

lim ⁡ n → ∞ ( n k ) ( λ n ) k = λ k k ! \lim_{n\to\infty}\binom{n}{k}(\frac{\lambda}{n})^k=\frac{\lambda^k}{k!} nlim(kn)(nλ)k=k!λk

而后面有一项更是传说中的重要极限

lim ⁡ n → ∞ ( 1 − λ n ) n = e − λ \lim_{n\to\infty}(1-\frac{\lambda}{n})^n=e^{-\lambda} nlim(1nλ)n=eλ

综上就得到了一个新的分布

P ( x = k ) = e − λ λ k k ! P(x=k)=\frac{e^{-\lambda}\lambda^k}{k!} P(x=k)=k!eλλk

此即泊松分布,表示某个随机事件在连续时间内发生的概率,其中 λ n \frac\lambda n nλ表示单位时间内某件事发生的概率。

和二项分布的关系

下面通过scipy中的stats模块,模拟二项分布和泊松分布之间的关联。

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as ss

p,q = 0.2, 0.8
ns = [10, 500, 25000, 1250000]

fig = plt.figure()
for i,n in enumerate(ns):
    lam = n * p
    rs = ss.binom(n, p).rvs(50000)
    rv = ss.poisson(n*p)
    st, ed = rv.interval(0.999)
    xs = np.linspace(st, ed, 100)
    ax = fig.add_subplot(2,2,i+1)
    ax.hist(rs, density=True, bins='auto', alpha=0.2)
    ax.plot(xs, rv.pmf(xs))
    plt.title(f"n={n}")

plt.show()

效果如下

在这里插入图片描述

和正态分布的关系

泊松分布是二项分布在有限时间内的极限情况,而根据中心极限定理,随着伯努利试验次数的增加,二项分布将逼近于 σ 2 = n p q , μ = n p \sigma^2=npq, \mu=np σ2=npq,μ=np的高斯分布。

在通过二项分布推导泊松分布的过程中,比较关键的一步是 λ n \frac{\lambda}{n} nλ作为概率的一个假定,当 n → ∞ n\to\infty n时,可以发现 λ n \frac{\lambda}{n} nλ将趋近于0,如果继续沿用二项分布的模型,那么 q 1 ˉ − λ n − > 0 q\=1-\frac{\lambda}{n}->0 q1ˉnλ>0,从而 n p q ≈ n p npq\approx np npqnp

由此可以得到,当事件趋近于无穷多时,泊松分布将趋近于 μ = λ , σ 2 = λ \mu=\lambda, \sigma^2=\lambda μ=λ,σ2=λ的正态分布。

下面对这个关系进行测试

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as ss

p = 0.1
#lam = 100
ns = [10, 500, 25000, 1250000]

fig = plt.figure()
for i,n in enumerate(ns):
    lam = 0.1 * n
    rs = ss.poisson(lam).rvs(n)
    rv = ss.norm(lam, np.sqrt(lam))
    st, ed = rv.interval(0.999)
    xs = np.linspace(st, ed, 100)
    ax = fig.add_subplot(2,2,i+1)
    ax.hist(rs, density=True, bins='auto', alpha=0.2)
    ax.plot(xs, rv.pdf(xs))
    plt.title(f"n={n}")

plt.show()

效果如下

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐