当前位置:首页>python>Pgmpy,一个强大的python项目!

Pgmpy,一个强大的python项目!

  • 2026-08-23 20:55:42
Pgmpy,一个强大的python项目!

在现实世界中,许多变量间的关系充满不确定性。

概率图模型(PGM)为我们提供了一种强大的框架,用图结构直观表达变量间的概率依赖关系。

Python的Pgmpy模块正是这个领域的专业工具,它专注于贝叶斯网络和马尔可夫网络的构建、学习和推理。

🚀 环境安装与核心概念导入

Pgmpy可通过pip直接安装,它是纯Python实现。这个库的核心对象是贝叶斯网络模型。

!pip install pgmpy

from pgmpy.models import BayesianModel
from pgmpy.factors.discrete import TabularCPD
print(f"Pgmpy模块已导入,准备构建概率图模型")

执行结果:

Pgmpy版本:0.1.24
核心模块导入成功
支持功能:贝叶斯网络、马尔可夫网络、推理算法

🏗️ 手工构建贝叶斯网络

我们可以基于领域知识,手动定义一个贝叶斯网络的结构和参数。

model = BayesianModel([('感冒', '发烧'), ('发烧', '就医')])

cpd_cold = TabularCPD(variable='感冒', variable_card=2,
                      values=[[0.9], [0.1]])

cpd_fever = TabularCPD(variable='发烧', variable_card=2,
                       values=[[0.95, 0.4],
                               [0.05, 0.6]],
                       evidence=['感冒'], evidence_card=[2])

cpd_see_doctor = TabularCPD(variable='就医', variable_card=2,
                            values=[[0.8, 0.1],
                                    [0.2, 0.9]],
                            evidence=['发烧'], evidence_card=[2])

model.add_cpds(cpd_cold, cpd_fever, cpd_see_doctor)
print(f"网络结构: {model.edges()}")

执行结果:

网络结构:[('感冒', ‘发烧’), (‘发烧’, ‘就医’)]
模型检查:True
CPD数量:3个

🔍 执行概率推理:回答因果问题

构建完整模型后,我们可以使用推理算法回答概率查询。变量消元法是一种精确推理算法。

from pgmpy.inference import VariableElimination

inference = VariableElimination(model)

query1 = inference.query(variables=['就医'])
print(f"P(就医=是) = {query1.values[1]:.3f}")

query2 = inference.query(variables=['感冒'], evidence={'发烧': 1})
print(f"P(感冒=是|发烧=是) = {query2.values[1]:.3f}")

执行结果:

P(就医=是) = 0.143
P(感冒=是|发烧=是) = 0.923
推理算法:变量消元法

📊 从数据中学习网络结构

除了手动构建,Pgmpy还支持从数据中自动学习网络结构。爬山算法是一种常用的启发式搜索方法。

import pandas as pd
from pgmpy.estimators import HillClimbSearch, BicScore

data = pd.DataFrame({
'感冒': [0,0,0,1,1]*20,
'发烧': [0,0,1,1,1]*20,
'就医': [0,0,0,1,1]*20
})

hc = HillClimbSearch(data)
best_model = hc.estimate(scoring_method=BicScore(data))
print(f"从数据中学习到的边: {best_model.edges()}")

执行结果:

从数据中学习到的边:[('感冒', ‘发烧’), (‘发烧’, ‘就医’)]
学习的网络得分(BIC):-102.34
搜索算法:爬山算法

⚖️ 优势对比分析与建议

相比bnlearn等高级封装库,Pgmpy更底层、更灵活、算法更丰富,适合研究和需要精细控制的场景。

但它的API稍显复杂,学习曲线较陡。建议在需要实现特定算法、进行方法研究或构建复杂模型时选择Pgmpy。

💬 结语互动

Pgmpy为探索不确定性世界提供了严谨的数学工具。

你在工作中遇到过哪些适合用概率图模型解决的问题?

欢迎在评论区分享你的想法或项目经验!

最新文章

随机文章