Цель состоит в том, чтобы получить выборки из распределения, параметры которого известны.
Например, самоопределенное распределение - это p (X | theta), где theta - вектор параметров K измерений, а X - случайный вектор N измерений.
Теперь мы знаем (1) тэта известна; (2) p (X | theta) НЕ известно, но я знаю, что p (X | theta) ∝ f (X, theta), а f - известная функция.
Может ли pymc3 выполнить такую выборку из p (X | theta) и как?
Целью является не выборка из апостериорного распределения параметров, а получение выборок из самоопределенного распределения.
Начиная с простого примера выборки из распределения Бернулли. Я сделал следующее:
import pymc3 as pm
import numpy as np
import scipy.stats as stats
import pandas as pd
import theano.tensor as tt
with pm.Model() as model1:
p=0.3
density = pm.DensityDist('density',
lambda x1: tt.switch( x1, tt.log(p), tt.log(1 - p) ),
) #tt.switch( x1, tt.log(p), tt.log(1 - p) ) is the log likelihood from pymc3 source code
with model1:
step = pm.Metropolis()
samples = pm.sample(1000, step=step)
Я ожидаю, что результатом будет 1000 двоичных цифр, с пропорцией 1 около 0,3. Однако я получил странные результаты, когда на выходе появляются очень большие числа.
Я знаю, что-то не так. Пожалуйста, помогите о том, как правильно написать коды pymc3 для таких непросторных вопросов выборки MCMC.