Python 概率图模型库
邮件列表:pgmpy@googlegroups.com
Python 3.3
NetworkX 1.8.1
Scipy 0.12.1
Numpy 1.7.1
student = BayesianModel()
# 实例化一个名为 'student' 的新贝叶斯模型
student.add_nodes('diff', 'intel', 'grade')
# 向 student 添加标签为 'diff', 'intel', 'grade' 的节点
student.add_edges(('diff', 'intel'), 'grade')
# 添加从 'diff' 到 'grade' 和从 'intel' 到 'grade' 的有向边
student.add_states('diff', ('hard', 'easy'))
student.add_rule_for_states('diff', ('easy', 'hard'))
student.add_cpd('diff', [[0.2],[0.8]])
# easy=0.2
# hard=0.8
student.add_states('intel', ('avg', 'dumb', 'smart'))
student.add_rule_for_states('intel', ('dumb', 'avg', 'smart'))
student.add_cpd('intel', [[0.5], [0.3], [0.2]])
# dumb=0.5
# avg=0.3
# smart=0.2
student.add_states('grades', ('A','C','B'))
student.add_rule_for_parents('grades', ('diff', 'intel'))
student.add_rule_for_states('grades', ('A', 'B', 'C'))
student.add_cpd('grade',
[[0.1,0.1,0.1,0.1,0.1,0.1],
[0.1,0.1,0.1,0.1,0.1,0.1],
[0.8,0.8,0.8,0.8,0.8,0.8]]
)
# diff: easy hard
# intel: dumb avg smart dumb avg smart
# gradeA: 0.1 0.1 0.1 0.1 0.1 0.1
# gradeB: 0.1 0.1 0.1 0.1 0.1 0.1
# gradeC: 0.8 0.8 0.8 0.8 0.8 0.8
student.add_observation(intel.smart, intel.avg, diff.easy)
# 观测参数:学生的智力为 smart 或 avg,且课程难度为 easy
student.remove_observation(intel.smart)
# 移除 intel.smart 的观测,当前观测参数:智力为 avg,难度为 easy
active_trail = student.is_active_trail(grade, intel)
# 如果 grade 和 intel 之间存在活跃路径,则返回 True
updated_cpd = student.observed_cpd('grade')
# 返回上次观测后新的条件概率分布(CPD)二维数组
student.reset()
# 将所有参数设为非观测状态,并将模型重置为初始状态(使用初始用户给定的 CPDs)