DBNInference#
- class pgmpy.inference.DBNInference(model)[source]#
Bases:
InferenceClass 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
References
- [1] Dynamic Bayesian Networks: Representation, Inference and Learning
by Kevin Patrick Murphy http://www.cs.ubc.ca/~murphyk/Thesis/thesis.pdf
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) >>> sorted(dbn_inf.start_junction_tree.nodes()) [(<DynamicNode(X, 0) at 0x...>, <DynamicNode(Y, 0) at 0x...>), (<DynamicNode(X, 0) at 0x...>, <DynamicNode(Z, 0) at 0x...>)] >>> sorted(tuple(sorted(n)) for n in dbn_inf.one_and_half_junction_tree.nodes()) ... [(<DynamicNode(X, 1) at 0x...>, <DynamicNode(Y, 1) at 0x...>), (<DynamicNode(X, 1) at 0x...>, <DynamicNode(Z, 1) at 0x...>), (<DynamicNode(Z, 0) at 0x...>, <DynamicNode(Z, 1) at 0x...>)]
- 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])