Проследить отдельные размеры, используя трассировку PYMC3? - PullRequest
0 голосов
/ 28 августа 2018

Я использовал PYMC3 для выполнения вывода по байесовской модели логистической регрессии. Я хочу найти апостериор над весами $ \ beta \ in \ mathbb {R} ^ K $ с учетом гауссовского априорного $ \ mathcal {N} \ sim (0, I) $.

Для этого используются реальные, не смоделированные данные, представленные матрицей проекта $ X \ in \ mathbb {R} ^ {N \ times K} $ и вектором двоичного результата $ y \ in \ mathbb {R} ^ N $.

Мой код Python выглядит следующим образом:

with pm.Model() as logistic_model:
    # 14 dimensional Gaussian prior
    beta = pm.Normal('beta', mu = 0, sd = 10, shape = X.shape[1])

    # Expected value of outcome with sigmoid link
    logit_p = t.dot(X, beta)
    pm.Bernoulli('likelihood', logit_p=logit_p, observed=y)

    with logistic_model:
    # Inference
    trace = pm.sample(2000)

Затем я перехожу к использованию

pm.traceplot(trace) 

чтобы получить визуализацию постеров. Это выводит следующее:

Click for image

Мне любопытно; как бы я описал каждое измерение апостериора на отдельных участках? Это выглядит довольно грязно, когда они все на одном!

Извинения за знаки доллара - я новичок в этом и не знаю, как правильно отображать математику.

Спасибо

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете использовать arviz , который можно установить с помощью

pip install arviz

Тогда вы можете использовать

import arviz as az

az.traceplot(trace)

Что работает, как вы описываете.

traceplot from arviz

Примечание arviz все еще несколько нестабилен, но должен заменить функции построения графиков pymc3 в течение следующих нескольких месяцев.

...