Как улучшить подгонку модели Пуассона в PyMC3? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть некоторые данные, которые выглядят так:

my data

Я хочу попытаться смоделировать эти данные, используя модель смеси Пуассона с 2 компонентами.Поскольку я новичок в PyMC3, я использовал ссылки здесь: PyMC3 GMM tutorial и здесь: PyMC3 Mixture API , чтобы попытаться сделать это.Мой код здесь:

with pm.Model() as model:
    lam1 = pm.Exponential('lam1', lam=1)
    lam2 = pm.Exponential('lam2', lam=1)
    pois1 = pm.Poisson.dist(mu=lam1)
    pois2 = pm.Poisson.dist(mu=lam2)
    w = pm.Dirichlet('w', a=np.array([1, 1]))
    like = pm.Mixture('like', w=w, comp_dists=[pois1, pois2], observed=data)
with model:
    trace = pm.sample(5000, n_init=10000, tune=10000, random_seed=SEED)[1000:]
with model:
    ppc_trace = pm.sample_ppc(trace, 5000, random_seed=SEED)
fig, ax = plt.subplots(figsize=(8, 6))
ax.hist(data, bins=30, normed=True,
        histtype='step', lw=2,
        label='Observed data')
ax.hist(ppc_trace['like'], bins=30, normed=True,
        histtype='step', lw=2,
        label='Posterior predictive distribution')
ax.legend(loc=1)
plt.show()

Но результат таков: bad result

Как улучшить посадку?Я пытался возиться с лямбдами, но безрезультатно.

1 Ответ

0 голосов
/ 20 января 2019

Похоже, вы строите график задних параметров.Не путайте это с распределением случайных выборок на основе модели.Тем не менее, должно быть ясно, что оранжевая линия не является «подгонкой» синей, а скорее указывает, где находятся параметры ваших компонентов.Я не знаком с pymc, но также должен быть способ сделать выборку из модели вместо выборки модели.Одним из альтернативных вариантов будет считывание максимумов апостериорного значения (решение MAP) и использование для этого выборки функций numpy.random.

...