Inference

Inference is the process that consists in computing new probabilistc information from a Markov network and some evidence. aGrUM/pyAgrum mainly focus and the computation of (joint) posterior for some variables of the Markov networks given soft or hard evidence that are the form of likelihoods on some variables. Inference is a hard task (NP-complete). For now, aGrUM/pyAgrum implements only one exact inference for Markov Network.

Shafer Shenoy Inference

class pyAgrum.ShaferShenoyMNInference(MN, use_binary_join_tree=True)

Class used for Shafer-Shenoy inferences for Markov network.

ShaferShenoyInference(bn) -> ShaferShenoyInference
Parameters:
  • mn (pyAgrum.MarkovNet) – a Markov network

Parameters
  • MN (IMarkovNet) –

  • use_binary_join_tree (bool) –

H(*args)
Parameters
  • X (int) – a node Id

  • nodeName (str) – a node name

Returns

the Shanon’s entropy of a node given the observation

Return type

float

I(X, Y)
Parameters
  • X (int or str) – a node Id or a node name

  • Y (int or str) – another node Id or node name

Returns

the Mutual Information of X and Y given the observation

Return type

float

MN()
Return type

pyAgrum.IMarkovNet

VI(X, Y)
Parameters
  • X (int or str) – a node Id or a node name

  • Y (int or str) – another node Id or node name

Returns

variation of information between X and Y

Return type

float

addAllTargets()

Add all the nodes as targets.

Return type

None

addEvidence(*args)

Adds a new evidence on a node (might be soft or hard).

Parameters
  • id (int) – a node Id

  • nodeName (int) – a node name

  • val – (int) a node value

  • val – (str) the label of the node value

  • vals (list) – a list of values

Raises
Return type

None

addJointTarget(targets)

Add a list of nodes as a new joint target. As a collateral effect, every node is added as a marginal target.

Parameters
  • list – a list of names of nodes

  • targets (object) –

Raises

pyAgrum.UndefinedElement – If some node(s) do not belong to the Bayesian network

Return type

None

addTarget(*args)

Add a marginal target to the list of targets.

Parameters
  • target (int) – a node Id

  • nodeName (str) – a node name

Raises

pyAgrum.UndefinedElement – If target is not a NodeId in the Bayes net

Return type

None

chgEvidence(*args)

Change the value of an already existing evidence on a node (might be soft or hard).

Parameters
  • id (int) – a node Id

  • nodeName (int) – a node name

  • val – (int) a node value

  • val – (str) the label of the node value

  • vals (list) – a list of values

Raises
Return type

None

eraseAllEvidence()

Removes all the evidence entered into the network.

Return type

None

eraseAllJointTargets()

Clear all previously defined joint targets.

Return type

None

eraseAllMarginalTargets()

Clear all the previously defined marginal targets.

Return type

None

eraseAllTargets()

Clear all previously defined targets (marginal and joint targets).

As a result, no posterior can be computed (since we can only compute the posteriors of the marginal or joint targets that have been added by the user).

Return type

None

eraseEvidence(*args)

Remove the evidence, if any, corresponding to the node Id or name.

Parameters
  • id (int) – a node Id

  • nodeName (int) – a node name

Raises

pyAgrum.IndexError – If the node does not belong to the Bayesian network

Return type

None

eraseJointTarget(targets)

Remove, if existing, the joint target.

Parameters
  • list – a list of names or Ids of nodes

  • targets (object) –

Raises
  • pyAgrum.IndexError – If one of the node does not belong to the Bayesian network

  • pyAgrum.UndefinedElement – If node Id is not in the Bayesian network

Return type

None

eraseTarget(*args)

Remove, if existing, the marginal target.

Parameters
  • target (int) – a node Id

  • nodeName (int) – a node name

Raises
  • pyAgrum.IndexError – If one of the node does not belong to the Bayesian network

  • pyAgrum.UndefinedElement – If node Id is not in the Bayesian network

Return type

None

evidenceImpact(target, evs)

Create a pyAgrum.Potential for P(target|evs) (for all instanciation of target and evs)

Parameters
  • target (set) – a set of targets ids or names.

  • evs (set) – a set of nodes ids or names.

Warning

if some evs are d-separated, they are not included in the Potential.

Returns

a Potential for P(targets|evs)

Return type

pyAgrum.Potential

evidenceJointImpact(*args)

Create a pyAgrum.Potential for P(joint targets|evs) (for all instanciation of targets and evs)

Parameters
  • targets – (int) a node Id

  • targets – (str) a node name

  • evs (set) – a set of nodes ids or names.

Returns

a Potential for P(target|evs)

Return type

pyAgrum.Potential

Raises

pyAgrum.Exception – If some evidene entered into the Bayes net are incompatible (their joint proba = 0)

