如何在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来实现向量的这个操作吗?在
我想你的模型中有问题的部分是
1/M
。因为当M接近0时,这会变成无穷大。实际上,在您的示例中,M的第一个建议值是0(上下边界的平均值),因此您得到的是“非有限值”的错误(误差来自变量S)。在解决此问题的一种方法是将一个合理的
testval
值传递给M(在本例中,除了0以外的任何值),例如:现在M将被初始化为0.1(而不是0)
顺便说一句,直觉上我认为NUTS很难从这个模型中正确地取样,因此我认为Metropolis可能是一个更好的选择,但请随意使用不同的采样器进行试验。在
相关问题 更多 >
编程相关推荐