Предупреждение pymc MAP: значение Stochastic tau не является ни числовым, ни массивом с dtype с плавающей запятой. Рекомендовать метод подгонки 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

person turing    schedule 27.06.2014    source источник


Ответы (1)


В документации pymc говорится, что «MAP может обрабатывать только переменные, чей тип dtype float". Ваш tau из дискретного дистрибутива, поэтому он должен иметь тип dtype, например int. Если вы вызываете метод fit для оценки максимальных апостериорных значений ваших параметров, tau будет считаться числом с плавающей запятой. Если это имеет смысл и, следовательно, можете ли вы игнорировать это предупреждение, зависит от имеющейся проблемы. Если ваша вероятность хорошо себя ведет, вы можете получить значение с плавающей запятой tau, близкое к целочисленному значению, которое вы действительно хотели бы оценить. Но если вы представите случай, когда ваша вероятность будет равна 0 для всех нецелочисленных значений, метод градиента, такой как fmin, не будет работать, и ваши максимальные апостериорные значения не будут иметь никакого смысла. В этом случае вам придется найти другой способ вычисления ваших максимальных апостериорных значений (опять же, в зависимости от решаемой задачи).

person Fabian Rost    schedule 22.01.2016