我正在研究一个看起来像这样的贝叶斯网络
我想找到 P(+j|-e) 的概率,这意味着在给定地震的情况下找到 JohnCalls 为真的概率是错误的。这是我编写的包含网络的代码
from pgmpy.models import BayesianModel
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination
def buildBN():
#!!!!!!!!!!!!!!! VERY IMPORTANT !!!!!!!!!!!!!!!
# MAKE SURE to use the terms "MaryCalls", "JohnCalls", "Alarm",
# "Burglary" and "Earthquake" as the states/nodes of the Network.
# And also use "burglary_model" as the name of your Bayesian model.
########-----YOUR CODE STARTS HERE-----########
burglary_model = BayesianModel([('Burglary', 'Alarm'),
('Earthquake', 'Alarm'),
('Alarm', 'JohnCalls'),
('Alarm', 'MaryCalls')])
# Parameter definition
cpd_Burglary = TabularCPD(variable='Burglary', variable_card=2,
values=[[0.999], [0.001]])
cpd_Earthquake = TabularCPD(variable='Earthquake', variable_card=2,
values=[[0.998], [0.002]])
cpd_Alarm = TabularCPD(variable='Alarm', variable_card=2,
values=[[0.999, 0.06, 0.71, 0.05],
[0.001, 0.94, 0.29, 0.95]],
evidence=['Burglary', 'Earthquake'],
evidence_card=[2, 2])
cpd_JohnCalls = TabularCPD(variable='JohnCalls', variable_card=2,
values=[[0.95, 0.1], [0.05, 0.9]],
evidence=['Alarm'], evidence_card=[2])
cpd_MaryCalls = TabularCPD(variable='MaryCalls', variable_card=2,
values=[[0.99, 0.3], [0.01, 0.7]],
evidence=['Alarm'], evidence_card=[2])
burglary_model.add_cpds(cpd_Burglary, cpd_Earthquake, cpd_Alarm, cpd_JohnCalls, cpd_MaryCalls)
########-----YOUR CODE ENDS HERE-----########
# Doing exact inference using Variable Elimination
burglary_infer = VariableElimination(burglary_model)
########-----YOUR MAY TEST YOUR CODE BELOW -----########
########-----ADDITIONAL CODE STARTS HERE-----########
print(burglary_infer.query(variables=['JohnCalls'], evidence={'Earthquake': 0}, elimination_order='MinFill', joint=False)['JohnCalls'])
########-----YOUR CODE ENDS HERE-----########
return burglary_infer
buildBN()
我得到以下输出
Finding Elimination Order: : 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
Eliminating: Burglary: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
Finding Elimination Order: : 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<?, ?it/s]
Eliminating: Alarm: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<?, ?it/s]
Finding Elimination Order: : 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<?, ?it/s]
Eliminating: Alarm: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<?, ?it/s]
Finding Elimination Order: : 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<?, ?it/s]
Eliminating: Alarm: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<?, ?it/s]
Finding Elimination Order: : 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<?, ?it/s]
Eliminating: Alarm: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 64.00it/s]
Finding Elimination Order: : 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
Eliminating: Burglary: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
+--------------+------------------+
| JohnCalls | phi(JohnCalls) |
+==============+==================+
| JohnCalls(0) | 0.9489 |
+--------------+------------------+
| JohnCalls(1) | 0.0511 |
+--------------+------------------+
我得到答案作为输出,但我认为 +j 意味着只输出 JohnCalls(1)
我正在提交它,但它仍然显示格式错误的反馈错误,这意味着我的代码中有一些错误。代码正在编译,我得到了输出,但我认为它不是预期输出的形式,因此反馈格式错误。
有没有其他方法可以只提取 JohnCalls(1)。任何帮助将不胜感激