pomegranate库调用报错:DiscreteDistribution未定义问题求助
问题
我在运行CS50人工智能课程中涉及pomegranate概率模型库的示例代码时遇到了问题。
示例代码:
from pomegranate import * class Node(): def __init__(self, distribution, name): self.distribution = distribution self.name = name # Rain node has no parents rain = Node(DiscreteDistribution({ "none": 0.7, "light": 0.2, "heavy": 0.1 }), name="rain") # Track maintenance node is conditional on rain maintenance = Node(ConditionalProbabilityTable([ ["none", "yes", 0.4], ["none", "no", 0.6], ["light", "yes", 0.2], ["light", "no", 0.8], ["heavy", "yes", 0.1], ["heavy", "no", 0.9] ], [rain.distribution]), name="maintenance") # Train node is conditional on rain and maintenance train = Node(ConditionalProbabilityTable([ ["none", "yes", "on time", 0.8], ["none", "yes", "delayed", 0.2], ["none", "no", "on time", 0.9], ["none", "no", "delayed", 0.1], ["light", "yes", "on time", 0.6], ["light", "yes", "delayed", 0.4], ["light", "no", "on time", 0.7], ["light", "no", "delayed", 0.3], ["heavy", "yes", "on time", 0.4], ["heavy", "yes", "delayed", 0.6], ["heavy", "no", "on time", 0.5], ["heavy", "no", "delayed", 0.5], ], [rain.distribution, maintenance.distribution]), name="train") # Appointment node is conditional on train appointment = Node(ConditionalProbabilityTable([ ["on time", "attend", 0.9], ["on time", "miss", 0.1], ["delayed", "attend", 0.6], ["delayed", "miss", 0.4] ], [train.distribution]), name="appointment") # Create a Bayesian Network and add states model = BayesianNetwork() model.add_states(rain, maintenance, train, appointment) # Add edges connecting nodes model.add_edge(rain, maintenance) model.add_edge(rain, train) model.add_edge(maintenance, train) model.add_edge(train, appointment) # Finalize model model.bake()
已尝试的操作:
- 执行
pip install pomegranate安装库 - 将pip更新至最新版本
报错信息:
rain = Node(DiscreteDistribution({ ^^^^^^^^^^^^^^^^^^^^ NameError: name 'DiscreteDistribution' is not defined
尽管DiscreteDistribution、ConditionalProbabilityTable及BayesianNetwork均为pomegranate官网列明的函数,仍出现未定义错误,希望得到解决。
解决方案
这个错误源于pomegranate v0.14+版本的API重构:原顶层类被移至子模块,且网络节点要求使用内置State对象,而非自定义节点类。可通过以下方式解决:
方式一:适配新版本API的完整修改代码
替换自定义Node类为pomegranate内置的State类,并调整导入路径:
from pomegranate import State, DiscreteDistribution, ConditionalProbabilityTable, BayesianNetwork # Rain node has no parents rain = State(DiscreteDistribution({ "none": 0.7, "light": 0.2, "heavy": 0.1 }), name="rain") # Track maintenance node is conditional on rain maintenance = State(ConditionalProbabilityTable([ ["none", "yes", 0.4], ["none", "no", 0.6], ["light", "yes", 0.2], ["light", "no", 0.8], ["heavy", "yes", 0.1], ["heavy", "no", 0.9] ], [rain.distribution]), name="maintenance") # Train node is conditional on rain and maintenance train = State(ConditionalProbabilityTable([ ["none", "yes", "on time", 0.8], ["none", "yes", "delayed", 0.2], ["none", "no", "on time", 0.9], ["none", "no", "delayed", 0.1], ["light", "yes", "on time", 0.6], ["light", "yes", "delayed", 0.4], ["light", "no", "on time", 0.7], ["light", "no", "delayed", 0.3], ["heavy", "yes", "on time", 0.4], ["heavy", "yes", "delayed", 0.6], ["heavy", "no", "on time", 0.5], ["heavy", "no", "delayed", 0.5], ], [rain.distribution, maintenance.distribution]), name="train") # Appointment node is conditional on train appointment = State(ConditionalProbabilityTable([ ["on time", "attend", 0.9], ["on time", "miss", 0.1], ["delayed", "attend", 0.6], ["delayed", "miss", 0.4] ], [train.distribution]), name="appointment") # Create a Bayesian Network and add states model = BayesianNetwork() model.add_states(rain, maintenance, train, appointment) # Add edges connecting nodes model.add_edge(rain, maintenance) model.add_edge(rain, train) model.add_edge(maintenance, train) model.add_edge(train, appointment) # Finalize model model.bake()
方式二:显式导入所需类(兼容自定义Node类场景)
若需保留自定义Node类,需修改导入语句指定子模块路径:
from pomegranate.distributions import DiscreteDistribution, ConditionalProbabilityTable from pomegranate.bayesian_network import BayesianNetwork
注意:此方式仅解决导入问题,新版本BayesianNetwork.add_states仍要求传入State对象,自定义Node类无法直接使用,建议优先采用方式一。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

