#python #probability #pymc3
#python #вероятность #pymc3
Вопрос:
Я работаю с PyMC3 и не уверен в том, как пометить определенные переменные как «наблюдаемые». В простом примере я мог бы иметь две входные переменные, смоделированные как равномерное распределение в [0, 1]. Я знаю, что третья случайная величина «output» равна произведению двух входных данных, и, допустим, я заметил, что первый входной сигнал равен 1, а выходной — 0. Затем я хочу использовать PyMC3 для прогнозирования второго ввода, который в этом случае должен быть равен 0.
Мне неясно, как сообщить PyMC3, что выходные данные наблюдаются, поскольку это результат математического выражения, а не созданный явно из конструктора.
import pymc3 as pm
with pm.Model() as model:
input1 = pm.Uniform('RV1', lower=0, upper=1, observed=1) # API is clear how to mark it observed
input2 = pm.Uniform('RV2', lower=0, upper=1) # This one is not observed
output = input1 * input2 # How to tell PyMC3 the observed value of "output"?
# Now I will do variational inference, sampling, etc... on the model
Случайные величины технически являются логическими случайными величинами, но мне нужно моделировать их как непрерывные, чтобы делать вариационный вывод. И у меня их много, это минимальный пример. Настройка output.observed = 0
, похоже, не работает, хотя и не приводит к сбою.
Комментарии:
1. Вы когда-нибудь находили решение этой проблемы?
2. Это не решает всех проблем, но один ограниченный способ, которым я справился с этим, заключался в аналитическом вычислении свертки двух распределений. Это работает, когда я добавлял две случайные величины, но выполнение чего-либо сложного может быстро усложниться. Я тоже ищу ответ!
Ответ №1:
При выполнении детерминированной (т. Е. замкнутой формы) математической операции с переменными вы можете использовать pymc3.Deterministic('your_deterministic_var', input1 * input2)
распределение вероятностей. Насколько я знаю, это не позволяет использовать observed
ключевое слово, как вы просили, хотя после завершения выборки ( pm.sample()
) вы можете запустить pm.sample_posterior_predictive(chain, var_names=['your_deterministic_var'])
и использовать средства записи переменных или все, что вам нужно.
Для получения дополнительной информации о детерминировании ознакомьтесь с документацией, а также с дискуссионным форумом PyMC3, который в любом случае является лучшим местом для вопросов PyMC3, чем stackoverflow.