Skip to content

马尔可夫链蒙特卡罗法

马尔可夫链蒙特卡罗法(Markov Chain Monte Carlo, MCMC)用于从复杂概率分布中采样。当目标分布难以直接采样时,可以构造一个马尔可夫链,使其平稳分布正好是目标分布。

概念详解

马尔可夫链满足:

P(Xt+1|Xt,Xt1,,X0)=P(Xt+1|Xt)

如果转移矩阵 P 存在平稳分布 π,则:

πP=π

Metropolis-Hastings 推导

给定当前状态 x,从建议分布 q(x|x) 中采样候选点 x。接受概率为:

α(x,x)=min(1,π(x)q(x|x)π(x)q(x|x))

若建议分布对称,则化简为:

α(x,x)=min(1,π(x)π(x))

该转移满足细致平衡:

π(x)P(x,x)=π(x)P(x,x)

应用代码

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、步长、接受率和多链诊断。