问题标签 [mcmc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mcmc - 使用 PyMC 拟合 3 个法线:简单数据的错误收敛
我编写了一个 PyMC 模型,用于使用(类似于这个问题中的那个)将 3 个法线拟合到数据中。
我从中采样数据的分布明显重叠,但有 3 个明显不同的峰(见下图)。将 3 个法线拟合到此类数据应该是微不足道的,我希望它能够在 99% 的 MCMC 运行中产生我从 (-10, 0, 10) 采样的平均值。 我期望的结果示例。这发生在十分之二的案例中。 10 个案例中有 6 个发生意外结果的示例。这很奇怪,因为在 -5 上,数据中没有峰值,所以我不能真正达到采样可能陷入的严重局部最小值(从 (-5,-5) 到 (-6,-4)应该提高合身性,等等)。
(自适应 Metropolis)MCMC 采样在大多数情况下卡住的原因可能是什么?有哪些可能的方法来改进它没有的抽样程序?
所以运行确实收敛,但并没有真正探索正确的范围。
更新: 使用不同的先验,我在 5/10 中得到正确的收敛(大约第一张图片),在另一个 5/10 中得到错误的收敛(大约第二张图片)。基本上,更改的行是下面的行,并删除了 AdaptiveMetropolis 步骤方法:
python - PyMC:在初始采样运行后,使用 pickle 数据库进行 MCMC 采样非常慢
我厌倦了不得不用 PyMC 重新运行长 MCMC 链,因此使用 PyMC 附带的链保存功能听起来是个好主意。我正在使用pickle
数据库后端来体验基于磁盘保存的 MCMC 工作流,我发现如果我尝试连续两次从带有 pickle 数据库的 PyMC MCMC 模型中采样,第二次sample
调用非常减缓。
第一个sample
调用几乎立即完成,但第二个调用非常缓慢,需要几秒钟才能完成。与此同时,我在第二次调用时查看了磁盘上的 simple.pickle 文件,sample
并注意到它的大小在 20 到 60 兆字节之间快速波动。
我希望第二次(以及所有后续)sample
调用在与第一次大致相同的时间内完成,以便我可以手动监控链的混合属性(是的,我知道我可以使用各种更高级的诊断,但除此之外问题)。
我究竟做错了什么?
PyMC 版本 2.2、Python 2.7.3、Ubuntu 12.10 64 位。
python - Using pymc diagnostics and posterior summaries on samples not from pymc
I'd like to use the pymc diagnostic and summary functions on samples I have generated without using pymc. As one example, I'd like to use pymc's mc_error routine on my own set of samples.
Some of the pymc diagnostic functions can take an np.array of samples, but, if I understand correctly, others seem to require a trace object. How can I convert my own set of samples into a trace object that pymc can handle? I'd appreciate any pointers.
My samples are currently stored as a dictionary where each key is a name of a variable I am sampling and points to an np.array of samples.
Thanks!
r - Rmpi 发送/接收挂起?
我正在为人口 MCMC 编写代码。我会尽量提供我认为有帮助的信息,所以请多多包涵。
我正在使用缓和分布,我想执行交换动作,即提议交换两条链的价值的动作。
我做了什么(交换发生在主人身上)
我最初是由
让每条链在指定的迭代次数 n 内发生变异。
在每第 n 次迭代中,我会将从站的结果发送给主站,并尝试在链之间交换参数。
然后将更新的值发送回从站并重复该过程。
我要达到的目的(从机之间直接交换)
这工作正常,但我想清理我的代码并删除 master 和 slave 之间不必要的通信。也就是让slave之间直接通信。
所以假设我要生成 10 个奴隶,
- 在迭代 n 时,我想让 slave1-slave2、slave3-slave4、....、slave9-slave10 在它们之间进行通信
- 在迭代 2*n 时,我想让 slave2-slave3、slave4-slave5、...slave8-slave9 在它们之间进行通信
等等,这样我就让样品通过温度阶梯。
问题
这就是我面临的问题。
我想我正在设法将一个值从一个奴隶发送到另一个(我的打印语句“成功发送”被打印在正在发送的奴隶的日志文件中)但这似乎没有被接收到(我的“成功接收”语句不会打印在伙伴从属设备的日志中)。
程序只是挂起。我想也许我造成了僵局,但我不确定我做错了什么?
您能否提一些建议?我已将此 Parallel Tempering R 代码用作指南 http://www.lindonslog.com/mathematics/parallel-tempering-r-rmpi/
请看下面我的代码
非常感谢!
苏菲亚
modeling - PyMC:来自独立分布的两个值的总和
我正在尝试使用 pymc 从观察中学习潜在变量。一个简化的版本如下:
我想学习两个隐藏参数$\lambda_0, \lambda_1$,
而有两个分布 $X_0, X_1$ 分别使用这些参数:
$X_0 \sim Expon(\lambda_0)$, $X_1 \sim Expon(\lambda_1)$。
我没有对 $X_i$ 的观察。相反,我观察到这些变量的线性组合:$x_0^{(0)} + x_1^{(1)} + x_1^{(1)} = 6$, $x_0^{(1)} = 2$ .
我最初的方法是这样的,但我认为它不起作用:
你能帮我做这个玩具例子吗?
bayesian - 如何加快贝叶斯排序中的rjags模型训练?
全部,
我正在使用 rjags 进行贝叶斯建模。但是,当观察数大于 1000 时,图形尺寸太大。
更具体地说,我正在做一个贝叶斯排名问题。传统上,一次观察意味着一对 X[i, 1:N]-Y[i] 对,其中 X[i, 1:N] 表示第 i 个项目由 N 大小的预测向量表示,而 Y[i ] 是一个响应。目标是最小化预测值的逐点误差,例如最小二乘误差。
排名问题是不同的。由于我们更关心顺序,所以我们使用成对的 1-0 指标来表示 Y[i] 和 Y[j] 之间的顺序,例如,当 Y[i]>Y[j] 时,I(i ,j)=1; 否则 I(i,j)=0。我们将此 1-0 指标视为观察结果。因此,假设我们有 K 项:Y[1:K],指标的数量为 0.5*K*(K-1)。因此,当 K 从 500 增加到 5000 时,观察的数量非常大,即从 500^2 增加到 5000^2。rjags 模型的图形尺寸也很大,例如图形尺寸 > 500,000。并且对数后验将非常小。
并且需要很长时间才能完成训练。我认为消耗的时间是> 40小时。我做进一步的实验是不切实际的。因此,您有什么想法可以加快 rjags 的速度。我听说 RStan 比 Rjags 快。有哪位有类似经历的?
python - 使用 PyMC3 进行多图像处理
我有一个图像处理问题,我想我可以用它来尝试更多地了解 PyMC3。我花了很多时间摆弄非线性求解器和蛮力方法,到目前为止,没有什么能让我开心。
我遇到的问题涉及一种复杂的方法,用于共同注册同一场景的两个图像,但以不同的方式记录。考虑尝试将常规黑白可见图像与热红外图像匹配。或者,从医学成像的角度来看,尝试将 MRI 数据与 X 射线数据相匹配。
为了简单起见,我可以用以下函数表示我的数据处理工作流程:
该函数将两个图像和一个模型参数向量作为输入。内部发生了一些复杂的数字运算。完成后,将返回一个标量,指示模型(仅由参数向量定义)对齐两个图像的程度。源图像如何变形或两个图像如何比较的细节现在是黑盒子。最后,我最终想要的主要结果是与模型相对应的扭曲图像,从而产生最佳匹配。但是现在当我还在玩我的算法时,我想我可以通过可视化一些简单的测试用例图像的模型参数的后验分布来学到很多东西。我最初认为 PyMC 会让这一切变得简单,但是一旦我开始研究实际的实现细节,我就有点困惑了。
我查看了 Thomas Wiecki 最近的PyMC3 演示文稿,还阅读了Cam Davidson-Pilon的大部分优秀在线书籍。到目前为止,在我看来,PyMC3 与 PyMC2 相比的伟大新特性(部分)是一种时髦的模型规范语法和自动使用Theano来加速处理。
在我到目前为止看到的示例中,看起来数据模型现在通常使用新的语法系统完全指定。但就我而言,我有这个更复杂的功能。
以下是我的问题:
有人可以指出一个现有的 PyMC 示例,该示例涉及作为用户函数实现的黑盒数据模型吗?PyMC2 或 PyMC3 都很棒!
一旦我弄清楚如何使用 PyMC3 进行这项工作,我是否能够在我的 Python 数据模型函数中实现 Theano 的优势?
hidden-markov-models - PyMC:如何描述状态空间模型?
我曾经使用 C 编写我的 MCMC。但我想尝试一下 PyMC。
假设 X_n 是其动力学遵循马尔可夫链的基础状态,而 Y_n 是观察到的数据。尤其是,
Y_n 具有泊松分布,其均值取决于 X_n 和多维未知参数 theta X_n | X_{n-1} 的分布取决于 theta
我应该如何使用 PyMC 描述这个模型?
另一个问题:我可以找到 theta 但不是 X_n 的共轭先验。是否可以指定使用共轭先验更新哪些后验以及使用 MCMC 更新哪些后验?
r - MICE 中的“前导次要 % 不是正确定的”错误
mice
在使用大量数据(30 个分类预测变量和预测变量,
n = 1000)在 R 中运行时,我收到以下错误:
错误
chol.default(fit.sum$cov.unscaled)
:17阶的前导小调不是正定的
我polyreg
对大多数变量使用(多项回归)作为插补方法。由于我不知道为什么会发生此错误,因此我无法发布更多可以重现它的代码。
在 MICE 中使用线性回归时,我在这里发现了一个类似问题的帖子。这篇文章在 Cross Validated 上没有收到任何答案。
如本文所述,这也可能与吉布斯抽样中必要的某些程序有关。OP 在自编程函数中使用 描述了此错误MCMC
,这与 MICE 使用的程序有关。
我不知道什么是领先的未成年人——如果有人能告诉我,也许那将是一个开始。
python - 将高斯混合转换为 PyMC3
我正在尝试学习 PyMC3,我想做一个简单的高斯混合示例。我找到了这个示例并想将其转换为 pymc3,但我目前在尝试绘制跟踪图时遇到错误。
错误: