伯努利分布、二项分布、多项分布、Beta分布、Dirichlet分布

1. 伯努利分布

伯努利分布(Bernoulli distribution)又名两点分布0-1分布,介绍伯努利分布前首先需要引入伯努利试验(Bernoulli trial)

  • 伯努利试验是只有两种可能结果的单次随机试验,即对于一个随机变量X而言:

伯努利试验都可以表达为“是或否”的问题。例如,抛一次硬币是正面向上吗?刚出生的小孩是个女孩吗?等等

  • 如果试验E是一个伯努利试验,将E独立重复地进行n次,则称这一串重复的独立试验为n重伯努利试验
  • 进行一次伯努利试验,成功(X=1)概率为p(0<=p<=1),失败(X=0)概率为1-p,则称随机变量X服从伯努利分布。伯努利分布是离散型概率分布,其概率质量函数为:

2. 二项分布

二项分布(Binomial distribution)是n重伯努利试验成功次数的离散概率分布。

  • 如果试验E是一个n重伯努利试验,每次伯努利试验的成功概率为p,X代表成功的次数,则X的概率分布是二项分布,记为X~B(n,p),其概率质量函数为

    显然,

  • 从定义可以看出,伯努利分布是二项分布在n=1时的特例
  • 二项分布名称的由来,是由于其概率质量函数中使用了二项系数,该系数是二项式定理中的系数,二项式定理由牛顿提出:

  • 二项分布的典型例子是扔硬币,硬币正面朝上概率为p, 重复扔n次硬币,k次为正面的概率即为一个二项分布概率。

3. 多项分布

多项式分布(Multinomial Distribution)是二项式分布的推广。二项式做n次伯努利实验,规定了每次试验的结果只有两个,如果现在还是做n次试验,只不过每次试验的结果可以有多m个,且m个结果发生的概率互斥且和为1,则发生其中一个结果X次的概率就是多项式分布。

  • 扔骰子是典型的多项式分布。扔骰子,不同于扔硬币,骰子有6个面对应6个不同的点数,这样单次每个点数朝上的概率都是1/6(对应p1~p6,它们的值不一定都是1/6,只要和为1且互斥即可,比如一个形状不规则的骰子),重复扔n次,如果问有k次都是点数6朝上的概率就是

  • 多项式分布一般的概率质量函数为:

4. 贝塔分布

在介绍贝塔分布(Beta distribution)之前,需要先明确一下先验概率、后验概率、似然函数以及共轭分布的概念。

  • 通俗的讲,先验概率就是事情尚未发生前,我们对该事发生概率的估计。利用过去历史资料计算得到的先验概率,称为客观先验概率; 当历史资料无从取得或资料不完全时,凭人们的主观经验来判断而得到的先验概率,称为主观先验概率。例如抛一枚硬币头向上的概率为0.5,这就是主观先验概率。
  • 后验概率是指通过调查或其它方式获取新的附加信息,利用贝叶斯公式对先验概率进行修正,而后得到的概率。
  • 先验概率和后验概率的区别:先验概率不是根据有关自然状态的全部资料测定的,而只是利用现有的材料(主要是历史资料)计算的;后验概率使用了有关自然状态更加全面的资料,既有先验概率资料,也有补充资料。另外一种表述:先验概率是在缺乏某个事实的情况下描述一个变量;而后验概率(Probability of outcomes of an experiment after it has been performed and a certain event has occured.)是在考虑了一个事实之后的条件概率。
  • 似然函数
  • 共轭分布(conjugacy):后验概率分布函数与先验概率分布函数具有相同形式

好了,有了以上先验知识后,终于可以引入贝塔分布啦!!首先,考虑一点,在试验数据比较少的情况下,直接用最大似然法估计二项分布的参数可能会出现过拟合的现象(比如,扔硬币三次都是正面,那么最大似然法预测以后的所有抛硬币结果都是正面)。为了避免这种情况的发生,可以考虑引入先验概率分布来控制参数,防止出现过拟合现象。那么,问题现在转为如何选择

先验概率和后验概率的关系为:

二项分布的似然函数为(就是二项分布除归一化参数之外的后面那部分,似然函数之所以不是pdf,是因为它不需要归一化):

如果选择的先验概率也与次方德乘积的关系,那么后验概率分布的函数形式就会跟它的先验函数形式一样了。具体来说,选择prior的形式是,那么posterior就会变成这个样子了(为pdf的归一化参数),所以posterior和prior具有相同的函数形式(都是也与次方的乘积),这样先验概率与后验概率就是共轭分布了。

所以,我们选择了贝塔分布作为先验概率,其概率分布函数为:

,其中

5. 狄利克雷分布

狄利克雷分布(Dirichlet distribution)是多项分布的共轭分布,也就是它与多项分布具有相同形式的分布函数。

  • 概率分布函数为:

6. 后记

