0
我试图建立一个简单的贝叶斯网络,其中雨水和喷灌是湿草的父母,但雨水和喷水器每个都有三个(模糊逻辑类型而不是通常的两个布尔)状态,而湿草有两个状态(真假)。我无法在pymc3文档中的任何地方找到用于描述CPT的语法 - 我正在尝试基于2状态示例的以下内容,但它不是按照我认为的方式推广到三个状态。任何人都可以显示正确的方法来做到这一点? (也为地方wetgrass有三种状态也更普遍的情况)pymc3如何编码多状态离散贝叶斯网络CPT?
rain = mc.Categorical('rain', p = np.array([0.5, 0. ,0.5]))
sprinker = mc.Categorical('sprinkler', p=np.array([0.33,0.33,0.34]))
wetgrass = mc.Categorical('wetgrass',
mc.math.switch(rain,
mc.math.switch(sprinker, 10, 1, -4),
mc.math.switch(sprinker, -20, 1, 3),
mc.math.switch(sprinker, -5, 1, -0.5)))
[给人以wetgrass定义错误: 为Switch.make_node输入号码错误(GOT 4((,,,))预计3) ]
据我了解 - 开关是一个theano函数类似于(b?a:b)在C程序中;这只是进行双向比较。也许可以使用像这样的二进制开关的整个负载来设置CPT,但我真的只想给出一个3D矩阵CPT作为BNT和其他bayes网络库中的输入。目前这可能吗?
感谢 - 这是工作到定义网络,但是我在运行采样和logp计算时遇到了麻烦 - 不过现在我会问这是一个单独的问题。 –
新的问题和运行代码,包括aseyboldt的答案是这里:http://stackoverflow.com/questions/43540977/pymc3-mutli-category-bayesian-network-sampling-and-logp-calculate –