郭震 AI公众号:郭震AI

11 贝叶斯因子与模型比较

发布日期:

最近更新:

分类: 贝叶斯学习

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点5 个
图文要点6 张
正文规模1.6k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 5 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

贝叶斯因子与模型比较结构图查看大图
贝叶斯因子与模型比较结构图

贝叶斯学习的重点是把已有判断和新证据合在一起,并明确表达不确定性。阅读时可以按「贝叶斯因子 -> 贝叶斯因子的计算 -> 示例:正态分布模型 -> Python示例代码」建立结构,再回到正文里的代码、案例或指标做验证。

贝叶斯因子与模型比较核对图查看大图
贝叶斯因子与模型比较核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「贝叶斯因子」,再查「贝叶斯因子的计算」。

在上一篇中,我们探讨了模型选择的一个重要方面——模型的复杂度。我们了解了复杂度如何影响模型的表现,并且讨论了如何使用信息准则来评估不同模型。然而,真正的挑战在于如何在多个模型之间进行选择,而贝叶斯因子为此提供了一种有效的工具。

贝叶斯因子

贝叶斯因子(Bayes Factor)是一个用于比较两个模型的指标。设定有两个模型 M1M_1M2M_2,贝叶斯因子 BF12\text{BF}_{12} 被定义为这两个模型的后验概率之比。具体来说,贝叶斯因子可以表示为:

贝叶斯因子模型比较卡查看大图
贝叶斯因子模型比较卡

学习贝叶斯因子时,先看两个模型各自如何解释观测数据,再比较证据比值和解释力度。

BF12=P(数据M1)P(数据M2)\text{BF}_{12} = \frac{P(\text{数据} | M_1)}{P(\text{数据} | M_2)}

这里 P(数据M)P(\text{数据} | M) 是在模型 MM 下观察到数据的边际似然。

贝叶斯因子的意思是,在观察到数据后,相对支持 M1M_1M2M_2 的程度。如果 BF12>1\text{BF}_{12} > 1,则说明数据更支持模型 M1M_1;反之如果 BF12<1\text{BF}_{12} < 1,则支持模型 M2M_2

贝叶斯因子的计算

虽然贝叶斯因子看起来很简单,但其计算并非那么易于实现。因为计算 P(数据M)P(\text{数据} | M) 通常需要对所有参数进行积分,这在计算上是昂贵的。对于简单模型,可能会有解析解,但对于复杂模型,通常需要使用数值方法。

贝叶斯学习阅读地图卡查看大图
贝叶斯学习阅读地图卡

《贝叶斯因子与模型比较》可以按“场景、概念、动作、结果”来读。先把这四件事对齐,再回到正文里的参数、代码或流程。

我们以一个简单的案例来显示如何计算贝叶斯因子。

示例:正态分布模型

假设我们有一组数据,来自于单个正态分布的观测,我们需要比较两个模型:

  • 模型 M1M_1: 假设均值已知,方差未知。
  • 模型 M2M_2: 假设均值和方差均未知。

在模型 M1M_1 下,假设均值为 μ0\mu_0,则边际似然可以表示为:

P(数据M1)=常数σnexp((xμ0)22σ2)P(\text{数据} | M_1) = \text{常数} \cdot \sigma^{-n} \exp\left(-\frac{(x - \mu_0)^2}{2\sigma^2}\right)

而在模型 M2M_2 中,考虑均值和方差均未知的情况,其边际似然的计算较为复杂:

P(数据M2)=P(数据μ,σ)P(μ)P(σ)dμdσP(\text{数据} | M_2) = \int P(\text{数据} | \mu, \sigma) P(\mu) P(\sigma) d\mu d\sigma

在这个例子中,通常需要利用马尔科夫链蒙特卡洛(MCMC)方法来评估积分。

Python示例代码

以下是一个简单的 Python 代码示例,演示如何使用 PyMC3 库计算贝叶斯因子。

import numpy as np
import pymc3 as pm

# 生成数据
data = np.random.normal(loc=5.0, scale=2.0, size=100)

# 使用 PyMC3 模型
with pm.Model() as model1:  # 模型 M1
    mu = pm.Normal('mu', mu=5, sigma=1)
    sigma = pm.HalfNormal('sigma', sigma=1)
    likelihood = pm.Normal('likelihood', mu=mu, sigma=sigma, observed=data)
    
    trace1 = pm.sample(1000, return_inferencedata=False)

with pm.Model() as model2:  # 模型 M2
    mu = pm.Normal('mu', mu=0, sigma=10)
    sigma = pm.HalfNormal('sigma', sigma=10)
    likelihood = pm.Normal('likelihood', mu=mu, sigma=sigma, observed=data)
    
    trace2 = pm.sample(1000, return_inferencedata=False)

# 计算边际似然
marginal_likelihood1 = pm.sample_posterior_predictive(trace1)
marginal_likelihood2 = pm.sample_posterior_predictive(trace2)

# 贝叶斯因子
bayes_factor = np.mean(marginal_likelihood1) / np.mean(marginal_likelihood2)
print(f"贝叶斯因子 BF_12: {bayes_factor}")

这个示例中,我们生成了一组正态分布数据,并使用 PyMC3 构建了两个模型,最后计算出贝叶斯因子。

贝叶斯因子与模型比较应用复盘卡查看大图
贝叶斯因子与模型比较应用复盘卡

如果《贝叶斯因子与模型比较》还没完全消化,可以从这张卡片的四个动作重新走一遍。

贝叶斯因子与模型比较应用检查卡查看大图
贝叶斯因子与模型比较应用检查卡

回看《贝叶斯因子与模型比较》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。

结论

贝叶斯因子是模型选择的重要工具,相比于传统的假设检验方式,它提供了一种更直观的模型比较方法。尽管计算上可能会很复杂,但现代计算工具使得这种计算变得可行。了解贝叶斯因子的计算和意义,为下一步研究 过拟合与正则化 打下了良好的基础。在下一篇中,我们将讨论如何使用正则化技术来改善模型的表现,并有效应对过拟合问题。

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

贝叶斯因子与模型比较适合谁读?

这是 贝叶斯学习入门 系列第 11 / 24 篇,适合正在学习贝叶斯学习入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇贝叶斯学习入门教程要多久?

按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...