Skip to content

MINFO Tree ​

Minimum Information Trees visualize the structure of clustered high-dimensional data by building a tree over the points and laying that tree out, rather than fitting an embedding to the data directly.

How It Works ​

The points are read as one configuration of a q-state Potts model on a k-nearest-neighbor graph: each point carries a cluster label, and neighbouring points prefer to agree. From that model the method estimates an inverse temperature β by maximum pseudo-likelihood, then approximates a local shape operator at every vertex from the first- and second-order Fisher information. Those curvatures weight the graph's edges — shrunk by alpha when both ends share a label — and the minimum spanning tree of the weighted graph is the Minimum Information Tree.

The layout is KKMDS over the tree's shortest-path distances, which is the Kamada-Kawai algorithm the paper specifies.

Why or When to Use ​

Use it when you already have a clustering and want to inspect it: which clusters touch, where the boundaries are, and which points sit between groups. Because the output is a tree rather than a cloud of coordinates, it answers questions a scatterplot cannot — most usefully, the unique path between any two points. See Cluster Diagnostics for that.

Do not reach for it as a general-purpose projection. The paper's own limitations section is blunt about the dependency: the tree inherits whatever the clustering got wrong. That is also why clusters (or labels) is required rather than defaulted.

Example ​

Iris, clustered into three groups with Ward linkage. Points are coloured by the recovered cluster; edges are the tree.

How-to (Code) ​

javascript
import * as druid from "@saehrimnir/druidjs";

const data = [
  /* ... multi-dimensional data ... */
];

// `clusters` tells it how many groups to partition the data into for the labels field.
const minfo = new druid.MINFOTree(data, { clusters: 3 });

// The 2D layout, like any other DR method
const projection = minfo.transform();

// ...but the tree is the actual output
const edges = minfo.edges; // [[u, v, weight], ...], one per pair of adjacent points
const labels = minfo.labels; // the labels field, remapped to 0 … q-1
const curvature = minfo.curvature; // information curvature per point
const beta = minfo.beta; // the estimated Potts inverse temperature

Bring your own labels instead of clustering internally:

javascript
const minfo = new druid.MINFOTree(data, { labels: myClassLabels });

Parameters ​

ParameterDefaultMeaning
clusters—Number of clusters to partition the data into. Required unless labels is given. With the default hierarchical clustering the range is 2 … N-1; "kmeans" goes finer.
labelsnullPrecomputed labels, one per row. Bypasses the clustering step.
clustering"hierarchical""hierarchical" uses Ward linkage, matching the paper. "kmeans" is also available.
kround(ln N)Neighbors in the k-NN graph.
alpha(√5−1)/2Shrinkage on intra-cluster edge weights. The paper picks the golden ratio conjugate for interpretability rather than by tuning.
epsilon1e-3Floor on the curvature denominator. See the note below.
layout"kamada_kawai""MDS" stops at the classical-MDS warm start, which is much cheaper.

A note on the curvature ordering ​

The paper reads the curvature as "interior points low, boundary points high", but that only holds while β is small. Both φ and ψ vanish for an interior point as β grows — a neighbourhood of a single label makes the Gibbs weights degenerate — and by β ≈ 8 the second-order term has underflowed to exactly zero, leaving the curvature pinned at the top of the range instead of the bottom. Measured on clustered fixtures, the ordering flips somewhere around β ≈ 2, and well-separated clusters push β to around 11.

The formulas are implemented as published in either regime, and the spanning tree stays faithful to the clusters in both, because alpha and the sparsity of the k-NN graph govern which edges are even available far more than the curvature ordering does. It is worth knowing before reading too much into curvature directly.

Cost ​

All-pairs shortest paths over the tree needs O(N²) memory and the layout is O(N²) per iteration, so this is meant for up to a few thousand points — the same ceiling as ISOMAP, and the one the paper states for the original.

Reference ​

Levada, A. L. M., Minimum Information Trees for High Dimensional Data Visualization in Clustering, IEEE Access, 2025. doi:10.1109/ACCESS.2025.3602730

See also the MINFOTree API reference.