BayesianModel的变量消除推断.map_query错误

问题描述 投票:2回答:2

我正在尝试根据给定的证据计算变量的MAP查询。

from pgmpy.inference import VariableElimination
from pgmpy.models import BayesianModel
import numpy as np
import pandas as pd
values = pd.DataFrame(np.random.randint(low=0, high=2, size=(1000, 5)),
                       columns=['A', 'B', 'C', 'D', 'E'])
model = BayesianModel([('A', 'B'), ('C', 'B'), ('C', 'D'), ('B', 'E')])
model.fit(values)
inference = VariableElimination(model)
phi_query = inference.map_query(['A', 'B'], evidence= {'B':1})

给我一个错误:

Finding Elimination Order: : 100%|██████████| 3/3 [00:00<00:00, 651.66it/s]
Eliminating: E: 100%|██████████| 3/3 [00:00<00:00, 309.08it/s]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-22-0e47cda916c1> in <module>()
      8 model.fit(values)
      9 inference = VariableElimination(model)
---> 10 phi_query = inference.map_query(['A', 'B'], evidence= {'B':1})

/usr/local/lib/python3.6/dist-packages/pgmpy/inference/ExactInference.py in map_query(self, variables, evidence, elimination_order, show_progress)
    360             return_dict = {}
    361             for var in variables:
--> 362                 return_dict[var] = map_query_results[var]
    363             return return_dict
    364 

KeyError: 'B'

根据文档:

Parameters variables(list)–我们要在其上的变量列表计算最大边距。

evidence(dict)–字典键,值对为{var:state_of_var_observed}(如果没有证据,则为无)

elimination_order(list)–变量消除的顺序(如果没有的话)提供)自动计算订单]

所以我要去哪里错了,为什么会出现这个错误?

编辑:pgmpy版本:0.1.9

python machine-learning bayesian bayesian-networks pgmpy
2个回答
2
投票

可能是因为您使用的是pgmpy版本。试试这个

!pip install pgmpy==0.1.6

然后运行代码。


-1
投票

问题是您也在查询变量中传递了证据变量,并且没有任何检查可以正确处理这种情况。您已经知道B的状态为1,因为这是证据,您只需要查询A的状态即可:

>>> phi_query = inference.map_query(['A'], evidence= {'B':1})
>>> print(phi_query)
{'A': 1}
© www.soinside.com 2019 - 2024. All rights reserved.