1. Problem:

An MH step of invariant distribution p(x)p(x)p(x) and proposal distribution q(x∗|x)q(x∗|x)q(x ^*| x) involves sampling a candidate value x∗x∗x^* given the current value xxx according to q(x∗|x)" role="presentation">q(x∗|x)q(x∗|x)q(x^*| x). The Markov chain then moves towards x∗x∗x^* with acceptance probability A(x,x∗)=min{1,[p(x)q(x∗|x)]−1p(x∗)q(x|x∗)}A(x,x∗)=min{1,[p(x)q(x∗|x)]−1p(x∗)q(x|x∗)}A(x, x^*) = \mathrm{min}\{1, [p(x)q(x^*|x)]^{−1}p(x^*)q(x | x^*)\}, otherwise it remains at xxx. 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)" role="presentation">q(x∗|x(i))=N(x(i),10)q(x∗|x(i))=N(x(i),10)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(x−10)2)p(x)∝0.3exp(−0.2x2)+0.7exp(−0.2(x−10)2) p(x) ∝ 0.3~exp(−0.2x^2) +0.7~exp(−0.2(x − 10)^2) for 10000 iterations. As expected, the histogram of the samples approximates the target distribution.

2. 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∗)=min{1,p(x∗)q(x|x∗)p(x)q(x∗|x)}A(x, x^*) = \mathrm{min}\{1, \frac{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∗)=min{1,p(x∗)p(x)} q(x^*| x) = q(x| x^*)\Rightarrow A(x, x^*) = \mathrm{min}\{1, \frac{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∗)=min{1,p(x∗)q(x)p(x)q(x∗)} q(x^*| x) = q(x^*)\Rightarrow A(x, x^*) = \mathrm{min}\{1, \frac{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-1u=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 samplerX(i+1)=xs;elseX(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;
endfigure
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

MCMC算法之Metropolis-Hastings(MHs)算法(Matlab代码)相关推荐

  1. MCMC中的Metropolis–Hastings算法与吉布斯采样

    Metropolis–Hastings算法是一种具体的MCMC方法,而吉布斯采样(Gibbs Sampling)是Metropolis–Hastings算法的一种特殊形式.二者在机器学习中具有重要作用 ...

  2. 3.蚁群算法求解格栅地图路径规划matlab代码

    往期: 1.Dijkstra算法求解格栅地图路径matlab代码_墨叔叔的博客-CSDN博客 2.A*搜索算法原理及matlab代码_墨叔叔的博客-CSDN博客 一.蚁群算法原理 原理:蚁群系统(An ...

  3. 基于基于粒子群优化算法的微电网调度(Matlab代码实现)

    目录 ⛳️1 写在前面 ⛳️2 基于基于粒子群优化算法的微电网调度(Matlab代码实现)

  4. 利用粒子群算法求解电力系统无功优化的MATLAB代码,以网损和电压偏差为目标函数

    利用粒子群算法求解电力系统无功优化的MATLAB代码,以网损和电压偏差为目标函数,有注释和相关的参考文献. ID:6925651017361264 浪迹天涯 技术交流 资源共享 莫如博客陪您进步! 本 ...

  5. 利用粒子群算法求解电力系统无功优化的MATLAB代码

    利用粒子群算法求解电力系统无功优化的MATLAB代码,以网损和电压偏差为目标函数,有注释和相关的参考文献. ID:8125651017361264浪迹天涯

  6. mh采样算法推导_科学网—MCMC中的Metropolis Hastings抽样法 - 张金龙的博文

    Metropolis Hastings抽样法示例 jinlongzhang01@gmail.com Metropolis Hasting(下面简称MH)是蒙特卡罗马尔科夫链中一种重要的抽样方法.本文简 ...

  7. 【优化求解】基于秃鹰算法BES求解最优目标matlab代码

    1 简介 秃鹰搜索 (bald eagle search,BES) 优化是马来西亚学者Alsattar 于2020年提出的一种新型元启发式算法, 该算法具有较强的全局搜索能力, 能够有效地解决各类复杂 ...

  8. 【优化求解】基于灰狼算法GWO求解最优目标matlab代码

    1 简介 Mirjalili 等人提出了一种新的群体智能算法---灰狼优化算法(GWO),并通过多个基准测试函数进行测试,从结果上验证了该算法的可行性,通过对比,GWO 算法已被证明在算法对函数求解精 ...

  9. 鲁棒优化入门(4)-两阶段鲁棒优化及行列生成算法(CCG)超详细讲解(附matlab代码)

    本文的主要参考文献: Zeng B , Zhao L . Solving Two-stage Robust Optimization Problems by A Constraint-and-Colu ...

  10. 【优化求解】基于蝗虫算法求解单目标问题附matlab代码

    1 简介 蝗虫算法( Grasshopper Optimization Algorithm,GOA ) 是 由 Saremi 等[1]于2017 年提出的一种元启发式仿生优化算法.具体原理如下: 2 ...

最新文章

  1. 在CentOS 6.9 x86_64的nginx 1.12.2上开启标准模块ngx_http_auth_request_module实录
  2. 百度地图示例左侧的代码编辑器Ace Editor
  3. ubuntu下面pycharm设置pyspark的配置
  4. ASP.NET Core Web程序托管到Windows 服务
  5. python清空列表clear_如何在Python中清空列表?
  6. 店铺咨询系统c语言,课内资源
  7. java用户登录窗口怎么删除_从窗口中删除 Headers 栏 . 窗口过程由不同的用户启动...
  8. 2021年双十一大复盘:众人唱衰双十一,我们却发现了这些机会
  9. c# 获取字符串的字节数
  10. 布客·ApacheCN 翻译/校对/笔记整理活动进度公告 2020.1
  11. win7企业版激活秘钥激活kms安装激活教程
  12. JAVA正则表达式校验中国大陆手机号段【2022年2月】
  13. 支付宝扫码支付php demo
  14. 胎死腹中的天颖工作室-2004年初的痛楚
  15. C语言人五英尺七英寸,“5英尺7英寸”等于多少厘米
  16. 他向导师下跪,仍被强制退学!5年博士白读,双方各执一词,同门师兄也有回应……...
  17. vivo X90、vivo X90 Pro和vivo X90 Pro+的区别 参数对比哪个好
  18. 编程语言 - 强弱/动静态类型 - 整理
  19. 房天下全国658个城市新房,二手房爬取
  20. md文件如何编辑和转换(不依赖插件Markdown Viewer)

热门文章

  1. 关于IplImage的widthstep
  2. 无盘工作站建立全攻略
  3. 固高运动控制卡学习3 --前瞻预处理
  4. springboot 微信支付接口(H5)
  5. PHP微信H5支付Demo
  6. Linux 环境下maven安装配置
  7. 计算机应用基础第十一版答案,计算机应用基础试题十一.xls
  8. uniapp 调用阿里云OCR身份证识别
  9. 封装自己的Flex工具_SocketTool
  10. 怎么用计算机录制mp3的音频,内录音频是什么_如何用电脑内录音频图文步骤