我正在尝试实现命中并运行 MCMC 算法,但我在理解如何去做时遇到了一些麻烦。大体思路,如下:
为了在 MH 中生成提案跳转,我们:
- 生成方向从单位球面上的分布
- 生成有符号距离沿着受限空间。
但是,我不知道应该如何在 R(或任何其他语言)中实现它。
有没有人有一段代码可以为我指明正确的方向?
顺便说一句,我对执行此方法的库不感兴趣,我想尝试自己编写代码。
非常感谢。
我正在尝试实现命中并运行 MCMC 算法,但我在理解如何去做时遇到了一些麻烦。大体思路,如下:
为了在 MH 中生成提案跳转,我们:
- 生成方向从单位球面上的分布
- 生成有符号距离沿着受限空间。
但是,我不知道应该如何在 R(或任何其他语言)中实现它。
有没有人有一段代码可以为我指明正确的方向?
顺便说一句,我对执行此方法的库不感兴趣,我想尝试自己编写代码。
非常感谢。
我没有看你提供的文件,但还是让我试试吧:
如果你有一个- 维度参数空间,您可以生成随机方向均匀分布在单位球面上
x <- rnorm(p)
d <- x/sqrt(sum(x^2))
(参见维基)。
然后,使用它来生成提案对于拒绝抽样(假设您实际上可以评估)。
假设你从位置开始并接受了, 生成一个提案和
lambda <- r<SOMEDISTRIBUTION>(foo, bar)
y <- x + lambda * d
并做一个 Metropolis-Hastings-Step 来决定是否搬到或不。
当然,这能发挥多大作用将取决于分布以及在拒绝采样步骤中(反复)评估其密度的成本是多少,但是因为生成建议很便宜,你可以侥幸逃脱。
为@csgillespie 的好处添加:
从我通过谷歌搜索收集到的信息来看,如果您有一个(多变量)目标具有任意有界但不一定连接支持,则命中运行 MCMC 主要用于快速混合,因为它使您能够从任何点移动在支持任何其他的一步。更多here和here。
我在寻找 Hit-and-Run 的原始参考资料时遇到了您的问题。感谢那!我刚刚在最近的这篇博客的末尾为 PyMC 整理了一个 hit-and-run 的概念验证实现。