MCMC算法之Metropolis-Hastings(MHs)算法(Matlab代码)

26 篇文章 1 订阅
7 篇文章 1 订阅

1. Problem:

An MH step of invariant distribution p(x) p ( x ) and proposal distribution q(x|x) q ( x ∗ | x ) involves sampling a candidate value x x ∗ given the current value x x according to q(x|x). The Markov chain then moves towards x x ∗ with acceptance probability A(x,x)=min{1,[p(x)q(x|x)]1p(x)q(x|x)} A ( x , x ∗ ) = m i n { 1 , [ p ( x ) q ( x ∗ | x ) ] − 1 p ( x ∗ ) q ( x | x ∗ ) } , otherwise it remains at x x . The pseudo code is shown in the figure 1, while the following figures show the results of running the MHs algorithm with a Gaussian proposal distribution q(x|x(i))=N(x(i),10) and a bimodal target distribution p(x)0.3 exp(0.2x2)+0.7 exp(0.2(x10)2) p ( x ) ∝ 0.3   e x p ( − 0.2 x 2 ) + 0.7   e x p ( − 0.2 ( x − 10 ) 2 ) for 10000 iterations. As expected, the histogram of the samples approximates the target distribution.

2. Pseudo code:

pseudo-code

3. MHs cases:

Case 1: General acceptance probability:
Acceptance probability: A(x,x)=min{1,p(x)q(x|x)p(x)q(x|x)} A ( x , x ∗ ) = m i n { 1 , p ( x ∗ ) q ( x | x ∗ ) p ( x ) q ( x ∗ | x ) }
Case 2: Metropolis algorithm:
Acceptance probability: q(x|x)=q(x|x)A(x,x)=min{1,p(x)p(x)} q ( x ∗ | x ) = q ( x | x ∗ ) ⇒ A ( x , x ∗ ) = m i n { 1 , p ( x ∗ ) p ( x ) }
Case 3: Independent sampler:
Acceptance probability: q(x|x)=q(x)A(x,x)=min{1,p(x)q(x)p(x)q(x)} q ( x ∗ | x ) = q ( x ∗ ) ⇒ A ( x , x ∗ ) = m i n { 1 , p ( x ∗ ) q ( x ) p ( x ) q ( x ∗ ) }

4. Matlab code:

% Metropolis(-Hastings) algorithm
% true (target) pdf is p(x) where we know it but can't sample data. 
% proposal (sample) pdf is q(x*|x)=N(x,10) where we can sample.
%% 
clc
clear; 

X(1)=0; 
N=1e4;
p = @(x) 0.3*exp(-0.2*x.^2) + 0.7*exp(-0.2*(x-10).^2); 
dx=0.5; xx=-10:dx:20; fp=p(xx); plot(xx,fp) % plot the true p(x)
%% MH algorithm
sig=(10); 
for i=1:N-1
    u=rand;
    x=X(i); 
    xs=normrnd(x,sig); % new sample xs based on existing x from proposal pdf.
    pxs=p(xs);
    px=p(x); 
    qxs=normpdf(xs,x,sig);
    qx=normpdf(x,xs,sig); % get p,q.
     if u<min(1,pxs*qx/(px*qxs))  % case 1: pesudo code
%     if u<min(1,pxs/(px))        % case 2: Metropolis algorithm
%     if u<min(1,pxs/qxs/(px/qx)) % case 3: independent sampler
        X(i+1)=xs;
    else
        X(i+1)=x; 
    end
end
% compare pdf of the simulation result with true pdf.
N0=1;  close all;figure; %N/5; 
nb=histc(X(N0+1:N),xx); 
bar(xx+dx/2,nb/(N-N0)/dx); % plot samples.
A=sum(fp)*dx; 
hold on; plot(xx,fp/A,'r') % compare.
% figure(2); plot(N0+1:N,X(N0+1:N)) % plot the traces of x.

% compare cdf with true cdf.
F1(1)=0;
F2(1)=0;
for i=2:length(xx) 
  F1(i)=F1(i-1)+nb(i)/(N-N0); 
  F2(i)=F2(i-1)+fp(i)*dx/A;
end

figure
plot(xx,[F1' F2'])
max(F1-F2) % this is the true possible measure of accuracy.

5. Results:

Result of Case 1:

这里写图片描述

Result of Case 2:

这里写图片描述

Result of Case 3:

这里写图片描述


References:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值