我试图让一个简单的PyMC2模型在PyMC3中工作。我已经运行了模型,但是模型给出了非常不同的变量映射估计。这是我的PyMC2型号:
import pymc
theta = pymc.Normal('theta', 0, .88)
X1 = pymc.Bernoulli('X2', p=pymc.Lambda('a', lambda theta=theta:1./(1+np.exp(-(theta-(-0.75))))), value=[1],observed=True)
X2 = pymc.Bernoulli('X3', p=pymc.Lambda('b', lambda theta=theta:1./(1+np.exp(-(theta-0)))), value=[1],observed=True)
model = pymc.Model([theta, X1, X2])
mcmc = pymc.MCMC(model)
mcmc.sample(iter=25000, burn=5000)
trace = (mcmc.trace('theta')[:])
print "\nThe MAP value for theta is", trace.sum()/len(trace)
这似乎和预期的一样有效。我有各种各样的困难,想知道如何使用等效的皮麦克兰姆达对象。我最终遇到了确定的物体。以下是我的代码:
^{pr2}$我遇到的问题是,我使用PyMC2对θ的MAP估计值是~0.68(正确),而PyMC3给出的估计值是~0.26(不正确)。我怀疑这和我定义确定性函数的方式有关。PyMC3不允许我使用lambda函数,所以我只需要在行中编写表达式。当我尝试使用λθ时=西塔:。。。我得到这个错误:
AsTensorError: ('Cannot convert <function <lambda> at 0x157323e60> to TensorType', <type 'function'>)
跟那个诺有关吗??如有任何建议,我们将不胜感激!在
当您在deterministics中使用theano
tensor
而不是numpy函数时,它是有效的。在输出如下:
万一别人也有同样的问题,我想我找到了答案。在尝试了不同的采样算法后,我发现:
我在别的地方读到坚果采样器不适用于确定性。我不知道为什么。也许find_MAP也是这样?但现在我还是选择大都会。在
而且,NUTS不处理离散变量。如果要使用螺母,必须拆分采样器:
编辑: 忽略了“b”和“c”是内联定义的。从NUTS函数调用中删除了它们
相关问题 更多 >
编程相关推荐