Распространение убеждений с использованием pgmpy lib - понимание алгоритма

Сейчас я начинаю использовать pgmpy lib для реализации вероятностной графической модели. Вероятность того, что я получу использование этой библиотеки, отличается от той, которую я получаю вручную (например, используя SamIam). Вот скриншот очень маленькой графической модели, созданной в SamIam для проверки идеи концепции: Пример для ученика

Код, который я использую pgmpy.

from pgmpy.models import BayesianModel
from pgmpy.factors import TabularCPD
from pgmpy.inference import BeliefPropagation

student_model = BayesianModel([('D', 'G'), ('I', 'G')])

difficulty_cpd = TabularCPD(variable='D', variable_card=2, values=[[0.6, 0.4]])
intel_cpd = TabularCPD(variable='I', variable_card=2, values=[[0.7, 0.3]])
grade_cpd = TabularCPD(variable='G',variable_card=3, values=[[0.3, 0.05, 0.9, 0.5], [0.4, 0.25, 0.08, 0.3], [0.3, 0.7, 0.02, 0.2]], evidence=['I', 'D'], evidence_card=[2, 2])

student_model.add_cpds(grade_cpd, difficulty_cpd, intel_cpd)

print (student_model.nodes())
print (student_model.get_cpds('D'))
print (student_model.get_cpds('I'))
print (student_model.get_cpds('G'))

belief_propagation = BeliefPropagation(student_model)
res = belief_propagation.query(variables=["G"])
print (res['G'])

Я получаю следующий код результатов вывода

+-----+----------+
| G   |   phi(G) |
|-----+----------|
| G_0 |   0.4470 |
| G_1 |   0.2714 |
| G_2 |   0.2816 |
+-----+----------+

Значения phi(G) не такие, как в Samiam.

В соответствии с алгоритмом, используемым в Samiam, мы должны получить для G_0:

P(G_0) = P(G_0|I_0,D_0) + P(G_0|I_0,D_1) + P(G_0|I_1,D_0) + P(G_0|I_1,D_1)
P(G_0) = 0.3*0.7*0.6 + 0.05*0.7*0.4 + 0.9*0.3*0.6 + 0.5*0.3*0.4 = 0.3620

Может ли кто-нибудь дать мне совет о том, как эти значения фи (G) были подсчитаны (какой алгоритм действительно используется), и как я мог получить те же значения, что и в SamIam.

0 ответов

Другие вопросы по тегам