Предупреждение 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 не будет работать, и ваши максимальные апостериорные значения не имеют никакого смысла. В этом случае вам нужно будет найти другой способ вычисления ваших максимальных апостериорных значений (опять же, в зависимости от рассматриваемой проблемы).

Другие вопросы по тегам