python实现Metropolis采样算法实例

马尔可夫链蒙特卡罗(Markov Chain Monte Carlo ,MCMC )方法主要算法有:Metropolis-Hastings (MH)算法、Metropolis采样算法,以及吉布斯采样方法,后两者都可以看作是MH算法的特例。

Metropolis-Hastings (MH)算法

步骤:

 

 

Metropolis采样算法

步骤和MH算法一样,只是利用的提议分布是对称的,即:=,所以分子分母中可以约掉。

 

仿真

目的:用标准正态分布(提议分布)模拟另外一个标准正态分布(目标分布),我们想生成符合这个密度函数的随机采样(这里再强调一下,我们的提议分布函数为 proposal distribution,是比较好采样的,目标函数 target distribution 是不好采样的,我们通过好采样的函数采样,然后判断采到的样本是否被接受);

目标分布:μ=0,σ=5的正态分布;

提议分布:μ= 采样点处,σ=2的正态分布。

 

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

np.random.seed(42)
x=np.linspace(-20,20,100)
# raw_y=stats.expon(scale=1).pdf(x)
raw_y=stats.norm.pdf(x,0,5)

Samp_Num=10000
result=[]
init=1
result.append(init)
# p=lambda r:stats.expon(scale=1).pdf(r)
p=lambda r:stats.norm.pdf(r,0,5)
q=lambda v:stats.norm.rvs(loc = v,scale = 2, size = 1)

for i in range(Samp_Num):
    xstar=q(result[i])
    alpha=min(1,p(xstar)/p(result[i]))
    u=np.random.rand(1)
    if u<alpha:
        result.append(xstar)
    else:
        result.append(result[i])
    print(i)

n, bins, patches = plt.hist(result, 50, density=1, facecolor='blue', alpha=0.5)
plt.plot(x,raw_y)
plt.show()

  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: Metroplis算法和拒绝接受方法都是用于模拟马尔可夫链的算法,但它们的实现方式有所不同。Metroplis算法会接受一些不太好的状态,而拒绝接受方法则会完全拒绝这些状态。Metroplis算法会根据一个接受概率来决定是否接受一个状态,而拒绝接受方法则只接受更好的状态。 ### 回答2: Metroplis算法和拒绝接受方法都是用于模拟随机过程中的采样问题,但它们在实现上有不同。 首先,Metroplis算法是一种马尔可夫链蒙特卡洛采样方法,它通过在概率空间中进行随机游走来生成样本。具体而言,Metroplis算法首先根据当前的状态计算一个候选状态,并计算其与当前状态的比例。然后,根据这个比例确定是否接受候选状态作为下一个状态,如果接受,则转移到新状态,否则保持当前状态。Metroplis算法通过按照一定的概率接受不太好的候选状态,以便在概率空间中遍历到更广阔的区域,从而更好地探索概率分布。 而拒绝接受方法则是一种直接拒绝某些样本并接受其他样本的方法。它首先根据某个提议分布生成一个候选样本,并计算该候选样本在目标分布下的比例。然后,根据该比例和一个阈值确定是否接受候选样本。如果比例超过阈值,则接受候选样本,否则拒绝。拒绝接受方法相比Metroplis算法更加简单直观,但对于高维复杂的问题,容易产生大量的拒绝样本,效率较低。 综上所述,Metroplis算法通过接受不太好的候选状态来增加探索的范围,而拒绝接受方法则是通过设定阈值来决定是否接受候选样本。这两种方法在特定的采样问题中具有不同的应用和效果。 ### 回答3: Metroplis算法和拒绝接受方法都是用于求解概率分布的采样方法,但它们在一些方面有所不同。 首先,Metroplis算法是马尔可夫链蒙特卡罗(MCMC)的一种形式,而拒绝接受方法是直接对概率分布进行采样。Metroplis算法通过构建马尔可夫链,在当前状态下根据特定的转移概率进行状态间的转移,从而逐步接近目标分布。而拒绝接受方法则是通过生成服从某个简单分布的提议样本,并根据目标分布与提议分布的比例关系决定是否接受该样本。 其次,在接受/拒绝的过程中,Metroplis算法通过计算接受概率来决定是否接受新样本,而拒绝接受方法则是直接比较两个分布的值来决定是否接受新样本。Metroplis算法中的接受概率由转移概率和目标分布比例共同决定,可以通过权衡这两者来平衡效率和样本质量;而拒绝接受方法则无法自适应地调整接受概率,导致采样效率可能较低。 最后,Metroplis算法具有马尔可夫链的性质,因此可以利用马尔可夫链的收敛性来验证采样结果的稳定性;而拒绝接受方法则不具备马尔可夫链性质,无法直接利用收敛性进行验证。 综上所述,Metroplis算法和拒绝接受方法在采样原理和策略上有所不同,以及在接受/拒绝机制和采样效率上存在差异。根据实际问题和需求的不同,选择合适的方法可以提高采样的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

David-Chow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值