Agent Skills: geomstats-fisher-rao Skill

Information geometry for Bayesian inference. Fisher-Rao metric on statistical manifolds, Riemannian optimization for model selection, Wasserstein geodesics connecting geomstats to Gromov-Wasserstein optimal transport.

UncategorizedID: plurigrid/asi/geomstats-fisher-rao

Install this agent skill to your local

pnpm dlx add-skill https://github.com/plurigrid/asi/tree/HEAD/skills/geomstats-fisher-rao

Skill Files

Browse the full folder contents for geomstats-fisher-rao.

Download Skill

Loading file tree…

skills/geomstats-fisher-rao/SKILL.md

Skill Metadata

Name
geomstats-fisher-rao
Description
Information geometry for Bayesian inference. Fisher-Rao metric on statistical manifolds, Riemannian optimization for model selection, Wasserstein geodesics connecting geomstats to Gromov-Wasserstein optimal transport.

geomstats-fisher-rao Skill

The natural metric on probability distributions is the Fisher-Rao metric

What It Covers

======= description: > Information geometry for Bayesian inference via geomstats. Triggers: Fisher-Rao metric, statistical manifolds, Riemannian optimization, Wasserstein geodesics, Gromov-Wasserstein optimal transport, hyperbolic embeddings, SPD matrices.

geomstats-fisher-rao

Information geometry connecting geomstats to Bayesian inference and optimal transport.

Coverage

origin/main

22 notebooks in plurigrid's geomstats fork spanning:

  • Information geometry (Fisher information matrix as Riemannian metric)
  • Hyperbolic embeddings (Poincare ball, hyperboloid)
  • Graph space (Frechet mean of graphs)
  • Heisenberg group geometry
  • SPD matrices (covariance manifolds)

monad-bayes Connection

<<<<<<< HEAD The Fisher-Rao metric is the unique Riemannian metric (up to scale) that is invariant under sufficient statistics. This means:

MonadDistribution m => FisherRao (distribution m)

Every score/factor call in monad-bayes implicitly moves along a geodesic on the Fisher-Rao manifold. The MCMC acceptance ratio is the exponential map.

The Fisher-Rao metric is the unique Riemannian metric (up to scale) invariant under sufficient statistics:

origin/main

-- Natural gradient MCMC on Fisher-Rao manifold
naturalGradientStep :: MonadMeasure m => SPDMatrix -> m Parameters
naturalGradientStep fisherInfo = do
  currentParams <- get
  proposal <- mvNormal currentParams (inverse fisherInfo)
  let logRatio = logLikelihood proposal - logLikelihood currentParams
  accept <- bernoulli (min 1 (exp logRatio))
  if accept then return proposal else return currentParams

<<<<<<< HEAD

Gromov-Wasserstein Bridge

geomstats <-> plurigrid/ontology:GW via optimal transport:

  • Wasserstein distance = geodesic distance on the space of measures
  • Gromov-Wasserstein = comparison of metric measure spaces
  • Entropic regularization = softmax (connects to monad-bayes softmax)
  • Bregman projections for marginal constraints

Applications

  • Cortical manifold geometry (zubyul/Nikolova_lab)
  • Protein structure manifolds (Vertex AI)
  • Eye movement geometry on the visual sphere (zubyul/EyeGestures)
  • Color gamut as Riemannian manifold (Gay.jl DeltaE2000)

GF(3) Trit Classification

| Component | Trit | Role | |-----------|------|------| | geomstats computation | +1 | Generation (geometric objects) | | Fisher-Rao metric | 0 | Coordination (natural metric) | | Wasserstein validation | -1 | Validation (distance bounds) |

Conservation: +1 + 0 + (-1) = 0

Trit: 0 (ERGODIC)

======= Every score/factor call in monad-bayes implicitly moves along a geodesic on the Fisher-Rao manifold. The MCMC acceptance ratio is the exponential map.

Gromov-Wasserstein Bridge

geomstats connects to Gromov-Wasserstein optimal transport:

  • Wasserstein distance = geodesic distance on the space of measures
  • Gromov-Wasserstein = comparison of metric measure spaces
  • Entropic regularization = softmax (connects to monad-bayes)
  • Bregman projections for marginal constraints

