Metropolis 算法:一种蒙特卡洛采样技术
Metropolis 算法,由 Nicholas Metropolis 等人在 1953 年提出,是一种广泛使用的蒙特卡洛(Monte Carlo)采样方法。它特别适用于从多维分布中生成样本,尤其是当这些分布的解析形式难以处理时。
什么是 Metropolis 算法?
Metropolis 算法是一种基于随机抽样的算法,用于近似计算物理系统在热平衡状态下的性质。它通过构建一个马尔可夫链(Markov Chain),使得链的平稳分布与我们想要采样的分布相同。
Metropolis 算法的步骤
Metropolis 算法的执行步骤通常包括:
- 选择初始状态:从可能的状态空间中随机选择一个初始状态。
- 生成提议状态:从当前状态出发,根据提议分布生成一个新状态的提议。
- 计算接受比率:确定是否接受这个提议,这通常涉及到计算当前状态和提议状态的概率比率。
- 决定是否接受提议:根据接受比率,随机决定是否接受这个新状态。
- 迭代:重复步骤2-4,直到获得足够多的样本。
Metropolis 算法的关键概念
- 马尔可夫链:Metropolis 算法依赖于马尔可夫链的性质,即下一个状态的概率只依赖于当前状态,而与之前的历史无关。
- 接受比率:决定是否接受新状态的关键因素,通常涉及到目标分布和提议分布之间的比较。
Metropolis 算法的优点
- 简单性:算法相对简单,易于理解和实现。
- 适用性:适用于各种复杂的概率分布。
- 灵活性:可以根据不同的问题定制提议分布。
一个例子
import numpy as np
import matplotlib.pyplot as plt
# 二项分布数据生成,14个1,3个0
my_data = np.concatenate([np.ones(14), np.zeros(3)])
# 定义似然函数 p(D|theta)
def likelihood(theta, data):
z = np.