Models

class lgbn.models.BayesianNetwork

A Bayesian Network.

A Bayesian network is a directed acyclic graph where each node is a random variable with a distribution conditional on the parent nodes.

add_cpd(cpd: CPD) None

Add a conditional probability distribution to the network.

Note

Also adds the node and edges to the underlying networkx.DiGraph. If there already is a conditional probability distribution it is replaced and new edges are added, but previous edges not present in the new distribution will not be removed.

Parameters:

cpd (CPD) – A conditional probability distribution

apply_op(op)

Modify the network according to the given operation.

An operation is an edge together with an action (add edge, remove edge, flip edge).

Parameters:

op – A tuple (action, (u, v)) where action is one of +, - or F and (u, v) is an edge.

Raises:
  • NotImplementedError – If the given action is not supported.

  • ValueError – If the edge is not in the network and operation requires editing it. (This is actually raised by networkx.DiGraph.remove_edge.)

cpd_class

The class used to instantiated CPDs when loading from a dict via .from_dict(data).

alias of CPD

cpds

A dictionary mapping node identifiers to Conditional Probability Distributions.

alias of Dict[Any, CPD]

classmethod from_dict(data)

Load Bayesian network from a dict.

Parameters:

data (Sequence[Dict[str, Any]]) – A list of dictionaries corresponding to CPDs. See CPD.to_dict for more information on the format.

Notes

This method expects the data to be sorted by node in topological order, so that a node always comes before its children. This is the way to_dict generates dictionaries.

to_dict()

Serializes the Bayesian network into a list of dictionaries.

Each dictionary is the result of serializing a CPD via CPD.to_dict.

update_cpds_from_structure() None

Updates the parents attribute in each CPD to match the current graph structure.

Tip

Use this method after updating the network structure (e.g. via learning).

class lgbn.models.CPD(node: Any, parents: Optional[tuple[Any]] = None)

A conditional probability distribution for a node.which also references the node’s parents.s

In a BayesianNetwork the probability distributions of the nodes are specified via CPDs or Conditional Probability distributions. These classes represent the probability distributions of the random variables in the nodes of a Bayesian network, which in general are conditioned on the parent nodes.

Note

This is a base class which cannot actually be used.

See also

LinearGaussianCPD

A conditional probability distribution for linear Gaussian Bayesian networks.

classmethod from_dict(data: Dict[str, Any])

Loads this conditional probability distribution from a dict.

to_dict() Dict[str, Any]

Serializes this conditional probability distribution into a dict.

class lgbn.models.LinearGaussianBayesianNetwork

A Bayesian network where every node has a Gaussian distribution, where the mean of each node is a linear combination of its parents plus a bias factor and the standard deviations of the nodes are independent.

The joint distribution of these networks also a Gaussian distribution, the parameters of which can be obtained via the to_joint_gaussian method.

cpd_class

alias of LinearGaussianCPD

to_joint_gaussian()

Get the equivalent multivariate Gaussian distribution to this Bayesian network.

Returns a scipy.stats.multivariate_normal frozen random variable which has attributes mean (vector of means) and cov (covariance matrix).

Returns:

A frozen random variable.

Return type:

scipy.stats.multivariate_normal

Notes

Linear Gaussian Bayesian networks have a joint probability distribution that is also normal, and thus this method is well defined. See p. 252 of [1] and pp. 370-371 of [2].

References

class lgbn.models.LinearGaussianCPD(node: Any, mean: Optional[float] = 0, var: Optional[float] = 1, parents: Optional[tuple[Any]] = None, weights: Optional[tuple[float]] = None)

A linear Gaussian conditional probability distribution.

A linear Gaussian conditional probability distribution is normal distribution where the mean is a linear combination of the means of the parent nodes plus a bias term, i.e. if this node (X) has parents \(U_1, \ldots, U_k\) then

\[p(X) = N(X \mid \mu + w_1 \mu_{U_1} + \ldots + w_k \mu_{U_k}, \sigma^2),\]

where \(\mu\) is specified via the mean parameter, \(\sigma^2\) via the var parameter and \(w_1, \ldots, w_k\) via the weights parameter.

mle(data: DataFrame)

Find maximum likelihood estimate for mean, variance and weights given the data and the dependencies on the parents.

Parameters:

data (pandas.DataFrame) – A DataFrame with one row per observation and one column per variable.

Returns:

A new conditional probability distribution where the parameters are set to the ML estimates.

Return type:

LinearGaussianCPD

Notes

Maximum likelihood estimation of parameters is computed using the sufficient statistics approach described in section 17.2.4 of [1].

References

to_dict()

Serializes this conditional probability distribution into a dict.