Applications

  • Cortical manifold geometry
  • Protein structure manifolds (Vertex AI)
  • Eye movement geometry on the visual sphere
  • Color gamut as Riemannian manifold (DeltaE2000)

Concrete Affordance: Runnable Fisher-Rao Distance Computation

Install

pip install geomstats
# geomstats pulls in numpy, scipy, matplotlib

Plurigrid Fork

# Clone the plurigrid fork (already present locally):
git clone git@github.com:plurigrid/geomstats.git

# Upstream:
# git clone git@github.com:geomstats/geomstats.git

Local fork path: /Users/alice/v/worlds/g/geomstats

Notebooks (21 in the fork)

| # | Topic | Path | |---|---|---| | 00 | Introduction to geomstats | notebooks/00_foundations__introduction_to_geomstats.ipynb | | 02 | Connection & Riemannian metric | notebooks/02_foundations__connection_riemannian_metric.ipynb | | 08 | Information geometry (Fisher-Rao) | notebooks/08_practical_methods__information_geometry.ipynb | | 12 | EMG classification on SPD manifold | notebooks/12_real_world_applications__emg_sign_classification_in_spd_manifold.ipynb | | 13 | Graph embedding in hyperbolic space | notebooks/13_real_world_applications__graph_embedding_and_clustering_in_hyperbolic_space.ipynb | | 20 | Graph space (Frechet mean) | notebooks/20_real_world_applications__graph_space.ipynb | | 21 | Heisenberg group geometry | notebooks/21_foundations__sub_riemannian_geometry_and_the_heisenberg_group.ipynb |

All notebooks at: /Users/alice/v/worlds/g/geomstats/notebooks/

Runnable: Fisher-Rao Distance Between Two Normal Distributions

#!/usr/bin/env python3
"""
Compute Fisher-Rao geodesic distance between two univariate normal
distributions on the statistical manifold.

The Fisher information matrix for N(mu, sigma^2) is:
  g = diag(1/sigma^2, 2/sigma^2)

The Fisher-Rao distance between N(mu1,s1^2) and N(mu2,s2^2) is the
geodesic distance on the upper half-plane with this metric.

Run:
  python3 fisher_rao_demo.py
"""

import geomstats.backend as gs
gs.random.seed(42)

from geomstats.information_geometry.normal import NormalDistributions

# The statistical manifold of univariate normals
manifold = NormalDistributions()

# Two distributions: N(0, 1) and N(3, 2)
# Parameters are [mu, sigma] (NOT sigma^2)
p = gs.array([0.0, 1.0])   # N(0, 1)
q = gs.array([3.0, 2.0])   # N(3, 2)

# Fisher-Rao geodesic distance
dist = manifold.metric.dist(p, q)
print(f"Fisher-Rao distance between N(0,1) and N(3,2): {float(dist):.6f}")

# Geodesic curve (10 points from p to q on the statistical manifold)
geodesic_fn = manifold.metric.geodesic(initial_point=p, end_point=q)
t = gs.linspace(0.0, 1.0, 10)
geodesic_points = geodesic_fn(t)
print(f"\nGeodesic path (mu, sigma) from N(0,1) → N(3,2):")
for i, pt in enumerate(geodesic_points):
    print(f"  t={float(t[i]):.1f}: N({float(pt[0]):.3f}, {float(pt[1]):.3f})")

# Fisher information matrix at a point
fim = manifold.metric.metric_matrix(p)
print(f"\nFisher information matrix at N(0,1):\n{fim}")

SPD Manifold Quick Check

from geomstats.geometry.spd_matrices import SPDMatrices
import geomstats.backend as gs

spd = SPDMatrices(n=3)
A = spd.random_point()
B = spd.random_point()
d = spd.metric.dist(A, B)
print(f"Affine-invariant distance between two 3x3 SPD matrices: {float(d):.4f}")

Key Files

| Path | Description | |---|---| | /Users/alice/v/worlds/g/geomstats/ | Plurigrid fork of geomstats | | notebooks/08_practical_methods__information_geometry.ipynb | Fisher-Rao notebook | | geomstats/information_geometry/normal.py | NormalDistributions manifold implementation | | geomstats/geometry/spd_matrices.py | SPD matrices with affine-invariant metric |

origin/main