5

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

pymc 警告:值既不是数字也不是具有浮点 dtype 的数组

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

该模型有一个随机变量(除其他外)tau,它是DiscreteUniform

以下是模型的相关代码:

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
4

1 回答 1

1

pymc文档说“MAP只能处理 dtype 为”的float变量。您tau来自离散分布,因此它应该具有类似int. 如果您调用该fit方法来估计参数的最大后验值,tau则将假定为浮点数。如果这有任何意义,那么您是否可以忽略此警告取决于手头的问题。如果您的可能性表现良好,您最终可能会得到一个tau接近您实际想要估计的整数值的浮点值。但是,如果您想象这样一种情况,对于所有非整数值,您的可能性都为 0,那么像梯度方法这样的梯度方法fmin将不起作用,并且您的最大值是后验的价值观没有任何意义。在这种情况下,您必须找到一种不同的方法来计算最大后验值(同样,取决于手头的问题)。

于 2016-01-22T13:00:35.067 回答