如何在PYMC3中添加确定性向量运算?

2024-04-28 21:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在PYMC3中实现确定性向量运算?例如模型:

M ~ Unif(-5, 5)
S ~ Unif(0, |1 / M|)
data ~ Normal(M, S)

M是高斯观测值的平均值,S是标准差。假定标准差均匀分布在[0,| 1/M |](M为负时需要abs值)。在

此代码:

^{pr2}$

出现错误:

  File "/Users/mvd/anaconda/lib/python2.7/site-packages/pymc3/distributions/distribution.py", line 67, in get_test_val
    str(defaults) + " pass testval argument or adjust so value is finite.")
AttributeError: <pymc3.distributions.continuous.Uniform object at 0x10d1e1f10> has no finite default value to use, checked: ['median', 'mean', 'mode'] pass testval argument or adjust so value is finite.

我需要使用ano来实现向量的这个操作吗?在


Tags: orsoisvaluepassargument向量distributions
1条回答
网友
1楼 · 发布于 2024-04-28 21:26:40

我想你的模型中有问题的部分是1/M。因为当M接近0时,这会变成无穷大。实际上,在您的示例中,M的第一个建议值是0(上下边界的平均值),因此您得到的是“非有限值”的错误(误差来自变量S)。在

解决此问题的一种方法是将一个合理的testval值传递给M(在本例中,除了0以外的任何值),例如:

M = pm.Uniform("M", -5., 5., shape=size, testval=0.1)

现在M将被初始化为0.1(而不是0)

顺便说一句,直觉上我认为NUTS很难从这个模型中正确地取样,因此我认为Metropolis可能是一个更好的选择,但请随意使用不同的采样器进行试验。在

相关问题 更多 >