A SymbolicBayesNet
is a directed acyclic graph (DAG) composed of SymbolicConditional
objects. It represents the structure of a factorized probability distribution P(X) = Π P(Xi | Parents(Xi)) purely in terms of variable connectivity.
It is typically the result of running sequential variable elimination on a SymbolicFactorGraph
.
from gtsam import SymbolicConditional, SymbolicFactorGraph, Ordering
from gtsam.symbol_shorthand import X, L
import graphviz
Creating a SymbolicBayesNet¶
SymbolicBayesNets are usually created by eliminating a SymbolicFactorGraph. But you can also build them directly:
from gtsam import SymbolicBayesNet
# Create a new Bayes Net
symbolic_bayes_net = SymbolicBayesNet()
# Add conditionals directly
symbolic_bayes_net.push_back(SymbolicConditional(L(1), X(0))) # P(l1 | x0)
symbolic_bayes_net.push_back(SymbolicConditional(X(0), X(1))) # P(x0 | x1)
symbolic_bayes_net.push_back(SymbolicConditional(L(2), X(1))) # P(l2 | x1)
symbolic_bayes_net.push_back(SymbolicConditional(X(1), X(2))) # P(x1 | x2)
symbolic_bayes_net.push_back(SymbolicConditional(X(2))) # P(x2)
symbolic_bayes_net.print("Directly Built Symbolic Bayes Net:\n")
Directly Built Symbolic Bayes Net:
size: 5
conditional 0: P( l1 | x0)
conditional 1: P( x0 | x1)
conditional 2: P( l2 | x1)
conditional 3: P( x1 | x2)
conditional 4: P( x2)
Accessing Conditionals and Visualization¶
# Access a conditional by index
conditional_1 = bayes_net.at(1) # P(x0 | l1)
conditional_1.print("Conditional at index 1: ")
# Visualize the Bayes Net structure
display(graphviz.Source(bayes_net.dot()))
Loading...