共轭先验
1.什么是先验?
先验概率是我们看到数据之前事件的概率(主观概率)。
在上一篇文章中:贝叶斯推理,先验是我们在新数据可用之前根据我们现在所知道的对概率的猜测。
2.什么是共轭先验?
不知道贝叶斯推断就无法理解共轭先验!为什么这么说呢?
在本博客的其余部分中,我假设您了解先验,样本(数据data)和后验的概念。
本质上共轭先验:
对于某些似然函数(likehood),如果您选择某个先验,后验的分布与先验的分布相同。这样的先验被称为共轭先验。
通过示例始终可以最好地理解它。下面的代码用于计算二项式似然的后验。θ是成功的概率,我们的目标是选择使后验概率最大的θ。
import numpy as np
import scipy.stats as stats
success_prob = 0.3
data = np.random.binomial(n=1, p=success_prob, size=1000) # 1, 0.
# θ
theta_range = np.linspace(0, 1, 1000)
# 先验 P(θ)
a = 2
b = 8
theta_range_e = theta_range + 0.0001
prior = stats.beta.cdf(x = theta_range_e, a=a, b=b) - stats.beta.cdf(x = theta_range, a=a, b=b)
# 似然 Likelihood P(X|θ)
likelihood = stats.binom.pmf(k = np.sum(data), n = len(data), p = theta_range)
# 后验
posterior = likelihood * prior
normalized_posterior = posterior / np.sum(posterior)
给您的问题:上面的代码块中有什么与您有关的吗?
有两件事使后验计算变得昂贵,有没有优雅的处理方式呢?
首先,我们计算每个θ的后验。为什么我们必须计算数千个theta的后验?因为您正在对后部进行标准化(第21行)。即使您选择不对后验进行标准化,最终目标还是要找到后验的最大值(Maximum a postiori)。为了以最佳方式找到最大值,我们需要考虑每个候选对象- 每个θ的似然度P(X |θ)。
其次,如果没有后验分布的封闭式公式,则必须通过数值优化(例如梯度下降或牛顿法)找到最大值。
3.“共轭先验”如何实现的优雅方法呢?
当您知道您的先验是共轭先验时,您可以跳过posterior = likelihood * prior计算。此外,如果您的先验分布具有封闭形式的表单表达式,则您已经知道最大后验概率将是多少。
在上面的示例中,β分布是二项式似然之前的共轭。这是什么意思?这意味着在建模阶段,我们已经知道后验也将是beta分布。因此,在进行更多实验之后,您可以简单地通过将接受和拒绝的数量分别添加到现有参数α,β上来计算后验,而不用将似然度乘以先验分布。这很方便!(下一节的证明)
作为数据/ ML科学家,您的模型永远都不完整。随着输入更多数据,您必须更新模型(这就是我们使用贝叶斯推理的原因)。
如您所见,贝叶斯推断中的计算可能很繁重,有时甚至很棘手。但是,如果我们可以使用先验的共轭形式的封闭式公式,则计算将变得非常简单。
4.证明-为什么Beta分布在二项式似然率之前是共轭的?
当我们使用Beta分布作为先验时,二项式似然的后验也将遵循beta分布。
显示Beta会产生Beta。
二项式和Beta版的PDF是什么样的?

让我们将它们插入著名的贝叶斯公式中
其中:
θ是成功的概率,
x是成功次数。
n是试验的总数
因此nx是失败的次数。

为什么最后一个积分变为B(x +α,n-x +β)?这个beta推导下次再讲。先验分布P(θ)为Beta(α,β),在从实验中获得x次成功和nx次失败后,后验也变为具有参数(x +α,n-x +β)的Beta分布。很好的是,您无需进行计算就可以解析地知道这一点。
5.共轭先前的分布
Beta分布是伯努利,二项式,负二项式和几何分布的共轭先验(看起来像那些涉及成功与失败的分布)。
这就是为什么这三个分布(Beta,Gamma和Normal)经常被用作先验的原因。一种有趣的说法是,即使您进行了所有这些实验,并将您的可能性乘以先验,您对先验分布的初始选择也是如此,以至于最终分布与先验分布相同。
在方程中共轭先验P(θ):
P(θ)使得P(θ| D)= P(θ)
注意事项:
可累积性:当我们使用共轭先验时,顺序估计(每次观察后更新计数)得出的结果与批量估计相同。
为了找到最大后验,您不必对似然(采样)与先验(分母中每个可能θ的积分)的乘积进行归一化。

您仍然可以在不进行标准化的情况下找到最大值。但是,如果要比较不同模型的后验对象或计算点估计,则需要进行归一化。

