BayesianNetwork 石榴在创建 BBN 时出现错误

BayesianNetwork pomegranate getting keyerror while create BBN

我正在尝试使用网站 https://pomegranate.readthedocs.io/en/latest/BayesianNetwork.html 中给出的示例来创建贝叶斯信念网络,但在给定的示例中它是三个变量,而我试图用两个变量创建,但总是出现 KeyError:( 'A'、'A'、'B'):

from pomegranate import *

guest = DiscreteDistribution({'A': 0.5, 'B':0.5})
prize = DiscreteDistribution({'A': 0.5, 'B': 0.5})
monty = ConditionalProbabilityTable(
        [['A', 'A', 0.5],    
         ['B', 'B', 0.5],
         ['A', 'B', 0.5],
         ['B', 'A', 0.5]], [guest, prize])

s1 = Node(guest, name="guest")
s2 = Node(prize, name="prize")
s3 = Node(monty, name="monty")

model = BayesianNetwork("Monty Hall Problem")
model.add_states(s1, s2, s3)
model.add_edge(s1, s3)
model.add_edge(s2, s3)
model.bake()

如果有人能帮我解决这个问题,那将是很大的帮助,我已经尽力解决了这个问题。

条件table,在这道题中必须包含3个变量。这是因为在这种情况下,条件概率由 P(Monty|Guess,Prize) 给出。换句话说,为了达到一定的蒙蒂状态,必须满足猜测和奖品的联合概率。因此,不能从table(或条件概率方程)中取出任何变量。

为了解决你只使用 2 个变量的问题,我们需要改变解决问题的方法,忽略“猜”或“奖”的概率,以使 monty 只接受 1 个变量。并且新的概率方程将变为 P(Monty|temp).

from pomegranate import *

temp = DiscreteDistribution({'A': 0.5, 'B':0.5})
monty = ConditionalProbabilityTable(
        [['A', 'A_prime', 0.5],    
         ['B', 'B_prime', 0.5],
         ['A', 'B_prime', 0.5],
         ['B', 'A_prime', 0.5]], [temp])

s1 = Node(temp, name="temp")
s2 = Node(monty, name="monty")

model = BayesianNetwork("Not a Monty Hall Problem")
model.add_states(s1, s2)
model.add_edge(s1, s2)
model.bake()