Metropolis Hasting算法

Metropolis Hasting Algorithm:

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

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

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

试了一下MH算法,

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))

时间: 2024-10-17 20:13:36

Metropolis Hasting算法的相关文章

R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样

原文:http://tecdat.cn/?p=3772 创建测试数据 作为第一步,我们创建一些测试数据,用于拟合我们的模型.让我们假设预测变量和响应变量之间存在线性关系,因此我们采用线性模型并添加一些噪声. 我将x值平衡在零附近以“去相关”斜率和截距.结果应该看起来像右边的 trueA <- 5 trueB <- 0 trueSd <- 10 sampleSize <- 31   # create independent x-values x <- (-(sampleSize

MCMC: The Metropolis Sampler

本文主要译自 MCMC: The Metropolis Sampler 正如之前的文章讨论的,我们可以用一个马尔可夫链来对目标分布 \(p(x)\) 进行采样,通常情况下对于很多分布 \(p(x)\),我们无法直接进行采样.为了实现这样的目的,我们需要为马尔可夫链设计一个状态转移算子(transition operator),是的这个马尔可夫链的稳态分布与目标分布吻合.Metropolis 采样算法(更通常的是 Metropolis-Hastings 采样算法)采用简单的启发式方法实现了这样的状

MC, MCMC, Gibbs采样 原理&amp;实现(in R)

本文用讲一下指定分布的随机抽样方法:MC(Monte Carlo), MC(Markov Chain), MCMC(Markov Chain Monte Carlo)的基本原理,并用R语言实现了几个例子: 1. Markov Chain (马尔科夫链) 2. Random Walk(随机游走) 3. MCMC具体方法: 3.1 M-H法 3.2 Gibbs采样 PS:本篇blog为ese机器学习短期班参考资料(20140516课程),课上讲详述. 下面三节分别就前面几点简要介绍基本概念,并附上代

[转] - MC、MC、MCMC简述

贝叶斯集锦(3):从MC.MC到MCMC 2013-07-31 23:03:39 #####一份草稿 贝叶斯计算基础 一.从MC.MC到MCMC 斯坦福统计学教授Persi Diaconis是一位传奇式的人物.Diaconis14岁就成了一名魔术师,为了看懂数学家Feller的概率论著作,24岁时进入大学读书.他向<科学美国人>投稿介绍他的洗牌方法,在<科学美国人>上常年开设数学游戏专栏的著名数学科普作家马丁•加德纳给他写了推荐信去哈佛大学,当时哈佛的统计学家Mosteller 正

MCMC采样理论的一点知识

看了好多相关的知识,大致了解了一下马尔可夫链-蒙特卡罗采样理论,有必要记来下来. 蒙特卡罗积分:(来自:http://blog.csdn.net/itplus/article/details/19168937) 下面的写的很让人明白:好好理解一下,第一次感觉到积分与统计学的联系. 利用蒙特卡罗方法求积分的重点就是怎么如何采样指定的分布....简单的分布如均匀分布我们有方法可以采样,但是复复杂的分布呢?如高斯分布呢?你怎么办?? 这是就利用马尔可夫链的性质进行采样. 一些马尔可夫链的相关知识 在学

机器学习:Gibbs 采样

1. 什么是Gibbs采样 Gibbs采样是MH算法的一种特例(α==1),因此可以保证Gibbs抽取的样本,也构成一个非周期不可约稳定收敛的马氏链:Gibbs采样适用于样本是两维或以上的情况:通过积分去除掉相关但是不感兴趣的变量,称为"collapsed"的Gibbs采样:并且个人的一个感觉是,观测量所直接依赖的那些变量是不能被积分掉的,否则无法有效的进行抽样- gibbs采样需要知道样本中一个属性在其它所有属性下的条件概率,然后利用这个条件概率来分布产生各个属性的样本值.gibbs

MCMC: The Metropolis-Hastings Sampler

本文主要译自:MCMC:The Metropolis-Hastings Sampler 上一篇文章中,我们讨论了Metropolis 采样算法是如何利用马尔可夫链从一个复杂的,或未归一化的目标概率分布进行采样的.Metropolis 算法首先在马尔可夫链中基于上一个个状态 \(x^{(t-1)}\) 推荐一个新的状态 \(x^*\),这个新状态是根部建议分布 \(q(x^*|x^{(t-1)})\) 进行采样得到的.算法基于目标分布函数在 \(x^*\) 上的取值接受或者拒绝 \(x^*\).

MC, MCMC, Gibbs採样 原理&amp;amp;实现(in R)

本文用讲一下指定分布的随机抽样方法:MC(Monte Carlo), MC(Markov Chain), MCMC(Markov Chain Monte Carlo)的基本原理,并用R语言实现了几个样例: 1. Markov Chain (马尔科夫链) 2. Random Walk(随机游走) 3. MCMC详细方法: 3.1 M-H法 3.2 Gibbs採样 PS:本篇blog为ese机器学习短期班參考资料(20140516课程),课上讲详述. 以下三节分别就前面几点简要介绍基本概念,并附上代

metropolis算法的简单c++实现以及matlab实现

metropolis是一种采样方法,一般用于获取某些拥有某些比较复杂的概率分布的样本. 1.采样最基本的是随机数的生成,一般是生成具有均匀分布的随机数,比如C++里面的rand函数,可以直接采用. 2.采样复杂一点是转化发,用于生成普通常见的分布,如高斯分布,它的一般是通过对均匀分布或者现有分布的转化形成,如高斯分布就可以通过如下方法生成: 令:U,V为均匀分布的随即变量: 那么:Gauss=sqrt(-2lnU)cos(2*pi*V). (详细参照Box-Muller) 像这种高斯分布mate