泊松分布与指数分布以及一道贝叶斯推断例题

泊松分布与指数分布

泊松分布是一个离散型分布,其概率质量函数写作:
P(Z=k)=λke−λk!,k=0,1,2,...P(Z=k)=\frac{\lambda^k e^{-\lambda}}{k!}, k=0,1,2,...P(Z=k)=k!λke−λ,k=0,1,2,...

其中,λ>0\lambda>0λ>0为参数,kkk为非负整数

如果Z∼Poi(λ)Z \sim Poi(\lambda)Z∼Poi(λ),则有E[Z∣λ]=λ,Var[Z∣λ]=λE[Z|\lambda] = \lambda, Var[Z|\lambda] = \lambdaE[Z∣λ]=λ,Var[Z∣λ]=λ

指数分布是一个连续型分布,其概率密度函数写作:
fZ(z∣λ)=λe−λz,z≥0f_Z(z|\lambda) = \lambda e^{-\lambda z}, z\geq 0fZ(z∣λ)=λe−λz,z≥0

其中,λ>0\lambda>0λ>0为参数

其累积分布函数写作:
FZ(z∣λ)=∫0∞λe−λzdz=1−e−λzF_Z(z|\lambda) = \int_0^\infty \lambda e^{-\lambda z}dz = 1-e^{-\lambda z}FZ(z∣λ)=∫0∞λe−λzdz=1−e−λz

如果Z∼Exp(λ)Z \sim Exp(\lambda)Z∼Exp(λ),则有E[Z∣λ]=1/λ,Var[Z∣λ]=1/λ2E[Z|\lambda] = 1/\lambda, Var[Z|\lambda] = 1/\lambda^2E[Z∣λ]=1/λ,Var[Z∣λ]=1/λ2

λ\lambdaλ是否固定可以区分频率派与贝叶斯派,后者认为分布的参数是随机变量。

泊松分布与指数分布的关系

泊松分布描述单位时间内事件发生的次数,指数分布描述事件发生的时间间隔

令单位时间内事件发生的次数为λ\lambdaλ,时间ttt内共发生λt\lambda tλt次

时间ttt内的泊松分布如下:
P(Z=k)=(λt)ke−λtk!P(Z=k)=\frac{(\lambda t)^k e^{-\lambda t}}{k!}P(Z=k)=k!(λt)ke−λt
P(Z=0)=e−λtP(Z=0)= e^{-\lambda t}P(Z=0)=e−λt

时间ttt内无事发生 等价于 第一次事件发生的时间T>tT>tT>t,因此有:
P(T>t)=P(x=0)=e−λtP(T>t) = P(x=0) = e^{-\lambda t}P(T>t)=P(x=0)=e−λt

时间ttt内至少有一件事发生的概率可写作:
P(T≤t)=1−P(T>t)=1−e−λtP(T\leq t) = 1- P(T>t) = 1 - e^{-\lambda t}P(T≤t)=1−P(T>t)=1−e−λt

这就是指数分布的累计函数FT(t)F_T(t)FT(t)

The Poisson and Exponential Distribution, Jhon.C.B.Cooper. https://neurophysics.ucsd.edu/courses/physics_171/exponential.pdf

例题

例题来源于贝叶斯方法 概率编程与贝叶斯推断[M]

数据与代码可以在链接中找到https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/blob/master/Chapter1_Introduction/Ch1_Introduction_PyMC_current.ipynb

现在有某用户70天的短信接收量数据,对其建模并根据数据估计参数的分布?

注:我只是直观感受一下贝叶斯方法如何解决问题,先不作考虑为什么λ\lambdaλ服从指数分布以及为什么设计两个λ\lambdaλ但又令α\alphaα等于短信数的均值分之一。

建模:

1、每天接收的短信数CiC_iCi服从泊松分布,即Ci∼Poi(λ)C_i \sim Poi(\lambda)Ci∼Poi(λ)

2、λ\lambdaλ是一个分段函数,λ=λ1,t<τ;λ2,t≥τ\lambda = \lambda_1, t<\tau; \lambda_2, t\geq \tauλ=λ1,t<τ;λ2,t≥τ

3、λ∼Exp(α)\lambda \sim Exp(\alpha)λ∼Exp(α),令α=1/ΣiCi70\alpha = 1/\Sigma_i \frac{C_i}{70}α=1/Σi70Ci

4、τ∼DiscreteUniform(1,70)\tau \sim DiscreteUniform(1,70)τ∼DiscreteUniform(1,70)

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import pymc as pm


if __name__ == '__main__':
    # 加载数据
    count_data = np.loadtxt("data.csv")
    alpha = 1/count_data.mean()

    # 先验
    with pm.Model() as model:
        lambda_1 = pm.Exponential("lambda_1", alpha)
        lambda_2 = pm.Exponential("lambda_2", alpha)
        tau = pm.DiscreteUniform("tau", lower=0, upper=len(count_data)-1)
    with model: #model没有被销毁
        idx = np.arange(len(count_data))
        lambda_ = pm.math.switch(tau > idx, lambda_1, lambda_2)

    # 似然
    with model:
        observation = pm.Poisson("obs", lambda_, observed=count_data)

    # 后验
    with model:
        step = pm.Metropolis()
        trace = pm.sample(10000, tune=5000, step=step, return_inferencedata=False)

    # 获取先验
    with model:
        prior = pm.sample_prior_predictive(samples=10000)
    lambda_1_prior_samples = prior.prior["lambda_1"].values.flatten()
    lambda_2_prior_samples = prior.prior["lambda_2"].values.flatten()
    tau_prior_samples = prior.prior["tau"].values.flatten()
    # 绘图显示
    plt.subplot(3, 1, 1)
    plt.hist(lambda_1_prior_samples, bins=30)
    plt.subplot(3, 1, 2)
    plt.hist(lambda_2_prior_samples, bins=30)
    plt.subplot(3, 1, 3)
    plt.hist(tau_prior_samples, bins=30)
    plt.show()

    # 获取后验
    lambda_1_samples = trace['lambda_1']
    lambda_2_samples = trace['lambda_2']
    tau_samples = trace['tau']
    # 绘图显示
    plt.subplot(3, 1, 1)
    plt.hist(lambda_1_samples, bins=30)
    plt.subplot(3, 1, 2)
    plt.hist(lambda_2_samples, bins=30)
    plt.subplot(3, 1, 3)
    plt.hist(tau_samples, bins=30)
    plt.show()
相关推荐
EniacCheng1 天前
贝叶斯定理
人工智能·机器学习·概率论
EniacCheng1 天前
二项分布和泊松分布
概率论·泊松分布·二项分布
byzh_rc2 天前
[模式识别-从入门到入土] 组合分类器
人工智能·算法·机器学习·支持向量机·概率论
牧歌悠悠3 天前
【Random Matrices】第一章-随机矩阵入门
线性代数·数学·概率论·随机矩阵·高维概率
缘友一世5 天前
现代密码学【3】之密码学形式化分析与可证明安全基础
安全·密码学·概率论
byzh_rc5 天前
[模式识别-从入门到入土] 拓展-EM算法
算法·机器学习·概率论
无水先生6 天前
随机变量在代数运算中的误差传播(2/2)
概率论·统计学
图像生成小菜鸟7 天前
Score Based diffusion model 数学推导
算法·机器学习·概率论
*星星之火*7 天前
【大白话 AI 答疑】 第7篇熵、交叉熵与交叉熵损失的概念梳理及计算示例
人工智能·机器学习·概率论