Slice Smapling算法

本文介绍了一种名为Slice Sampling的新采样技术,并详细解释了其算法流程。通过与Adaptive Rejection Sampling和Gibbs抽样的结合使用,可以有效解决从复杂分布中抽样的问题。文章还提供了使用R语言进行模拟实验的代码及结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看到一种新的Sampling技术,颇为兴奋。配上adaptive rejection sampling, Gibbs抽样就可以“无敌”了。

 

大致说说Slice sampling的算法:

我们想从一个密度分布为f(x)的函数中抽样

初始化:任意选择x0,步长w

for i= 1:n

 固定xi,在[0,f(xi)]区间上均匀抽样,得到yi

 固定yi,在函数值大于yi的x区间({x: f(x)>g(yi)})均匀抽样。

重复步骤,最后得到{xi,yi}的联合分布,从里面直接抽取到{xi}即得到x的边际模拟抽样结果。

 

上述算法实现的难点在第二步,如何从{x: f(x)>g(yi)}上均匀抽样。一种简便的算法如下:

1.对于第i步的xi,任意选取包含xi的长度为w的区间。

2.该区间的左右两个端点分别向左和向右延拓,知道端点的值都小于g(xi)

3.在上述区间中均匀抽样得到y,但是我们以一定概率接受它;如果g(y)<g(yi)则拒绝,以g(y)为新的端点重新抽样;如果g(y)>g(yi)则接受yi=y.

 

以下是我simulation的结果:

真实分布是一个高斯的混合分布,用slice sampling模拟的密度估计如图所示:

 

 

附代码(R):

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)*sig1)*exp(-0.5*(x-u1)^2/sig1^2)+1/(sqrt(2*pi)*sig2)*exp(-0.5*(x-u2)^2/sig2^2))
}

 

sample=function(init,time,w,u1,sig1,u2,sig2){
X=NULL
Y=NULL
X[1]=init

for (i in 1:time){
    Y[i]=runif(1,0,p(X[i],u1,sig1,u2,sig2))
    xl=X[i]-runif(1,0,w)
    xr=xl+w
    while(!((p(xl,u1,sig1,u2,sig2)<Y[i])&(p(xr,u1,sig1,u2,sig2)<Y[i]))){
        xl=xl-w
        xr=xr+w
    }
    x=runif(1,xl,xr)
    while(p(x,u1,sig1,u2,sig2)<Y[i]){
        if(x>X[i]){xr=x}else{xl=x}
        x=runif(1,xl,xr)
    }
    if(p(x,u1,sig1,u2,sig2)>Y[i]){X[i+1]=x} else{print('error')}
}
return(list(X,Y))
}


z=sample(20,50000,10,20,5,40,10)
plot(density(z[[1]]),ylim=c(0,0.03),ylab='density',main='')
x=seq(-100,100,0.01)
lines(x,p(x,20,5,40,10),lty=2)

内容概要:本文深入探讨了切片采样(Slice Sampling)作为一种高效的自适应马尔可夫链蒙特卡洛(MCMC)方法,其核心思想是从密度函数曲线下的区域均匀采样,交替进行垂直方向和水平“切片”的均匀采样。文章详细介绍了单变量、多变量切片采样的实现,并提出了多种改进技术,如反射切片采样、自适应步长调整、局部二次近似、过松弛技术和动态反射采样等。这些技术旨在克服传统MCMC方法(如Gibbs采样和Metropolis算法)的局限性,如步长不适应局部密度特性、随机游走行为导致效率低下等问题。文中还通过多个测试案例验证了这些改进方法的有效性,展示了它们在处理复杂分布(如多峰分布、高维相关分布、层次贝叶斯模型)时的优越性能。此外,文章进一步探讨了自适应拒绝采样(ARS)及其扩展ARMS、自适应Metropolis算法等其他MCMC技术,并将切片采样作为通用MCMC框架进行了深度解析,强调了其黑箱兼容性、调参简易性和自适应效率。 适合人群:具备一定概率统计和编程基础的研究人员和工程师,特别是对贝叶斯推断、MCMC方法及其应用感兴趣的读者。 使用场景及目标:①研究人员希望通过自适应MCMC方法提高采样效率;②工程师需要在实际项目中实现高效的贝叶斯模型参数估计;③学习者希望深入了解MCMC算法的实现细节及其改进策略;④解决传统MCMC方法在处理复杂分布时遇到的问题,如随机游走、步长选择等。 其他说明:本文不仅提供了理论分析,还附有详细的代码实现和测试案例,便于读者理解和实践。文中涉及的技术和方法对处理高维、复杂相关结构的数据具有重要价值,特别是在机器学习、统计建模等领域有着广泛的应用前景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值