Я пытаюсь разобраться с PyMC3, чтобы портировать существующий код, написанный (и работающий) для PyMC. Мне нужно создать собственный дистрибутив, который является стохастическим подклассом.
В исходном коде PyMC использовались такие функции, как pymc.valuewrapper () и pymc.new_dist_class (). Вот краткое описание кода PyMC:
def a_logp(...):
...
return something
def a_random(...):
...
return something
dtype = np.float64
docstr = "mydist"
parent_names = ["a", "b"]
parents_default = {"a": 0, "b": 1, "value": 0.5}
wrapped_logp_partial_gradients = {}
logp = pymc.valuewrapper(a_logp)
mv = False
UniformNonzero = pymc.new_dist_class(
dtype,
node_name,
parent_names,
parents_default,
docstr,
logp,
a_random,
mv,
wrapped_logp_partial_gradients,
)
Мои вопросы: поддерживает ли PyMC3 эквивалентную функциональность для этого? Я вижу, что PyMC3 поддерживает функцию DensityDist () для создания пользовательских дистрибутивов с использованием logp и случайных функций. Но как мне определить родительскую информацию? Или я должен копать глубже, например, в Theano?