Борьба за реализацию чрезвычайно простой (3 категориальные переменные) байесовской сети с использованием PYMC3 - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь настроить упрощенную версию байесовской сети здесь только с 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'])

Я уверен, что здесь есть некоторые фундаментальные ошибки, но я не могу их идентифицировать и не уверен, куда еще обратиться за помощью. Это моя лучшая попытка решить проблему, и она явно ужасна. Может ли кто-нибудь помочь мне? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...