Предупреждение PIMC MAP: значение стохастического тау не является ни числовым, ни массивом с d-типом с плавающей точкой. Рекомендовать метод подгонки fmin (по умолчанию)
Я посмотрел на подобный вопрос здесь
предупреждение 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
1 ответ
pymc
документация говорит "MAP
может обрабатывать только переменные с dtypefloat
". Ваш tau
из дискретного распределения, поэтому он должен иметь dtype, как int
, Если вы позвоните fit
способ оценить максимальные апостериорные значения ваших параметров tau
будет считаться поплавком. Если это имеет какой-то смысл и, следовательно, то, можете ли вы проигнорировать это предупреждение, зависит от имеющейся проблемы. Если ваша вероятность хорошо себя ведет, вы можете получить значение с плавающей точкой tau
это близко к целочисленному значению, которое вы на самом деле хотели бы оценить. Но если вы представляете себе случай, когда ваша вероятность будет 0 для всех нецелых значений, метод градиента fmin
не будет работать, и ваши максимальные апостериорные значения не имеют никакого смысла. В этом случае вам нужно будет найти другой способ вычисления ваших максимальных апостериорных значений (опять же, в зависимости от рассматриваемой проблемы).