Я пытаюсь настроить упрощенную версию байесовской сети здесь только с 3 категориальными переменными, а затем сделать вывод об этом. Идея состоит в том, что D3 является потомком D1 и D2, я устанавливаю D3 = 0, а затем вижу, что это предложение о задних распределениях D1 и D2.
Вот код:
import pymc3 as pm
import numpy as np
d1_prob = np.array([0.3,0.7]) # 2 choices
d2_prob = np.array([0.6,0.3,0.1]) # 3 choices
d3_prob = np.array([[[0.1, 0.9], # (2x3)x2 choices
[0.3, 0.7],
[0.4, 0.6]],
[[0.6, 0.4],
[0.8, 0.2],
[0.9, 0.1]]])
with pm.Model() as model:
D1 = pm.Categorical('D1',p=d1_prob)
D2 = pm.Categorical('D2',p=d2_prob)
D3 = pm.Categorical('D3',p=d3_prob, observed=[0])
with model:
trace = pm.sample(10000)
print(pm.summary(trace, varnames=['D1', 'D2'], start=1000))
pm.traceplot(trace[1000:], varnames=['D1', 'D2'])
Я уверен, что здесь есть некоторые фундаментальные ошибки, но я не могу их идентифицировать и не уверен, куда еще обратиться за помощью. Это моя лучшая попытка решить проблему, и она явно ужасна. Может ли кто-нибудь помочь мне? Заранее спасибо.