贝叶斯统计入门:从基本概念到实际应用
贝叶斯统计入门:从基本概念到实际应用
贝叶斯统计是一种基于概率论的统计推断方法,它通过将先验知识与观测数据相结合,来更新对未知参数的估计。这种方法在机器学习、数据分析等领域有着广泛的应用。本文将从贝叶斯统计的基本概念出发,通过抛硬币的例子,详细解释贝叶斯定理、先验分布、似然函数和后验分布等核心概念,并展示如何使用Python进行实际计算。
目前教学方式主要有两种:一种是过于数学化、技术性太强、让人望而生畏,另一种是温和的“过于简单化”的方式。这两种方式都没有触及贝叶斯统计(和推理)的核心:查看过去的数据或证据来预测未来。
贝叶斯统计是什么?
在频率统计中,我们根据观察到某些测量或结果的频率从数据中得出结论。如果你抛硬币10次,其中 6 次正面朝上,4 次反面朝上,你可能会得出“正面朝上的概率为 60%,反面朝上的概率为 40%”的结论。如果你抛硬币的次数更多,你可以随着收集到更多的数据来调整对正面和反面朝上概率的判断,所以也许在抛1000 次之后,你会看到正面朝上的概率大约为 51%,反面朝上的概率为 49%,因此你得出结论“这枚硬币很可能是一枚公平的硬币,所以概率是 50%。
频率统计的主要特点是,你试图量化的参数,在本例中是“正面或反面朝上的概率”,被认为是“固定的”。这意味着,它会一直保持不变,不可能改变。换句话说,它是纯粹确定性的,你可以说,无论你抛10次、100 次还是1000 次,硬币总是公平的,你对此确信无疑。
在贝叶斯统计中,我们做类似的事情:我们收集的数据越多,我们的假设就越好。然而,关键的区别在于,在贝叶斯方法中,所讨论的参数(例如,掷出正面的概率)实际上不是一个确定性参数,它不是固定的,而是被视为“随机变量”。
这是因为无论你记录了多少次抛硬币,掷出正面的真实概率总是存在一定程度的不确定性。所以从这个意义上讲,在贝叶斯统计中,我们不会像在频率论的情况下那样试图将一个数字附加到“掷出正面的概率”(我们称之为 θ = Prob(Heads))(例如,无论如何都说 θ = 0.5)。相反,我们说θ 是一个遵循某种概率分布的随机变量。θ的平均值对应于该分布,而分布的方差则衡量你对θ的真实值的“不确定性”程度。从这个意义上讲,贝叶斯统计会告诉你,只有在样本或观测值数量N趋于无穷大的情况下,你才能获得 100% 准确的θ值。对于无限数据以外的任何其他数据,你都会对θ存在一定程度的不确定性,尽管对于大数据来说这种不确定性很小。
贝叶斯定理
学习贝叶斯统计的第一步是理解贝叶斯定理的公式。首先,让我们做一些概率复习:
图1条件概率公式
利用最后一个公式,我们可以写出贝叶斯定理
右边的公式是贝叶斯定理。它告诉你,给定B时A发生的概率等于给定A时 B发生的概率乘以单独存在A的概率,再除以单独存在B的概率。在贝叶斯术语中,每个术语可以总结如下:
这一切都很完美,但它与我们之前讨论的抛硬币有什么关系呢?事实上,我们可以在概率分布p(.)的情况下写出相同的表达式,例如:
这里的数据是指“单次测量或观察”,或者也可以指多次测量或观察。底部的积分实际上是数据的概率分布,即p(data)(相当于上一个公式中的p(B).
概率密度函数 (pdf)就像直方图,高度越大,该区域中的观测值越频繁。关键区别在于,pdf不依赖于你进行的观测次数,它们适用于任意数量的观测值并且是不可变的。
我们还可以将上述方程表示为:
或者简单地用贝叶斯的术语
这是因为我们将分母视是一个归一化常数,它可以被解释为任何数字。真正重要的是我们所说的似然函数和先验。或者你可以这样想:基本上,先验p(θ)是我们对 θ 分布的初步猜测。它可以是任何东西,由我们决定(例如,在θ的合理值范围内均匀分布),因为最终我们将通过基于上述方程计算 p(θ|data) 来更新我们的信念(事实上,在将新数据或证据引入我们的模型后,p(θ|data) 是新的先验 p(θ))
似然函数 p(data|θ) 给出给定某个θ值时获得某个测量值(数据)的概率。似然函数是根据我们认为与观测值适当匹配的给定概率分布(或 pdf)计算得出的。
例如:如果你的实验只有两种结果(例如抛硬币,要么是正面,要么是反面),那么对 p(data|θ) 使用二项分布是合理的,因为二项分布只允许 2 种可能的结果。
后验分布 p(θ|data) 是根据观察到或测量到的新数据对 θ 分布的更新,并成为任何后续测量/观察的新的先验分布。
这里需要很多知识才能理解,但关键的要点在于三个函数(后验、似然和先验),具体地可以看教科书,了解了这三个,你就走在了正确的道路上。
那么,对于多次测量,这通常是如何起作用的呢?假设我们回到抛硬币问题。最初,我们对硬币一无所知,它可能是公平的(也可能不是)。假设我们想预测掷出正面的概率,并将该概率称为 θ。我们不知道它是什么,所以我们把它当作一个随机变量。接下来,我们计算给定一次抛硬币结果的后验分布,我们称之为x1:
接下来,我们再次抛硬币,我们将这个新的测量/结果称为 x2。给出前两个结果的后验分布现在是:
如你所见,我们使用p(θ|x1)作为下一个方程的先验分布,并代入之前的表达式。我们可以对第三个结果x3再次执行此操作,得到:
希望到此时,你能看到某种模式正在出现。假设你现在总共抛硬币n次,那么后验分布是什么?我们可以用数学形式将其写成:
我们的第一个先验分布 p(θ) 没有改变,因为它是我们最初的猜测。这个想法是,我们添加到结果中的数据点x越多,我们的后验分布就会越准确。还要注意,上述等式不仅适用于抛硬币,还适用于任何涉及单个未知参数θ 的贝叶斯问题。
现在,回到我们的例子,我们现在需要做的就是为先验 p(θ) 建立一个函数,为似然p(x|θ)建立一个函数。对于先验,选择范围为 [0,1] 的均匀分布,因为θ是一个概率,概率只能在 0 到 1 之间。接下来,对于似然函数,选择二项分布,即:
基本上,第一项告诉我掷出正面的概率,第二项告诉我掷出反面的概率(因此是反面)。这里的参数x是我掷硬币的第k个结果,表示为 1(如果掷出正面和0(如果不是正面)。将它们代入上面的方程可得出
现在,最后的结果确实很棒,只差最后一步重新规范化我们的后验分布,通过除以数据的边际概率来实现这一点:
使用Python编写此程序,使用θ = 0.25的硬币(意味着正面落地的概率为25%,反面落地的概率为 75%),得到不同次数的硬币抛掷的结果:
图2
图3
贝叶斯统计的伟大之处在于它可以用来检验假设。例如,假设有人给你一枚硬币,而你不知道它是否有偏差。计算N次抛硬币后的后验分布不仅能让你回答硬币是否有偏差,还能回答它偏差的程度,以及你对它有多么“确定”。当然,贝叶斯统计的内容远不止这些,这是一个庞大的学科领域。本文只是给你一个大概的感觉,希望你能喜欢。