马尔可夫链蒙特卡罗法
马尔可夫链蒙特卡罗法(Markov Chain Monte Carlo, MCMC)用于从复杂概率分布中采样。当目标分布难以直接采样时,可以构造一个马尔可夫链,使其平稳分布正好是目标分布。
概念详解
马尔可夫链满足:
如果转移矩阵
Metropolis-Hastings 推导
给定当前状态
若建议分布对称,则化简为:
该转移满足细致平衡:
应用代码
python
import numpy as np
def target(x):
return np.exp(-0.5 * x ** 2)
x = 0.0
samples = []
accept = 0
for _ in range(10000):
proposal = x + np.random.normal(0, 1.0)
ratio = target(proposal) / target(x)
if np.random.rand() < min(1, ratio):
x = proposal
accept += 1
samples.append(x)
samples = np.array(samples)
print("接受率:", accept / len(samples))
print("均值:", samples.mean())
print("方差:", samples.var())小结
MCMC 的优势是可以处理复杂分布,缺点是样本相关性强、收敛诊断困难。实际应用中需要关注 burn-in、步长、接受率和多链诊断。