MH算法的Python实现
时间: 2023-11-05 18:39:34 浏览: 190
MH算法,即Metropolis-Hastings算法,是一种用于蒙特卡洛模拟的采样算法,用于生成服从某个概率分布的样本。下面是一个简单的MH算法的Python实现示例:
```python
import numpy as np
def target_distribution(x):
# 目标分布的概率密度函数
return np.exp(-x**2) * np.sin(x)**2
def metropolis_hastings(n_iterations, initial_value, proposal_sd):
samples = [initial_value]
current_value = initial_value
for _ in range(n_iterations):
# 从建议分布中生成一个新的候选值
candidate = np.random.normal(current_value, proposal_sd)
# 计算接受概率
acceptance_prob = min(1, target_distribution(candidate) / target_distribution(current_value))
# 接受或拒绝候选值
if np.random.rand() < acceptance_prob:
current_value = candidate
samples.append(current_value)
return samples
# 设置参数
n_iterations = 10000 # 迭代次数
initial_value = 0 # 初始值
proposal_sd = 0.5 # 建议分布的标准差
# 运行MH算法
samples = metropolis_hastings(n_iterations, initial_value, proposal_sd)
# 打印结果
print("Mean:", np.mean(samples))
print("Standard Deviation:", np.std(samples))
```
在上述代码中,`target_distribution`函数定义了目标分布的概率密度函数。`metropolis_hastings`函数实现了MH算法的主要逻辑,包括生成候选值、计算接受概率以及接受或拒绝候选值。最后,通过运行`metropolis_hastings`函数,可以得到采样的样本序列,并计算样本的均值和标准差。
请注意,这只是一个简单的示例,实际应用中可能需要根据具体问题进行适当的修改和调整。
阅读全文