pyMC3 - 使用变量的值

问题描述

我正在使用 pyMC3 模拟一个非常基本的贝叶斯网络。在这个模拟中,我只有分类变量。给定一个变量的值,我想根据我用来存储条件概率的 Pandas 数据帧的输出来设置另一个变量的分布。例如,如果 x一个 pyMC3 随机变量,并且 x=1 在模拟的一个实例中,那么我想访问 p_y_cond_x.loc[x]在这个实例中它只是 {{1} },这里p_y_cond_x.loc[1]一个预先计算的(使用数据)条件概率表,存储为pandas系列。

有没有什么简单的方法可以做到这一点?不幸的是,实例化模型时 p_y_cond_x 不是整数(例如,使用 x 块),因此我不确定如何在模拟运行时访问其值并执行上述操作。

我见过使用 with解决方案,但不幸的是我的变量是三元的,所以我需要为每个条件使用两个开关。此外,如果我需要以多个变量为条件,我想这会很痛苦。

解决方法

使用 pyAgrum,您可以使用符号 bn.cpt("Y")[{"X":1}]

enter image description here