19 贝叶斯学习与统计推断教程:马尔可夫链蒙特卡洛方法之MCMC方法的基础
系列进度
贝叶斯学习入门 · 第 19 / 24 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
贝叶斯学习的重点是把已有判断和新证据合在一起,并明确表达不确定性。阅读时可以按「MCMC方法简介 -> MCMC的基本原理 -> 案例分析:MCMC在贝叶斯回归中的应用 -> 使用Python实现MCMC」建立结构,再回到正文里的代码、案例或指标做验证。
读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「MCMC方法简介」,再查「MCMC的基本原理」。
在前一篇文章中,我们讨论了贝叶斯分类中的模型评估与改进,强调了如何通过有效的模型选择和验证来提升分类器的表现。这次,我们将介绍马尔可夫链蒙特卡洛(MCMC)方法的基础知识,作为下一篇关于Gibbs采样的铺垫。
MCMC方法简介
马尔可夫链蒙特卡洛(MCMC)是一种利用马尔可夫链来进行概率分布采样的统计方法。它非常适用于那些难以直接从中采样的复杂分布,尤其是在贝叶斯统计中,MCMC方法被广泛应用于后验分布的估计。
学习 MCMC 方法时,先看目标分布、采样链、接受概率、 burn-in、收敛诊断和样本自相关。
MCMC的基本原理
在MCMC中,我们需要构造一个马尔可夫链,使其稳定分布为我们想要的目标分布。该马尔可夫链通过一系列状态转移在状态空间中进行随机游走。在足够的时间后,这个链将收敛到目标分布上。
一个常见的MCMC方法是“Metropolis-Hastings”算法,其核心步骤包括:
- 初始化:选择一个初始状态。
- 迭代:
- 从提议分布中生成一个候选状态。
- 计算接受率:
- 以概率接受状态,否则保持当前状态。
案例分析:MCMC在贝叶斯回归中的应用
我们通过一个简单的案例来演示MCMC方法的应用。在贝叶斯线性回归中,我们假设模型为:
读《贝叶斯学习与统计推断教程:马尔可夫链蒙特卡洛方法之MCMC方法的基础》时,先确定要解决的场景,再把关键概念和练习动作串起来。这样读到细节时,不容易只记住零散名词。
其中,。我们希望从后验分布中抽样,后验分布的形式为:
我们选择一个简单的先验分布,比如。
使用Python实现MCMC
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 生成模拟数据
np.random.seed(42)
x = np.random.rand(100)
true_beta = [2, 3]
y = true_beta[0] + true_beta[1] * x + np.random.normal(0, 0.5, x.shape)
# MCMC实现
def mcmc_bayesian_linear_regression(x, y, iterations=10000):
n = len(y)
beta_samples = np.zeros((iterations, 2))
beta = np.random.randn(2) # 初始参数
for i in range(iterations):
# 生成新样本
beta_new = beta + np.random.normal(0, 0.5, 2)
# 计算后验概率比例
likelihood_current = np.sum(np.log(np.exp(-0.5 * ((y - (beta[0] + beta[1] * x)) / 0.5)**2)))
likelihood_new = np.sum(np.log(np.exp(-0.5 * ((y - (beta_new[0] + beta_new[1] * x)) / 0.5)**2)))
prior_current = np.exp(-0.5 * (beta[0]**2 / 10**2 + beta[1]**2 / 10**2))
prior_new = np.exp(-0.5 * (beta_new[0]**2 / 10**2 + beta_new[1]**2 / 10**2))
acceptance_ratio = (likelihood_new * prior_new) / (likelihood_current * prior_current)
if np.random.rand() < acceptance_ratio:
beta = beta_new
beta_samples[i] = beta
return beta_samples
# 运行MCMC
beta_samples = mcmc_bayesian_linear_regression(x, y)
# 绘制结果
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(beta_samples[:, 0], label=r'$\beta_0$ samples')
plt.title('Trace plot of $\beta_0$')
plt.subplot(1, 2, 2)
plt.plot(beta_samples[:, 1], label=r'$\beta_1$ samples', color='orange')
plt.title('Trace plot of $\beta_1$')
plt.legend()
plt.show()
# 可视化后验分布
sns.kdeplot(beta_samples[:, 0], label='Posterior of $\\beta_0$', fill=True)
sns.kdeplot(beta_samples[:, 1], label='Posterior of $\\beta_1$', fill=True, color='orange')
plt.title('Posterior distributions')
plt.legend()
plt.show()
在上面的代码中,我们实现了一个简单的贝叶斯线性回归模型的MCMC采样。我们通过迭代生成样本,并绘制了参数和的轨迹图和后验分布。这让我们直观地看到MCMC方法如何从复杂的后验分布中提取样本。
如果《贝叶斯学习与统计推断教程:马尔可夫链蒙特卡洛方法之MCMC方法的基础》还没完全消化,可以从这张卡片的四个动作重新走一遍。
回看《贝叶斯学习与统计推断教程:马尔可夫链蒙特卡洛方法之MCMC方法的基础》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。
结语
MCMC方法为我们提供了一种强大灵活的工具,在复杂的贝叶斯模型中进行参数推断。在下一个讲解中,我们将深入探讨更具体的MCMC变体——Gibbs采样,这是一种在某些条件下更为高效的采样方法。在应用MCMC方法时,理解其原理和实现是至关重要的,这将为您在贝叶斯统计的旅程中打下坚定的基础。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
贝叶斯学习与统计推断教程:马尔可夫链蒙特卡洛方法之MCMC方法的基础适合谁读?
这是 贝叶斯学习入门 系列第 19 / 24 篇,适合正在学习贝叶斯学习入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇贝叶斯学习入门教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读