Dynamic Bayesian Network Inference¶
- class pgmpy.inference.dbn_inference.DBNInference(model)[source]¶
Class for performing inference using Belief Propagation method for the input Dynamic Bayesian Network.
For the exact inference implementation, the interface algorithm is used which is adapted from [1].
- Parameters:
model (Dynamic Bayesian Network) – Model for which inference is to performed
Examples
>>> from pgmpy.factors.discrete import TabularCPD >>> from pgmpy.models import DynamicBayesianNetwork as DBN >>> from pgmpy.inference import DBNInference >>> dbnet = DBN() >>> dbnet.add_edges_from( ... [(("Z", 0), ("X", 0)), (("X", 0), ("Y", 0)), (("Z", 0), ("Z", 1))] ... ) >>> z_start_cpd = TabularCPD(("Z", 0), 2, [[0.5], [0.5]]) >>> x_i_cpd = TabularCPD( ... ("X", 0), ... 2, ... [[0.6, 0.9], [0.4, 0.1]], ... evidence=[("Z", 0)], ... evidence_card=[2], ... ) >>> y_i_cpd = TabularCPD( ... ("Y", 0), ... 2, ... [[0.2, 0.3], [0.8, 0.7]], ... evidence=[("X", 0)], ... evidence_card=[2], ... ) >>> z_trans_cpd = TabularCPD( ... ("Z", 1), ... 2, ... [[0.4, 0.7], [0.6, 0.3]], ... evidence=[("Z", 0)], ... evidence_card=[2], ... ) >>> dbnet.add_cpds(z_start_cpd, z_trans_cpd, x_i_cpd, y_i_cpd) >>> dbnet.initialize_initial_state() >>> dbn_inf = DBNInference(dbnet) >>> dbn_inf.start_junction_tree.nodes() NodeView(((('X', 0), ('Y', 0)), (('X', 0), ('Z', 0)))) >>> dbn_inf.one_and_half_junction_tree.nodes() NodeView(((('Z', 1), ('Z', 0)), (('Y', 1), ('X', 1)), (('Z', 1), ('X', 1))))
References
- [1] Dynamic Bayesian Networks: Representation, Inference and Learning
by Kevin Patrick Murphy http://www.cs.ubc.ca/~murphyk/Thesis/thesis.pdf
- backward_inference(variables, evidence=None)[source]¶
Backward inference method using belief propagation.
- Parameters:
variables (list) – list of variables for which you want to compute the probability
evidence (dict) – a dict key, value pair as {var: state_of_var_observed} None if no evidence
Examples
>>> from pgmpy.factors.discrete import TabularCPD >>> from pgmpy.models import DynamicBayesianNetwork as DBN >>> from pgmpy.inference import DBNInference >>> dbnet = DBN() >>> dbnet.add_edges_from( ... [(("Z", 0), ("X", 0)), (("X", 0), ("Y", 0)), (("Z", 0), ("Z", 1))] ... ) >>> z_start_cpd = TabularCPD(("Z", 0), 2, [[0.5], [0.5]]) >>> x_i_cpd = TabularCPD( ... ("X", 0), ... 2, ... [[0.6, 0.9], [0.4, 0.1]], ... evidence=[("Z", 0)], ... evidence_card=[2], ... ) >>> y_i_cpd = TabularCPD( ... ("Y", 0), ... 2, ... [[0.2, 0.3], [0.8, 0.7]], ... evidence=[("X", 0)], ... evidence_card=[2], ... ) >>> z_trans_cpd = TabularCPD( ... ("Z", 1), ... 2, ... [[0.4, 0.7], [0.6, 0.3]], ... evidence=[("Z", 0)], ... evidence_card=[2], ... ) >>> dbnet.add_cpds(z_start_cpd, z_trans_cpd, x_i_cpd, y_i_cpd) >>> dbnet.initialize_initial_state() >>> dbn_inf = DBNInference(dbnet) >>> dbn_inf.backward_inference( ... [("X", 0)], {("Y", 0): 0, ("Y", 1): 1, ("Y", 2): 1} ... )[("X", 0)].values array([0.66594382, 0.33405618])
- forward_inference(variables, evidence=None, args=None)[source]¶
Forward inference method using belief propagation.
- Parameters:
variables (list) – list of variables for which you want to compute the probability
evidence (dict) – a dict key, value pair as {var: state_of_var_observed} None if no evidence
Examples
>>> from pgmpy.factors.discrete import TabularCPD >>> from pgmpy.models import DynamicBayesianNetwork as DBN >>> from pgmpy.inference import DBNInference >>> dbnet = DBN() >>> dbnet.add_edges_from( ... [(("Z", 0), ("X", 0)), (("X", 0), ("Y", 0)), (("Z", 0), ("Z", 1))] ... ) >>> z_start_cpd = TabularCPD(("Z", 0), 2, [[0.5], [0.5]]) >>> x_i_cpd = TabularCPD( ... ("X", 0), ... 2, ... [[0.6, 0.9], [0.4, 0.1]], ... evidence=[("Z", 0)], ... evidence_card=[2], ... ) >>> y_i_cpd = TabularCPD( ... ("Y", 0), ... 2, ... [[0.2, 0.3], [0.8, 0.7]], ... evidence=[("X", 0)], ... evidence_card=[2], ... ) >>> z_trans_cpd = TabularCPD( ... ("Z", 1), ... 2, ... [[0.4, 0.7], [0.6, 0.3]], ... evidence=[("Z", 0)], ... evidence_card=[2], ... ) >>> dbnet.add_cpds(z_start_cpd, z_trans_cpd, x_i_cpd, y_i_cpd) >>> dbnet.initialize_initial_state() >>> dbn_inf = DBNInference(dbnet) >>> dbn_inf.forward_inference( ... [("X", 2)], {("Y", 0): 1, ("Y", 1): 0, ("Y", 2): 1} ... )[("X", 2)].values array([0.76738736, 0.23261264])
- query(variables, evidence=None, args='exact')[source]¶
Query method for Dynamic Bayesian Network using Interface Algorithm.
- Parameters:
variables (list) – list of variables for which you want to compute the probability
evidence (dict) – a dict key, value pair as {var: state_of_var_observed} None if no evidence
Examples
>>> from pgmpy.factors.discrete import TabularCPD >>> from pgmpy.models import DynamicBayesianNetwork as DBN >>> from pgmpy.inference import DBNInference >>> dbnet = DBN() >>> dbnet.add_edges_from( ... [(("Z", 0), ("X", 0)), (("X", 0), ("Y", 0)), (("Z", 0), ("Z", 1))] ... ) >>> z_start_cpd = TabularCPD(("Z", 0), 2, [[0.5], [0.5]]) >>> x_i_cpd = TabularCPD( ... ("X", 0), ... 2, ... [[0.6, 0.9], [0.4, 0.1]], ... evidence=[("Z", 0)], ... evidence_card=[2], ... ) >>> y_i_cpd = TabularCPD( ... ("Y", 0), ... 2, ... [[0.2, 0.3], [0.8, 0.7]], ... evidence=[("X", 0)], ... evidence_card=[2], ... ) >>> z_trans_cpd = TabularCPD( ... ("Z", 1), ... 2, ... [[0.4, 0.7], [0.6, 0.3]], ... evidence=[("Z", 0)], ... evidence_card=[2], ... ) >>> dbnet.add_cpds(z_start_cpd, z_trans_cpd, x_i_cpd, y_i_cpd) >>> dbnet.initialize_initial_state() >>> dbn_inf = DBNInference(dbnet) >>> dbn_inf.query([("X", 0)], {("Y", 0): 0, ("Y", 1): 1, ("Y", 2): 1})[ ... ("X", 0) ... ].values array([0.66594382, 0.33405618])