pymc MAP警告:随机tau的值既不是数值也不是具有浮点dtype的数组。推荐拟合方法fmin(默认)

时间:2014-06-27 00:20:06

标签: bayesian pymc mcmc stochastic

我在这里看了一个类似的问题

pymc warning: value is neither numerical nor array with floating-point dtype

但是没有答案,有人可以告诉我我是否应该忽略此警告或以其他方式做什么?

模型有一个随机变量(等等)tauDiscreteUniform

以下是该模型的相关代码:

tau = pm.DiscreteUniform("tau", lower = 0, upper = n_count_data)
lambda_1 = pm.Exponential("lambda_1", alpha)
lambda_2 = pm.Exponential("lambda_2", alpha)
print "Initial values: ", tau.value, lambda_1.value, lambda_2.value

@pm.deterministic
def lambda_(tau = tau, lambda_1 = lambda_1, lambda_2 = lambda_2):
    out = np.zeros(n_count_data)
    out[:tau] = lambda_1
    out[tau:] = lambda_2
    return out

observation = pm.Poisson("obs", lambda_, value = count_data, observed = True)
model = pm.Model([observation, lambda_1, lambda_2, tau]);
m = pm.MAP(model)                    # **This line caueses error**
print "Output after using MAP: ", tau.value, lambda_1.value, lambda_2.value

1 个答案:

答案 0 :(得分:1)

pymc文档说“MAP can only handle variables whose dtype is float”。您的tau来自离散分布,因此它应该具有类似int的dtype。如果您调用fit方法估算最大值,则会将参数tau的后验值假定为浮点数。如果这有任何意义,那么,是否可以忽略此警告取决于手头的问题。如果你的可能性很好,你最终可能会得到tau的浮点值,它接近你实际想要估算的整数值。但是,如果你想象一个所有非整数值的可能性为0的情况,像fmin这样的渐变方法将无效,而你的最大后验值没有任何意义。在这种情况下,您必须找到另一种方法来计算最大后验值(同样,取决于手头的问题)。