def bn_earthquake(): g = core.BayesNet() g.add_variable('Earthquake', (0, 1)) g.add_variable('Burglar', (0, 1)) g.add_variable('Radio', (0, 1)) g.add_variable('Alarm', (0, 1)) g.add_variable('Phone', (0, 1)) g.add_cpt(None, 'Earthquake', {0: 0.999, 1: 0.001}) g.add_cpt(None, 'Burglar', {0: 0.999, 1: 0.001}) g.add_cpt(('Burglar', 'Earthquake'), 'Alarm', {(0, 0, 0): 0.999, (0, 0, 1): 0.001, (1, 0, 0): 0.00999, (1, 0, 1): 0.99001, (0, 1, 0): 0.98901, (0, 1, 1): 0.01099, (1, 1, 0): 0.0098901, (1, 1, 1): 0.9901099}) g.add_cpt('Alarm', 'Phone', {(0, 1): 0, (0, 0): 1, (1, 0): 0.3, (1, 1): 0.7}) g.add_cpt('Earthquake', 'Radio', {(0, 1): 0, (0, 0): 1, (1, 0): 0.5, (1, 1): 0.5}) return g
def bn_naive_bayes(): g = core.BayesNet() g.add_variable('Coin', ('a', 'b', 'c')) g.add_variable('X1', ('H', 'T')) g.add_variable('X2', ('H', 'T')) g.add_variable('X3', ('H', 'T')) g.add_cpt(None, 'Coin', {'a': 1.0 / 3, 'b': 1.0 / 3, 'c': 1.0 / 3}) g.add_cpt('Coin', 'X1', {('a', 'H'): 0.2, ('a', 'T'): 0.8, ('b', 'H'): 0.6, ('b', 'T'): 0.4, ('c', 'H'): 0.8, ('c', 'T'): 0.2}) g.add_cpt('Coin', 'X2', {('a', 'H'): 0.2, ('a', 'T'): 0.8, ('b', 'H'): 0.6, ('b', 'T'): 0.4, ('c', 'H'): 0.8, ('c', 'T'): 0.2}) g.add_cpt('Coin', 'X3', {('a', 'H'): 0.2, ('a', 'T'): 0.8, ('b', 'H'): 0.6, ('b', 'T'): 0.4, ('c', 'H'): 0.8, ('c', 'T'): 0.2}) return g
def bn_exam(): g = core.BayesNet() g.add_variable('X1', ('0', '1')) g.add_variable('X2', ('0', '1')) g.add_variable('X3', ('0', '1')) g.add_variable('X4', ('0', '1')) g.add_variable('X5', ('0', '1')) g.add_variable('X6', ('0', '1')) g.add_variable('X7', ('0', '1')) g.add_cpt(None, 'X1', {'0': 1. / 3, '1': 2. / 3}) g.add_cpt( 'X1', 'X2', { ('1', '1'): 3. / 4, ('1', '0'): 1. / 4, ('0', '1'): 1. / 4, ('0', '0'): 3. / 4 }) g.add_cpt( 'X1', 'X3', { ('1', '1'): 3. / 4, ('1', '0'): 1. / 4, ('0', '1'): 1. / 4, ('0', '0'): 3. / 4 }) g.add_cpt( 'X2', 'X4', { ('1', '1'): 3. / 4, ('1', '0'): 1. / 4, ('0', '1'): 1. / 4, ('0', '0'): 3. / 4 }) g.add_cpt( 'X2', 'X5', { ('1', '1'): 3. / 4, ('1', '0'): 1. / 4, ('0', '1'): 1. / 4, ('0', '0'): 3. / 4 }) g.add_cpt( 'X3', 'X6', { ('1', '1'): 3. / 4, ('1', '0'): 1. / 4, ('0', '1'): 1. / 4, ('0', '0'): 3. / 4 }) g.add_cpt( 'X3', 'X7', { ('1', '1'): 3. / 4, ('1', '0'): 1. / 4, ('0', '1'): 1. / 4, ('0', '0'): 3. / 4 }) return g
def bn_vstruct(): g = core.BayesNet() g.add_variable('X', (0, 1)) g.add_variable('Y', (0, 1)) g.add_variable('Z', (0, 1)) g.add_cpt(None, 'X', {0: 0.001, 1: 0.999}) g.add_cpt(None, 'Y', {0: 0.001, 1: 0.999}) g.add_cpt( ('X', 'Y'), 'Z', { (0, 0, 0): 0.99, (0, 0, 1): 0.01, (0, 1, 0): 0.99, (0, 1, 1): 0.01, (1, 0, 0): 0.99, (1, 0, 1): 0.01, (1, 1, 0): 0.001, (1, 1, 1): 0.999 }) return g
def define_graph(): g = core.BayesNet() g.add_nodes_from(['Earthquake', 'Burglar', 'Radio', 'Alarm', 'Phone']) g.add_edges_from([('Earthquake', 'Radio'), ('Earthquake', 'Alarm'), ('Burglar', 'Alarm'), ('Alarm', 'Phone')]) return g
def bn_independent(): g = core.BayesNet() g.add_nodes_from(['X', 'Z']) return g
def bn_v_structure(): g = core.BayesNet() g.add_nodes_from(['X', 'Y', 'Z']) g.add_edges_from([('X', 'Z'), ('Y', 'Z')]) return g
def bn_naive_bayes(): g = core.BayesNet() g.add_nodes_from(['X', 'Y', 'Z']) g.add_edges_from([('X', 'Y'), ('X', 'Z')]) return g
def bn_chain(): g = core.BayesNet() g.add_nodes_from(['X', 'Y', 'Z']) g.add_edges_from([('X', 'Y'), ('Y', 'Z')]) return g
def bn_dependent(): g = core.BayesNet() g.add_nodes_from(['X', 'Z']) g.add_edge('X', 'Z') return g
import matplotlib.pylab as plt import core import bprop import sampling # Create earthquake Bayesian network. bn = core.BayesNet() bn.add_variable('Earthquake', (0, 1)) bn.add_variable('Burglar', (0, 1)) bn.add_variable('Radio', (0, 1)) bn.add_variable('Alarm', (0, 1)) bn.add_variable('Phone', (0, 1)) bn.add_cpt(None, 'Earthquake', {0: 0.999, 1: 0.001}) bn.add_cpt(None, 'Burglar', {0: 0.999, 1: 0.001}) bn.add_cpt(('Burglar', 'Earthquake'), 'Alarm', {(0, 0, 0): 0.999, (0, 0, 1): 0.001, (1, 0, 0): 0.00999, (1, 0, 1): 0.99001, (0, 1, 0): 0.98901, (0, 1, 1): 0.01099, (1, 1, 0): 0.0098901, (1, 1, 1): 0.9901099}) bn.add_cpt('Alarm', 'Phone', {(0, 1): 0, (0, 0): 1,