在医疗诊断、风险评估等系统中,不确定性无处不在。
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世界。
你认为概率推理在当今哪些领域最具应用潜力?欢迎在评论区留下你的见解!