0

我正在尝试使用pgmpy Python 包来学习特定状态集之间的转换概率,但是当我拟合模型时,我发现条件概率不正确。

作为我正在谈论的问题的一个非常简化的示例,考虑由两个状态 A 和 B 组成的贝叶斯网络,其中有一条从 A 到 B 的有向边。假设我们已经观察到,只要 A 是零,B 为 1,当 A 为 1 时,B 为 0。描述这种情况的代码如下:

import pandas as pd
from pgmpy.models import BayesianModel

data = pd.DataFrame(data={'A': [0, 0, 1, 1, 1, 1], 'B': [1, 1, 0, 0, 0, 0]})
model = BayesianModel([('A', 'B')])
model.fit(data)

然而,当我们通过调用来检查拟合的条件概率时model.cpds[1],我们发现 pgmpy 学到了以下内容:

+------+------+------+
| A    | A(0) | A(1) |
+------+------+------+
| B(0) | 0.5  | 0.5  |
+------+------+------+
| B(1) | 0.5  | 0.5  |
+------+------+------+

什么时候应该学会

+------+------+------+
| A    | A(0) | A(1) |
+------+------+------+
| B(0) | 0.0  | 1.0  |
+------+------+------+
| B(1) | 1.0  | 0.0  |
+------+------+------+

有人可以向我解释这里发生了什么吗?这是一个非常基本的例子,我觉得我快疯了。谢谢

4

1 回答 1

0

可用于安装的 pgmpy 版本pip有一个错误,导致它错误地计算条件概率。从 git 克隆开发存储库并手动安装它可以解决问题。感谢@lstbl 在这里解决这个问题:https ://stats.stackexchange.com/questions/292738/inconsistencies-between-conditional-probability-calculations-by-hand-and-with-pg

于 2017-11-03T05:39:23.713 回答