mcmc采样python代码
时间: 2023-07-02 07:10:21 浏览: 178
PTMCMCSampler:用Python编写的并行调温MCMC采样器程序包
MCMC采样是一种用于生成随机样本的统计方法。在Python中,可以使用NumPy和SciPy库来实现MCMC采样。下面是一个简单的例子:
```python
import numpy as np
from scipy.stats import norm
# 定义目标分布
def target_distribution(x):
return np.exp(-x**2) * norm.pdf(x, loc=1, scale=2)
# 定义MCMC采样函数
def mcmc_sampling(target_distribution, proposal_distribution, num_samples):
# 初始状态
current_sample = 0
samples = []
for i in range(num_samples):
# 从建议分布中采样
proposed_sample = proposal_distribution(current_sample)
# 计算接受概率
acceptance_probability = min(1, target_distribution(proposed_sample) / target_distribution(current_sample) * proposal_distribution(current_sample) / proposal_distribution(proposed_sample))
# 决定是否接受
if np.random.uniform(0, 1) < acceptance_probability:
current_sample = proposed_sample
samples.append(current_sample)
return np.array(samples)
# 定义建议分布
def gaussian_proposal(x):
return np.random.normal(x, 1)
# 进行MCMC采样
samples = mcmc_sampling(target_distribution, gaussian_proposal, 10000)
# 绘制结果
import matplotlib.pyplot as plt
plt.hist(samples, bins=50, density=True)
x_range = np.linspace(-4, 4, 1000)
plt.plot(x_range, target_distribution(x_range))
plt.show()
```
这个例子中,我们定义了一个目标分布 `target_distribution`,它表示我们要采样的分布。我们还定义了一个建议分布 `gaussian_proposal`,它用于从当前状态生成建议样本。在 `mcmc_sampling` 函数中,我们使用这两个分布进行MCMC采样,并返回一组采样结果。最后,我们使用Matplotlib绘制了采样结果和目标分布的直方图。
阅读全文