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)
上一篇 2021年12月8日 上午7:00
下一篇 2021年12月8日 上午8:00


相关推荐

  • 在Ubuntu中安装交叉编译器_为什么一直安装中

    在Ubuntu中安装交叉编译器_为什么一直安装中本文讲述了在Ubuntu中安装pycharm的具体步骤准备环境:Ubuntu21.10,Pycharm2021.1.3具体步骤:1.首先下载pycharm:Pycharm官方下载地址我在这里选择的是2021.1.3的专业版,选择下载Linux版本的pycharm下载好的pycharm如图所示:2.右键点击刚刚下载的文件,选择提取到此处3.打开终端,输入cd命令行,进入刚刚解压文件夹下的bin文件夹,命令行是cd文件夹名称,并按回车键cdpycharm-professional-20

    2025年7月23日
    5
  • python3异常可直接抛出_python自定义异常

    python3异常可直接抛出_python自定义异常python抛出异常的方法发布时间:2020-08-1411:10:34来源:亿速云阅读:89作者:小新这篇文章主要介绍python抛出异常的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。python学习网,大量的免费python视频教程,欢迎在线学习!常见异常#…

    2022年10月18日
    7
  • vue中使用input file上传文件

    vue中使用input file上传文件刚刚学习前端的时候还是觉得这个东西好难的样子,后来第一家公司由于没有这个需求就没用过,现在这家公司由于要求很完美的组件,我就是用的vue组件vue-image-crop-upload(适用于pc端的比较好的组件),先在这里记录用法下次再去把vue-images-crop-upload这个组件记录下…

    2022年7月17日
    78
  • cj广告联盟「建议收藏」

    cj广告联盟「建议收藏」CommissionJunction(简称CJ)是目前国外最大的综合网络广告商,拥有超过1000家赞助商,且每天都有新的公司加入,支持中文网站,是站长赚钱的第一选择。公司业务广泛,技术完善,相对于其它综合网络广告商的优点是由其每月统一付款,但正应为如此,所以要求严格。公司支持中文网站,每推荐一人获得$1.5美金。最小起付额为25美元,每月统计付款。CJ,全称Com…

    2026年1月27日
    4
  • 数据结构(栈&堆 )

    数据结构(栈&堆 )

    2021年9月3日
    59
  • windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue

    windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue这三个函数主要用来提升进程的权限1OpenProcessToken()函数:获取进程的令牌句柄OpenProcessToken的原型.BOOLWINAPIOpenProcessToken(__inHANDLEProcessHandle,__inDWORDDesiredAccess,__outPHA

    2022年6月25日
    32

发表回复

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

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