本篇博文只是将伯努利分布、二项分布、多项分布、贝塔分布和狄利克雷分布做了简单的介绍,其中涉及到大量的概率基础和高等数学的知识,文中的介绍只是粗浅的把这些分布的概念作了大概介绍,没有对这些分布的产生历史做介绍。我想,更好的介绍方式,应是从数学史的角度,将这几项分布的发现按照历史规律来展现,这样会更直观、形象。后续再补吧!

  • 28
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
假设我们有 $n$ 个样本,每个样本有 $k$ 种可能的离散取值。我们用多项分布来描述这些样本,其中 $\boldsymbol{\theta}=(\theta_1,\theta_2,\dots,\theta_k)$ 表示每个类别的概率,也就是多项分布的参数。假设我们有先验知识 $p(\boldsymbol{\theta})$,那么我们可以通过贝叶斯定理得到后验分布: $$ p(\boldsymbol{\theta}|\mathbf{x})=\frac{p(\mathbf{x}|\boldsymbol{\theta})p(\boldsymbol{\theta})}{p(\mathbf{x})} $$ 其中,$\mathbf{x}=(\mathbf{x}_1,\mathbf{x}_2,\dots,\mathbf{x}_n)$ 表示样本集合,$\mathbf{x}_i$ 是一个 $k$ 维向量,表示第 $i$ 个样本的类别。 假设我们采用狄利克雷分布作为先验分布,即 $$ p(\boldsymbol{\theta})=\frac{1}{\mathrm{B}(\alpha)}\prod_{i=1}^k\theta_i^{\alpha_i-1} $$ 其中,$\mathrm{B}$ 表示贝塔函数,$\alpha=(\alpha_1,\alpha_2,\dots,\alpha_k)$ 是一个 $k$ 维向量,表示先验分布的超参数。可以证明,狄利克雷分布多项分布的共轭先验分布,因此,后验分布也是狄利克雷分布,即 $$ p(\boldsymbol{\theta}|\mathbf{x})=\frac{1}{\mathrm{B}(\boldsymbol{\alpha}+\mathbf{n})}\prod_{i=1}^k\theta_i^{\alpha_i+n_i-1} $$ 其中,$\boldsymbol{\alpha}$ 是先验分布的超参数向量,$\mathbf{n}=(n_1,n_2,\dots,n_k)$ 是样本中每个类别出现的次数,即 $$ n_i=\sum_{j=1}^n\mathbf{1}_{\{\mathbf{x}_j=i\}} $$ 这个后验分布的参数可以通过贝叶斯循环迭代更新来求解。具体来说,假设我们已经有一个先验分布 $p(\boldsymbol{\theta}^{(t-1)})$,其中 $\boldsymbol{\theta}^{(t-1)}$ 表示第 $t-1$ 次迭代后的参数值。我们从样本 $\mathbf{x}$ 中抽取一个样本 $\mathbf{x}_i$,然后计算其对应的似然函数 $p(\mathbf{x}_i|\boldsymbol{\theta}^{(t-1)})$ 和先验分布 $p(\boldsymbol{\theta}^{(t-1)})$,然后通过贝叶斯定理计算出后验分布 $p(\boldsymbol{\theta}^{(t)}|\mathbf{x}_i)$。由于 $\mathbf{x}_i$ 是从样本 $\mathbf{x}$ 中随机抽取的,因此我们可以多次重复这个过程,直到后验分布收敛。具体的迭代公式如下: $$ \begin{aligned} \alpha_i^{(t)}&=\alpha_i^{(t-1)}+n_i\\ \boldsymbol{\theta}^{(t)}&\sim\mathrm{Dirichlet}(\boldsymbol{\alpha}^{(t)}) \end{aligned} $$ 其中,$\mathrm{Dirichlet}$ 表示狄利克雷分布。这个迭代过程可以用代码实现,如下所示: ```python import numpy as np from scipy.stats import dirichlet def posterior_update(alpha, x, num_iters=1000, burn_in=100): k = alpha.shape[0] n = x.shape[0] n_k = np.zeros(k) for i in range(n): n_k[x[i]] += 1 alpha_t = alpha + n_k theta_t = dirichlet.rvs(alpha_t) for t in range(num_iters): i = np.random.randint(n) x_i = x[i] p = theta_t[x_i] * (alpha_t[x_i] + n_k[x_i]) / (alpha_t.sum() + n) if np.random.rand() < p: n_k[x_i] += 1 alpha_t = alpha + n_k theta_t = dirichlet.rvs(alpha_t) if t > burn_in and t % 10 == 0: print('iter={}, theta={}, alpha={}'.format(t, theta_t, alpha_t)) return alpha_t, theta_t ``` 其中,`alpha` 是先验分布的超参数向量,`x` 是样本集合,`num_iters` 表示总共迭代的次数,`burn_in` 表示前面几次迭代不考虑。我们首先计算 $\mathbf{n}$,然后通过循环迭代更新 $\alpha$ 和 $\boldsymbol{\theta}$,最后返回后验分布的参数。在每次迭代时,我们随机抽取一个样本 $\mathbf{x}_i$,然后计算其对应的似然函数和先验分布,并根据贝叶斯定理计算出后验分布。如果后验概率比当前参数更高,则接受这个样本,否则保持原来的参数不变。最后,我们输出一些中间结果,以便观察迭代过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值