贝叶斯网络算法中的错误:使用Python的Monty Hall问题

2024-04-26 22:45:29 发布

您现在位置:Python中文网/ 问答频道 /正文

import math
from pomegranate import *
import pomegranate as pg
guest= pg.DiscreteDistribution({'A':1./3,'B':1./3,'C':1./3})
prize= pg.DiscreteDistribution({'A':1./3,'B':1./3,'C':1./3})
monty=pg.ConditionalProbabilityTable(
    [['A','A','A',0.0],
     ['A','A','B',0.5],
     ['A','A','C',0.5],
     ['A','B','A',0.0],
     ['A','B','B',0.0],  
     ['A','B','C',1.0], 
     ['A','C','A',0.0], 
     ['A','C','B',1.0], 
     ['A','C','C',0.0], 
     ['B','A','A',0.0], 
     ['B','A','B',0.0], 
     ['B','A','C',1.0], 
     ['B','B','A',0.5],
     ['B','B','B',0.0], 
     ['B','B','C',0.5], 
     ['B','C','A',1.0], 
     ['B','C','B',0.0], 
     ['B','C','C',0.0], 
     ['C','A','A',0.0], 
     ['C','A','B',1.0], 
     ['C','A','C',0.0],
     ['C','B','A',1.0], 
     ['C','B','B',0.0], 
     ['C','B','C',0.0], 
     ['C','C','A',0.5], 
     ['C','C','B',0.5], 
     ['C','C','C',0.0]],[guest,prize])   

s1=pg.State(guest,name="guest")
s2=pg.State(prize,name="prize")
s3=pg.State(monty,name="monty")
network=pg.BayesianNetwork("Monty Hall Problem")
network.add_states(s1,s2,s3)
network.add_edge(s1,s2)
network.add_edge(s1,s3)
network.bake()

beliefs=network.predict_proba({'guest':'A'})
beliefs=map(str,beliefs)
print("\n".join("{}\t{}".format(state.name,belief)for state,belief in zip(network.states,beliefs)))



beliefs=network.predict_proba({'guest':'A','monty':'B'})
print("\n".join("{}\t{}".format(state.name,belief)for state,belief in zip(network.states,beliefs)))

我面临的错误是:

Traceback (most recent call last):
  File "Bayesian_network_monty.py", line 43, in <module>
    beliefs=network.predict_proba({'guest':'A'})
  File "pomegranate\BayesianNetwork.pyx", line 609, in pomegranate.BayesianNetwork.BayesianNetwork.predict_proba
  File "pomegranate\FactorGraph.pyx", line 345, in pomegranate.FactorGraph.FactorGraph.predict_proba
  File "pomegranate\distributions\JointProbabilityTable.pyx", line 188, in pomegranate.distributions.JointProbabilityTable.JointProbabilityTable.marginal
**AttributeError: 'NoneType' object has no attribute 'log_probability'**

我如何解决这个问题


Tags: nameinnetworkpredictpgstateguestmonty