Vertices

The building blocks of Keanu are vertices. They are used to describe random variables and the deterministic operations on them.

Previous page Next page

# Vertices

# Probabilistic

Probabilistic vertices are vertices that are not a deterministic function of their parents. An example of this is a GaussianVertex which is non-deterministic and has a probability distribution controlled by parameters that come from its parents.

Changing the value of their parent vertices may change the probability density function but it will not directly cause a change of the value of the vertex.

# Non-Probabilistic

The value of these vertices are completely dependent on their parent vertices’ values. For example, given C = A * B (for any vertices A and B), C is a non-probabilistic vertex. Even if A or B are probabilistic vertices, C is still completely dependent on their values which means it is non-probabilistic.

# Vertex Families

There are several families of vertices. Each family shares a common value type.

# The Double Family

A DoubleVertex is one whose values are double-precision floating point numbers. It can be used by most arithmetic operators. They can be used to describe a problem that can be solved using gradient ascent optimization.

The currently available double vertices are:

# The Integer Family

An IntegerVertex is similar to the DoubleVertex except its value is an integer.

The currently available integer vertices are:

# The Boolean (true/false) Family

A BooleanVertex can be used by most boolean operators. These can be observed directly and used in MCMC.

The currently available boolean vertices are:

# The Generic (everything else) family

These are the vertices that can have any type as a value. For example, this type can be an Enum or any user defined object. Let’s look at an example of this in Keanu with the CategoricalVertex which will return a value of the specified Enum MyType.

public enum MyType {
    A, B, C, D
}

public CategoricalVertex<MyType> getSelectorForMyType() {

    LinkedHashMap<MyType, DoubleVertex> frequency = new LinkedHashMap<>();
    frequency.put(A, new ConstantDoubleVertex(0.25));
    frequency.put(B, new ConstantDoubleVertex(0.25));
    frequency.put(C, new ConstantDoubleVertex(0.25));
    frequency.put(D, new ConstantDoubleVertex(0.25));

    return new CategoricalVertex<>(frequency);
}

The getSelectorForMyType() method returns a probabilistic vertex that would contain an object of type MyType A, B, C or D, 25% of the time respectively.

The currently available generic vertices are

# Tensors

Vertices also have a shape, which describes the tensor shape contained within them. A vertex with shape [2,2] represents a 2 by 2 matrix. A vertex of shape [1,3] represents a row vector of length 3. The shape can have any number of dimensions and any length.

Read more about tensors here