pgmpy: как выполняется маргинализация, не зная маргиналов?
В pgmpy мы можем определить условное распределение:
cpd_G = TabularCPD(variable='G', variable_card=2, values=[[0.5, 0.8, 0.75, 0.45],
[0.5, 0.2, 0.25, 0.55]],
evidence=['I', 'D'], evidence_card=[2, 2])
а затем маргинализировать переменную доказательства (например, D):
print(cpd_G.marginalize(variables=['D'], inplace=False))
+------+------+------+
| I | I(0) | I(1) |
+------+------+------+
| G(0) | 0.65 | 0.6 |
+------+------+------+
| G(1) | 0.35 | 0.4 |
+------+------+------+
Это неверно. Единственный способ выполнить эту маргинализацию - это знать предельную вероятность p (D | I). потом
p (G | I) = интеграл_ над_D (P (G | D, I) * p (D | I)
В нашем случае мы не определили p(D|I), но пакет, кажется, считает, что p(D=0|I)=0,5, p(D=1|I)=0,5
Что-то мне не хватает?