【问题标题】:pyMC3 - Using the value of a variablepyMC3 - 使用变量的值
【发布时间】:2021-03-04 15:43:21
【问题描述】:

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

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

我已经看到使用pm.math.switch 的解决方案,但不幸的是我的变量是三元的,所以我需要为每个条件使用两个开关。此外,如果我需要以多个变量为条件,我想这会很痛苦。

【问题讨论】:

  • 也许可以尝试将theano.tensor.extra_ops.to_one_hot 应用于x,这会将其扩展为一个矩阵,然后您可以将该矩阵与p_y_cond_x 向量相乘以产生您想要获得的相应向量。可能有更有效的方法 - 取决于 one-hot 编码矩阵是否稀疏 (IDK)。

标签: python bayesian montecarlo pymc3 pymc


【解决方案1】:

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

【讨论】:

  • 有趣!我会看看这个包。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2016-02-13
相关资源
最近更新 更多