如何使用均匀分布从对数变换分布中采样?

机器算法验证 贝叶斯 采样 均匀分布 对数
2022-04-09 14:39:42

我正在将未缩放的密度函数转换为对数比例以避免下溢问题。

在我使用对数变换之前,BI 在值网格上对该函数执行积分,以构建基于网格的累积分布函数。然后,使用来自制服 [0,1] 的抽签,我选择了网格上最大的点,其累积概率值小于来自制服的抽签。只要可以集成单变量密度函数,这种方法就可以正常工作。

随着对数比例的转换,我无法真正理解这种机制。联合似然是如此之小,以至于我无法对密度进行反向变换,因此我必须在对数尺度上执行相同的基于均匀分布的采样。这是一种既定的做法吗?反馈和指针将不胜感激。

1个回答

据我了解,您通常已离散化以创建一组,概率为,然后计算累积概率,例如所以你可以画然后取 where,或类似的东西。nx1,,xnp1,,pnci=j=1ipjUUniform(0,1)X=xii=mini{i:ciU}

但是您当前的问题是pi太小了,您只想使用ai=logpi

一种方法是将从最大到最小排序,然后使用类似于以下函数的函数计算部分和,该函数根据aiaddloglog(f+g)a=log(f)b=log(g)

addlog(a, b, THRESH=200.0)
{
  if(b > a + THRESH) return(b);
  else if(a > b + THRESH) return(a);
  else return(a + log1p(exp(b-a)));
}

哪里log1p(x)返回log(1+x)

但是,实际上,我认为您应该关注足够大而无需担心下溢的 x_i ,而忽略非常如果所有都很小,那么您似乎应该更粗略地网格化。我认为,在大多数应用程序中,离散化到 1000 个左右的值就足够了。xipixipipi