0

我在 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

如果有人对此错误有任何经验并且可以指出我的调查方向,那就太好了。

4

0 回答 0