У меня возникает общая проблема. Мне интересно, с кем можно помочь. Я часто хотел бы использовать pymc3 в двух режимах: обучение (то есть фактическое выполнение вывода по параметрам) и оценка (т. Е. Использование предполагаемых параметров для генерации предсказаний).Генерация прогнозов из предполагаемых параметров в pymc3
В целом, мне хотелось бы, чтобы апостериор по прогнозам, а не только по подсчету (это часть преимуществ байесовской рамки, нет?). Когда ваши данные обучения фиксированы, это обычно выполняется путем добавления моделируемой переменной подобной формы к наблюдаемой переменной. Например,
from pymc3 import *
with basic_model:
# Priors for unknown model parameters
alpha = Normal('alpha', mu=0, sd=10)
beta = Normal('beta', mu=0, sd=10, shape=2)
sigma = HalfNormal('sigma', sd=1)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2
# Likelihood (sampling distribution) of observations
Y_obs = Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
Y_sim = Normal('Y_sim', mu=mu, sd=sigma, shape=len(X1))
start = find_MAP()
step = NUTS(scaling=start)
trace = sample(2000, step, start=start)
Но что делать, если мои данные меняются? Скажем, я хочу генерировать прогнозы на основе новых данных, но без повторения вывода снова и снова. В идеале, у меня была бы функция вроде predict_posterior(X1_new, X2_new, 'Y_sim', trace=trace)
или даже predict_point(X1_new, X2_new, 'Y_sim', vals=trace[-1])
, которая просто запускала бы новые данные с помощью графика вычислений Anano.
Я полагаю, что часть моего вопроса связана с тем, как pymc3 реализует диаграмму вычислений anano. Я заметил, что функция model.Y_sim.eval
кажется похожей на то, что я хочу, но для ввода требуется Y_sim
и, кажется, просто возвращает все, что вы ей даете.
Я предполагаю, что этот процесс чрезвычайно распространен, но я не могу найти способ сделать это. Любая помощь приветствуется. (Обратите внимание, что у меня есть взломать это в pymc2, это сложнее в pymc3 из-за theano.)
Вы говорите о выборке из заднего прогнозирующего распределения, которое вы, кажется, делаете правильно. не уверен, что вы подразумеваете под «на основе новых данных». Вы говорите об использовании задним числом из этого анализа в качестве приоритетов для вывода на основе дополнительных данных? –
@ChrisFonnesbeck Это то, что меня также интересовало бы, так как появившиеся у нас задние части находятся в форме следа, и мы не можем использовать их для указания приоритетов в синтаксисе примера. – recluze
twiecki на странице pimpc3 gitter указал мне на эту [страницу] (http://pymc-devs.github.io/pymc3/posterior_predictive/), которая, похоже, решает проблему, с которой я сталкиваюсь. Мне нужно потратить некоторое время, чтобы понять, что было сделано, но выглядит многообещающим. – santon