我在 Pomegranate 中创建我的一个贝叶斯网络时遇到了问题。这是我在尝试烘焙模型时收到的错误消息。
File "pomegranate/BayesianNetwork.pyx", line 332, in pomegranate.BayesianNetwork.BayesianNetwork.bake
KeyError: {
"class" : "Distribution",
"name" : "ConditionalProbabilityTable",
"table" : [
[
"Success",
"Success",
"0.9"
],
[
"Success",
"Failure",
"0.10000000000000002"
],
[
"Failure",
"Success",
"0.10000000000000002"
],
[
"Failure",
"Failure",
"0.9"
]
],
"dtypes" : [
"str",
"str",
"float"
],
"parents" : [
{
"class" : "Distribution",
"dtype" : "str",
"name" : "DiscreteDistribution",
"parameters" : [
{
"Success" : 0.5,
"Failure" : 0.5
}
],
"frozen" : false
}
]
}
我检查了我创建的模型,它与我在其他地方成功使用的相同格式匹配,下面是我用来实现这个模型的结构,其中_get_[node]_probability()
函数返回 CPT。我仔细检查了 CPT 中的值,没有发现不正确(我不想将它们添加到这个问题中,因为它会占用太多空间)。
loops = _get_loops_probability()
repetition = _get_repetition_probability(loops)
variable_scope = _get_variable_scope_probability(loops)
decision_diagrams = _get_decision_diagrams_probability(loops, repetition)
while_loops = _get_while_loops_probability(loops, repetition, decision_diagrams)
for_loops = _get_for_loops_probability(loops, repetition, decision_diagrams)
simple_programs = _get_simple_programs_probability(loops, while_loops, for_loops, variable_scope)
nested_loops = _get_nested_loops_probability(loops, while_loops, for_loops, variable_scope)
programs = _get_programs_with_repetition_probability(loops, simple_programs, nested_loops)
loops_node = State(loops, name='Loops')
repetition_node = State(repetition, name='Repetition')
variable_scope_node = State(variable_scope, name='Variable Scope')
decision_diagrams_node = State(decision_diagrams, name='Decision Diagrams')
while_loops_node = State(while_loops, name='While Loops')
for_loops_node = State(for_loops, name='For Loops')
simple_programs_node = State(simple_programs, name='Simple Programs')
nested_loops_node = State(nested_loops, name='Nested Loops')
programs_node = State(programs, name='Programs')
model = BayesianNetwork('Loops')
model.add_states(loops_node, repetition_node, variable_scope_node, decision_diagrams_node, while_loops_node,
for_loops_node, simple_programs_node, nested_loops_node, programs_node)
model.add_edge(loops_node, repetition_node)
model.add_edge(loops_node, variable_scope_node)
model.add_edge(loops_node, decision_diagrams_node)
model.add_edge(loops_node, while_loops_node)
model.add_edge(loops_node, for_loops_node)
model.add_edge(loops_node, simple_programs_node)
model.add_edge(loops_node, nested_loops_node)
model.add_edge(loops_node, programs_node)
model.add_edge(repetition_node, while_loops_node)
model.add_edge(repetition_node, decision_diagrams_node)
model.add_edge(repetition_node, for_loops_node)
model.add_edge(decision_diagrams_node, while_loops_node)
model.add_edge(decision_diagrams_node, for_loops_node)
model.add_edge(while_loops_node, simple_programs_node)
model.add_edge(while_loops_node, nested_loops_node)
model.add_edge(for_loops_node, simple_programs_node)
model.add_edge(for_loops_node, nested_loops_node)
model.add_edge(variable_scope, simple_programs_node)
model.add_edge(variable_scope, nested_loops_node)
model.add_edge(simple_programs_node, programs_node)
model.add_edge(nested_loops_node, programs_node)
model.bake()
return model
如果有人对此错误有任何经验并且可以指出我的调查方向,那就太好了。