evidenceProbability()
Returns

the probability of evidence

Return type

float

hardEvidenceNodes()
Returns

the set of nodes with hard evidence

Return type

set

hasEvidence(*args)
Parameters
  • id (int) – a node Id

  • nodeName (str) – a node name

Returns

True if some node(s) (or the one in parameters) have received evidence

Return type

bool

Raises

pyAgrum.IndexError – If the node does not belong to the Bayesian network

hasHardEvidence(nodeName)
Parameters
  • id (int) – a node Id

  • nodeName (str) – a node name

Returns

True if node has received a hard evidence

Return type

bool

Raises

pyAgrum.IndexError – If the node does not belong to the Bayesian network

hasSoftEvidence(*args)
Parameters
  • id (int) – a node Id

  • nodeName (str) – a node name

Returns

True if node has received a soft evidence

Return type

bool

Raises

pyAgrum.IndexError – If the node does not belong to the Bayesian network

isJointTarget(targets)
Parameters
  • list – a list of nodes ids or names.

  • targets (object) –

Returns

True if target is a joint target.

Return type

bool

Raises
  • pyAgrum.IndexError – If the node does not belong to the Bayesian network

  • pyAgrum.UndefinedElement – If node Id is not in the Bayesian network

isTarget(*args)
Parameters
  • variable (int) – a node Id

  • nodeName (str) – a node name

Returns

True if variable is a (marginal) target

Return type

bool

Raises
  • pyAgrum.IndexError – If the node does not belong to the Bayesian network

  • pyAgrum.UndefinedElement – If node Id is not in the Bayesian network

joinTree()
Returns

the current join tree used

Return type

pyAgrum.CliqueGraph

jointMutualInformation(targets)
Parameters

targets (object) –

Return type

float

jointPosterior(targets)

Compute the joint posterior of a set of nodes.

Parameters

list – the list of nodes whose posterior joint probability is wanted

Warning

The order of the variables given by the list here or when the jointTarget is declared can not be assumed to be used bu the Potential.

Returns

a const ref to the posterior joint probability of the set of nodes.

Return type

pyAgrum.Potential

Raises

pyAgrum.UndefinedElement – If an element of nodes is not in targets

Parameters

targets (object) –

jointTargets()
Returns

the list of target sets

Return type

list

junctionTree()
Returns

the current junction tree

Return type

pyAgrum.CliqueGraph

makeInference()

Perform the heavy computations needed to compute the targets’ posteriors

In a Junction tree propagation scheme, for instance, the heavy computations are those of the messages sent in the JT. This is precisely what makeInference should compute. Later, the computations of the posteriors can be done ‘lightly’ by multiplying and projecting those messages.

Return type

None

nbrEvidence()
Returns

the number of evidence entered into the Bayesian network

Return type

int

nbrHardEvidence()
Returns

the number of hard evidence entered into the Bayesian network

Return type

int

nbrJointTargets()
Returns

the number of joint targets

Return type

int

nbrSoftEvidence()
Returns

the number of soft evidence entered into the Bayesian network

Return type

int

nbrTargets()
Returns

the number of marginal targets

Return type

int

posterior(*args)

Computes and returns the posterior of a node.

Parameters
  • var (int) – the node Id of the node for which we need a posterior probability

  • nodeName (str) – the node name of the node for which we need a posterior probability

Returns

a const ref to the posterior probability of the node

Return type

pyAgrum.Potential

Raises

pyAgrum.UndefinedElement – If an element of nodes is not in targets

setEvidence(evidces)

Erase all the evidences and apply addEvidence(key,value) for every pairs in evidces.

Parameters

evidces (dict) – a dict of evidences

Raises
  • gum.InvalidArgument – If one value is not a value for the node

  • gum.InvalidArgument – If the size of a value is different from the domain side of the node

  • gum.FatalError – If one value is a vector of 0s

  • gum.UndefinedElement – If one node does not belong to the Bayesian network

setTargets(targets)

Remove all the targets and add the ones in parameter.

Parameters

targets (set) – a set of targets

Raises

gum.UndefinedElement – If one target is not in the Bayes net

softEvidenceNodes()
Returns

the set of nodes with soft evidence

Return type

set

targets()
Returns

the list of marginal targets

Return type

list

property thisown

The membership flag

updateEvidence(evidces)

Apply chgEvidence(key,value) for every pairs in evidces (or addEvidence).

Parameters

evidces (dict) – a dict of evidences

Raises
  • gum.InvalidArgument – If one value is not a value for the node

  • gum.InvalidArgument – If the size of a value is different from the domain side of the node

  • gum.FatalError – If one value is a vector of 0s

  • gum.UndefinedElement – If one node does not belong to the Bayesian network