📅  最后修改于: 2023-12-03 14:57:46.565000             🧑  作者: Mango
贝叶斯信念网络(Bayesian Belief Network,BBN)是一种概率图模型,用于描述变量之间的概率关系。BBN 由节点和边构成,每个节点表示一个变量,每个边表示两个变量之间的依赖关系。BBN 通过联合概率分布来描述变量之间的关系。
与贝叶斯信念网络类似的概率图模型还有马尔科夫网络(Markov Network)和条件随机场(Conditional Random Field)。与贝叶斯信念网络相比,马尔科夫网络和条件随机场通常更加强调局部的概率关系。BBN 通常更加适用于全局与局部的变量之间存在很强的关联的场景。
BBN 的建模过程包括:
BBN 的推理过程包括:
from pomegranate import *
# 定义节点
rain = DiscreteDistribution({'rain': 0.2, 'no_rain': 0.8})
sprinkler = ConditionalProbabilityTable(
[['rain', 'on', 0.01],
['rain', 'off', 0.99],
['no_rain', 'on', 0.4],
['no_rain', 'off', 0.6]], [rain])
grass_wet = ConditionalProbabilityTable(
[['on', 'wet', 0.99],
['on', 'not_wet', 0.01],
['off', 'wet', 0.9],
['off', 'not_wet', 0.1],
['no_rain,on', 'wet', 0.8],
['no_rain,on', 'not_wet', 0.2],
['no_rain,off', 'wet', 0.2],
['no_rain,off', 'not_wet', 0.8],
['rain,on', 'wet', 0.9],
['rain,on', 'not_wet', 0.1],
['rain,off', 'wet', 0.01],
['rain,off', 'not_wet', 0.99]], [sprinkler, rain])
# 创建模型
model = BayesianNetwork('Rain-Sprinkler-Grass')
# 增加节点
model.add_nodes(rain, sprinkler, grass_wet)
# 增加边
model.add_edge(rain, sprinkler)
model.add_edge(rain, grass_wet)
model.add_edge(sprinkler, grass_wet)
# 定义模型结构
model.bake()
# 推断
beliefs = model.predict_proba({'rain': 'rain'})
# 查看结果
for node, belief in zip(model.states, beliefs):
print(node.name, belief.parameters[0])
以上是 Pomegranate 库中贝叶斯信念网络的示例代码。