Получите распределение, когда точка выбирается из смеси в PyMC3

У меня есть модель с pm.NormalMixture(), и когда я выбираю нормальную смесь, я также хочу знать, из какого из смешанных распределений выбирается эта точка.

import numpy as np
import pymc3 as pm

obs = np.concatenate([np.random.normal(5,1,100), 
                      np.random.normal(10,2,200)])
with pm.Model() as model:
    mu = pm.Normal('mu', 10, 10, shape=2)
    sd = pm.Normal('sd', 10, 10, shape=2)
    x = pm.NormalMixture('x', mu=mu, sd=sd, observed=obs)

Я делаю выборку из этой модели, затем использую эту трассировку для выборки из апостериорного прогностического распределения, и я хочу знать для каждого x в апостериорной прогностической трассе, к какому из двух выбранных из него нормальных распределений принадлежит. Возможно ли это в PyMC3, не делая этого вручную?


person Camden Cheek    schedule 24.05.2017    source источник


Ответы (1)


В этом примере показано, как работают апостериорные прогностические проверки (PPC). Суть PPC заключается в том, что вы сначала берете случайные образцы из трассы. Трассировка по существу всегда многомерна, и в вашей модели одна выборка будет определяться вектором (mu[i,0], mu[i,1], sd[i,0], sd[i,1]). Затем для каждой выборки трассировки сгенерируйте случайные числа из распределения, указанного для вероятности, со значениями его параметров, равными значениям из выборок трассировки. В вашем случае это будет NormalMixture(mu[i,:], sd[i,:]). В вашей модели x — это функция правдоподобия, а не отдельная точка трассы.

Несколько практических замечаний:

  • Вы не указали весовую переменную, поэтому я предполагаю, что по умолчанию она заставляет нормальные распределения иметь одинаковый вес (я не проверял это).
  • Вероятность того, что данная точка будет получена из того или иного распределения, — это просто отношение между плотностями вероятности в этой точке.
  • Ознакомьтесь с здесь, чтобы получить рекомендации по выбору приоритетов. Например, в вашем предварительном SD большое значение придается очень большим SD, что может исказить ваши результаты, особенно для небольших наборов данных.

Удачи!

person Aorus    schedule 27.05.2017