📜  贝叶斯信念网络的基本理解(1)

📅  最后修改于: 2023-12-03 14:57:46.565000             🧑  作者: Mango

贝叶斯信念网络的基本理解

什么是贝叶斯信念网络?

贝叶斯信念网络(Bayesian Belief Network,BBN)是一种概率图模型,用于描述变量之间的概率关系。BBN 由节点和边构成,每个节点表示一个变量,每个边表示两个变量之间的依赖关系。BBN 通过联合概率分布来描述变量之间的关系。

贝叶斯信念网络的优点
  1. 建模方便:BBN 可以以图形化的形式表示变量之间的关系,更容易对领域的专家进行解释;
  2. 推理高效:相比于其他的推理算法,BBN 的推理算法通常更加高效;
  3. 不确定性处理:BBN 可以处理不同变量之间的不确定性,即在给定一些变量的值时,可以预测其它变量的概率分布。
BBN 与其他图模型的比较

与贝叶斯信念网络类似的概率图模型还有马尔科夫网络(Markov Network)和条件随机场(Conditional Random Field)。与贝叶斯信念网络相比,马尔科夫网络和条件随机场通常更加强调局部的概率关系。BBN 通常更加适用于全局与局部的变量之间存在很强的关联的场景。

BBN 的建模过程

BBN 的建模过程包括:

  1. 定义变量:确定领域中需要建模的变量;
  2. 确定节点:将每个变量表示为一个节点,并将节点之间的依赖关系表示为边;
  3. 确定概率分布:为每个节点定义概率分布,即给定其它节点的条件下,自身出现的概率;
  4. 模型验证:通过实验或领域专家的确认验证模型的准确性。
BBN 的推理过程

BBN 的推理过程包括:

  1. 给定一些节点的值(观测值);
  2. 利用贝叶斯公式计算原本不存在的节点的后验概率分布;
  3. 将计算得到的后验概率作为新的观测值,进行下一轮推理。
代码示例
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 库中贝叶斯信念网络的示例代码。