贝叶斯网络python代码
时间: 2023-10-01 09:02:07 浏览: 205
朴素贝叶斯的Python代码实战.zip
5星 · 资源好评率100%
以下是一个简单的贝叶斯网络Python示例:
```python
# 导入所需的库
from pgmpy.models import BayesianModel
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination
# 创建贝叶斯网络模型
model = BayesianModel([('A', 'B'), ('C', 'B'), ('B', 'D')])
# 定义节点的条件概率分布(CPD)
cpd_a = TabularCPD(variable='A', variable_card=2, values=[[0.3], [0.7]])
cpd_c = TabularCPD(variable='C', variable_card=2, values=[[0.4], [0.6]])
cpd_b = TabularCPD(variable='B', variable_card=2,
values=[[0.8, 0.7, 0.6, 0.1], [0.2, 0.3, 0.4, 0.9]],
evidence=['A', 'C'], evidence_card=[2, 2])
cpd_d = TabularCPD(variable='D', variable_card=2,
values=[[0.9, 0.6], [0.1, 0.4]],
evidence=['B'], evidence_card=[2])
# 将CPD添加到模型中
model.add_cpds(cpd_a, cpd_c, cpd_b, cpd_d)
# 验证模型是否有效
model.check_model()
# 创建推理引擎
infer = VariableElimination(model)
# 计算给定观测值的概率分布
posterior = infer.query(['D'], evidence={'A': 1, 'C': 0})
print(posterior['D'])
```
在此示例中,我们创建了一个包含四个节点(A,B,C和D)的贝叶斯网络模型,并定义了每个节点的条件概率分布。然后,我们使用PGMPy库的`VariableElimination`类创建了一个推理引擎,并使用`infer.query`方法计算了给定观测值的概率分布。最后,我们打印了节点D的后验概率分布。
阅读全文