Python Library for Probabilistic Graphical Models
Documentation: pgmpy
Mailing List: pgmpy@googlegroups.com
irc: #pgmpy on freenode.net
- Python 3.3
- NetworkX 1.8.1
- Scipy 0.12.1
- Numpy 1.7.1
- Cython 0.19 (optional)
pgmpy is installed using distutils
. If you have the tools installed
to build a python extension module:
sudo python3 setup.py install
from pgmpy import BayesianModel as bm
student = bm.BayesianModel()
# instantiates a new Bayesian Model called 'student'
student.add_nodes_from(['diff', 'intel', 'grade'])
# adds nodes labelled 'diff', 'intel', 'grade' to student
student.add_edges_from([('diff', 'grade'), ('intel', 'grade')])
# adds directed edges from 'diff' to 'grade' and 'intel' to 'grade'
student.set_states({'diff': ['hard', 'easy']})
student.set_rule_for_states('diff', ['easy', 'hard'])
student.set_cpd('diff', [[0.2],[0.8]])
#easy=0.2
#hard=0.8
student.set_states({'intel': ['avg', 'dumb', 'smart']})
student.set_rule_for_states('intel', ['dumb', 'avg', 'smart'])
student.set_cpd('intel', [[0.5], [0.3], [0.2]])
#dumb=0.5
#avg=0.3
#smart=0.2
student.set_states({'grade': ['A','C','B']})
student.set_rule_for_parents('grade', ['diff', 'intel'])
student.set_rule_for_states('grade', ['A', 'B', 'C'])
student.set_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.set_observations({'intel': 'smart', 'diff': 'easy'})
# observed parameters are that intel of student is smart and
# difficulty is easy
student.reset_observations('intel')
# reset observations for intel
active_trail = student.is_active_trail('grade', 'intel')
# returns True if active trail exists between grade and intel