4

我是 pymc 的新手并且很享受它,但遇到了一些非常奇怪的行为。我想用它来追踪移动的东西;按照教程,我设置了一些随机指标并尝试使用pymc.NormApprox()它。fit()似乎可以运行,但是当我尝试输出输出时,它给了我KeyError。当我切换到使用pymc.MCMC它时,它会运行 `sample() OK,但随后会破坏命名空间(Python 甚至忘记了如何退出())。

系统:Ubuntu 12.04,scipy numpy等安装,pymc通过easy_install安装;也从 git 尝试过。

重现代码:test.py::

import pymc
import numpy as np

x = pymc.MvNormal('x',mu=np.zeros(4),tau=np.eye(4))

@pymc.deterministic()
def y(x=x):
  out = np.zeros(2)
  out[0] = x[0]+x[2]
  out[1] = x[1]+x[3]
  return out

ymeas = pymc.MvNormal('ymeas',mu=y,tau=np.eye(2)*100000,value=20*np.ones(2),observed=True)

然后,在 shell 中运行 python 或 ipython::

import test
import pymc
foo = pymc.NormApprox(test)
foo.fit()
foo.mu[foo.x] # Fails - gives KeyError

foo._mu # I can see it OK if I break privacy rules

foo = pymc.MCMC(test)
foo.sample(10000) # runs OK
foo # fails - namespace is nuked

我期望看到的: foo.mu[foo.x]应该给我后部的正常近似值;我不应该收到 Key 错误,也不应该闯入foo._mu

相反,我得到:

>>> foo.mu[foo.x]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pymc-2.2-py2.7-linux-x86_64.egg/pymc/NormalApproximation.py", line 56, in __getitem__
    tot_len += self.owner.stochastic_len[p]
KeyError: 9.9999517411499177
>>> foo._mu
array([  9.99995174,   9.99997163,  10.0000485 ,  10.00002837])
>>> 

我还注意到文档字符串foo.muN.mu(p1,p2)但在线文档说N.mu[N.p1,N.p2]

至于后 MCMC 命名空间崩溃,它甚至忘记了如何退出()

此外,我可以确认我在运行不同安装(Enthought Python)的不同机器(MacBook Pro)上遇到了同样的问题。

4

0 回答 0