Metropolis Hasting算法

Metropolis Hasting算法

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Metropolis Hasting Algorithm:

 

MH算法也是一种基于模拟的MCMC技术,一个非常重要的应用是从给定的概率分布中抽样。主要原理是构造了一个精妙的Markov链,使得该链的稳态 是你给定的概率密度。它的优点,不用多说,自然是能够对付数学形式复杂的概率密度。有人说,单维的MH算法配上Gibbs Sampler差点儿是“无敌”了。

 

今天试验的过程中发现,MH算法想用好也还不简单,里面的转移參数设定就不是非常好弄。即使用最简单的高斯漂移项,方差的确定也是个头疼的问题,须要不同问题不同对待,多试验几次。当然你也能够始终选择“理想”參数。

 

还是拿上次的混合高斯分布来做模拟,模拟次数为500000次的时候,概率分布逼近的程度例如以下图。尽管几个明显的”峰”已经出来了,可是数值上还是 有非常大差异的。预计是我的漂移方差没有选好。感觉还是inverse sampling好用,迭代次数不用非常多,就能够达到相当的逼近程度。

 

 

试了一下MH算法,Metropolis Hasting算法

 

 

 

R Code:

p=function(x,u1,sig1,u2,sig2){
(1/3)*(1/(sqrt(2*pi)*15)*exp(-0.5*(x-70)^2/15^2)+1/(sqrt(2*pi)*11)*exp(-0.5*(x+80)^2/11^2)+1/(sqrt(2*pi)*sig1)*exp(-0.5*(x-u1)^2/sig1^2)+1/(sqrt(2*pi)*sig2)*exp(-0.5*(x-u2)^2/sig2^2))
}

MH=function(x0,n){
x=NULL
x[1] = x0
for (i in 1:n){
  x_can= x[i]+rnorm(1,0,3.25)
  d= p(x_can,10,30,-10,10)/p(x[i],10,30,-10,10)
  alpha= min(1,d)
  u=runif(1,0,1)
    if (u<alpha){
    x[i+1]=x_can}
    else{
      x[i+1]=x[i]
     }
   if (round(i/100)==i/100) print(i)
}
x
}
z=MH(10,99999)
z=z[-10000]
a=seq(-100,100,0.2)

plot(density(z),col=1,main=’Estimated Density’,ylim=c(0,0.02),lty=1)
points(a, p(a,10,30,-10,10),pch=’.’,col=2,lty=2)
legend(60,0.02,c(“True”,”Sim (MH)”),col=c(1,2),lty=c(1,2))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118302.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm2021.3激活码破解方法

    pycharm2021.3激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    367
  • Heartbleed心脏出血漏洞原理分析

    Heartbleed心脏出血漏洞原理分析Heartbleed心脏出血漏洞原理分析Heartbleed心脏出血漏洞原理分析2017年01月14日18:14:25阅读数:27182017年01月14日18:14:25阅读数:271

    2022年7月1日
    23
  • java编码native2ascii下载_native2ascii.exe

    java编码native2ascii下载_native2ascii.exenative2ascii.exe是一款好用的转码工具,主要用于字符转码和反转码,在Java开发过程中总会出现一些乱码问题或者无法正确识别读取的问题,这时候就需要进行转码,可对属性文件和其他字符编码进行转换,从而解决上述问题。需要的Java开发人员可下载!基本介绍native2ascii工具是对属性文件和其他字符编码进行相互转换。在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的…

    2022年9月12日
    0
  • 11.1 LAMP架构介绍11.2 MySQL_MariaDB介绍11.3-11.5 MySQL安装

    11.1 LAMP架构介绍11.2 MySQL_MariaDB介绍11.3-11.5 MySQL安装

    2022年3月11日
    41
  • compass 制作精灵图

    compass 制作精灵图用compass快速制作精灵图1.现在images文件夹新建一个文件夹装各种小图标,命名为Icon;2.然后再sass文件加上这几句命令:@import”compass/utilities/sprites” ; //导入compass精灵模块;$Icon-spacing:5px; //设置生成的精灵图里面每个小图标的间距是5px;如果只是想设置某个图标的间距可以这样做:

    2022年5月3日
    40
  • pycharm运行不了程序_如何完全卸载pycharm

    pycharm运行不了程序_如何完全卸载pycharm在尝试了各种常规操作后,均无法打开,最后终于解决了!!!现在cmd中输入pycharm报错OpenJDK64-BitServerVMwarning:OptionUseConcMarkSweepGCwasdeprecatedinversion9.0andwilllikelyberemovedinafuturerelease.ErroroccurredduringinitializationofVMInitialheapsizesettoa

    2022年8月29日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号