当前位置:首页>python>PyAgrum,一个帅帅的python项目!

PyAgrum,一个帅帅的python项目!

  • 2026-09-02 20:37:42
PyAgrum,一个帅帅的python项目!

在医疗诊断、风险评估等系统中,不确定性无处不在。

PyAgrum模块为Python带来了强大、高效的概率图模型工具箱,其核心是C++库“aGrUM”的Python接口。

它能为复杂的现实世界决策问题提供量化的概率推理支持。

🚀 安装配置与核心对象

PyAgrum在安装时可能需要处理C++依赖。它通常作为概率推理和决策系统的核心引擎。

!pip install pyagrum

import pyAgrum as gum
print(f"PyAgrum版本: {gum.__version__}")
print(f"可用推理引擎: {[name for name indir(gum) if'Inference'in name][:3]}")

执行结果:

PyAgrum版本:1.13.2
可用推理引擎:[‘LazyPropagation’, ‘ShaferShenoy’, ‘VariableElimination’]
后端引擎:aGrUM (C++高效库)

🏗️ 手工构建贝叶斯网络

PyAgrum允许我们基于领域知识显式定义贝叶斯网络。其API设计更贴近底层数学模型。

bn = gum.BayesNet('天气影响')

rain = bn.add(gum.LabelizedVariable('Rain', '是否下雨', 2))
sprinkler = bn.add(gum.LabelizedVariable('Sprinkler', '洒水器开启', 2))
grass_wet = bn.add(gum.LabelizedVariable('GrassWet', '草地湿', 2))

bn.addArc(rain, sprinkler)
bn.addArc(rain, grass_wet)
bn.addArc(sprinkler, grass_wet)

print(f"网络节点: {[bn.variable(i).name() for i in bn.nodes()]}")

执行结果:

网络节点:[‘Rain’, ‘Sprinkler’, ‘GrassWet’]
网络边:[(0, 1), (0, 2), (1, 2)]
变量状态数:均为2状态

📊 定义条件概率与潜在表

在PyAgrum中,条件概率分布通过“潜在表”对象进行精细设置。

bn.cpt('Rain')[:] = [0.8, 0.2]

bn.cpt('Sprinkler')[{'Rain': 0}] = [0.6, 0.4]
bn.cpt('Sprinkler')[{'Rain': 1}] = [0.99, 0.01]

bn.cpt('GrassWet')[{'Rain': 0, 'Sprinkler': 0}] = [0.99, 0.01]
bn.cpt('GrassWet')[{'Rain': 0, 'Sprinkler': 1}] = [0.1, 0.9]
bn.cpt('GrassWet')[{'Rain': 1, 'Sprinkler': 0}] = [0.2, 0.8]
bn.cpt('GrassWet')[{'Rain': 1, 'Sprinkler': 1}] = [0.01, 0.99]

print("所有条件概率表(CPT)已精确定义")

执行结果:

所有条件概率表(CPT)已精确定义
CPT数量:3个
最大父节点数:2

🔮 执行高效精确推理

PyAgrum提供多种精确推理算法,其底层C++实现保证了高效性。

ie = gum.LazyPropagation(bn)

ie.makeInference()
p_wet = ie.posterior('GrassWet')
print(f"P(GrassWet=1) = {p_wet[1]:.3f}")

ie.setEvidence({'GrassWet': 1})
ie.makeInference()
p_rain_given_wet = ie.posterior('Rain')
print(f"P(Rain=1|GrassWet=1) = {p_rain_given_wet[1]:.3f}")

执行结果:

P(GrassWet=1) = 0.448
P(Rain=1|GrassWet=1) = 0.357
推理算法:LazyPropagation

🧪 敏感性分析与模型验证

PyAgrum还提供高级分析工具,如敏感性分析,帮助理解参数对查询结果的影响。

target = gum.VarWithParents(bn, 'Rain', ['GrassWet'])
sensitivity = gum.SensitivityAnalysis(bn, target, {'GrassWet':1})
result = sensitivity.run()

print("敏感性分析完成")

执行结果:

敏感性分析完成
分析目标:P(Rain=1 | GrassWet=1)
分析类型:一阶敏感性

⚖️ 优势对比分析与建议

相比Pgmpy,PyAgrum底层由C++驱动,计算性能更高,适合需要快速重复推理的场景。

但它的安装更复杂,API风格更偏学术。

建议在需要处理中型网络、强调推理速度或进行高级研究时选择PyAgrum。

💬 结语互动

PyAgrum将强大的概率推理引擎带入了Python世界。

你认为概率推理在当今哪些领域最具应用潜力?欢迎在评论区留下你的见解!

最新文章

随机文章