pymc函数评估数量的基本原理

时间:2014-12-31 00:35:04

标签: python pymc

我正在使用与此non linear curvefitting问题中提到的代码类似的代码分析数据:

# define the model/function to be fitted.
def model(x, f): 
    amp = pymc.Uniform('amp', 0.05, 0.4, value= 0.15)
    size = pymc.Uniform('size', 0.5, 2.5, value= 1.0)
    ps = pymc.Normal('ps', 0.13, 40, value=0.15)

    @pymc.deterministic(plot=False)
    def gauss(x=x, amp=amp, size=size, ps=ps):
        e = -1*(np.pi**2*size*x/(3600.*180.))**2/(4.*np.log(2.))
        return amp*np.exp(e)+ps
    y = pymc.Normal('y', mu=gauss, tau=1.0/f_error**2, value=f, observed=True)
    return locals()

MDL = pymc.MCMC(model(x,f))
MDL.sample(1e4)

在该示例中,我会说有三个拟合参数, amp size ps 。我们将要检查的参数数量称为 N 。现在让我们调用要绘制的样本数, P (在这种情况下为1e4)。我观察到@deterministic函数gauss被称为大致 N x P 次。

  1. 我想知道为什么 N x P
  2. MDL中是否有属性可以找出gauss被调用的次数?

1 个答案:

答案 0 :(得分:0)

只要需要其对数概率,就会调用

gauss。 PyMC试图对此进行智能化,并缓存值,以便仅在节点的父级更改其值时重新计算它们。因此,每次gaussampsize更改时,都会评估ps