Отследить отдельные размеры с помощью графика трассировки PYMC3?

Я использовал 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) 

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

Щелкните, чтобы увидеть изображение

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

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

Спасибо


person George    schedule 28.08.2018    source источник


Ответы (1)


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

pip install arviz

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

import arviz as az

az.traceplot(trace)

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

график трассировки от arviz

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

person colcarroll    schedule 29.08.2018
comment
Отлично, большое спасибо! Еще один вопрос - можно ли наложить другое гауссово распределение по моему выбору на каждый из этих графиков? - person George; 30.08.2018
comment
оба arviz.traceplot и pymc3.traceplot возвращают массив осей (в приведенном выше случае это будет 4 x 2). Самый простой способ - это захватить это (axes = az.traceplot(trace), а затем вручную построить график по каждой оси (ax[0, 0].plot(my_x, my_y)) - person colcarroll; 30.08.2018
comment
Что означает trace в traceplot? - person nn0p; 06.02.2020
comment
Временной ряд розыгрышей (справа на графиках выше) называется следом. У меня нет цитаты по этому поводу! - person colcarroll; 17.02.2020