Information geometry on the probability simplex.
[dependencies]
# Not on crates.io yet; depend via git (pin `rev` for reproducibility).
infogeom = { git = "https://github.com/arclabs561/infogeom" }use infogeom::{fisher_rao_geodesic, rao_distance_categorical};
let p = [0.70, 0.20, 0.10];
let q = [0.10, 0.20, 0.70];
// Fisher-Rao geodesic midpoint.
let mid = fisher_rao_geodesic(&p, &q, 0.5, 1e-12).unwrap();
// The midpoint is equidistant from both endpoints.
let d_full = rao_distance_categorical(&p, &q, 1e-12).unwrap();
let d_half = rao_distance_categorical(&p, &mid, 1e-12).unwrap();
assert!((d_half - d_full / 2.0).abs() < 1e-10);| Function | Description |
|---|---|
rao_distance_categorical(p, q, tol) |
Fisher-Rao distance on the simplex (radians, range [0, pi]) |
hellinger(p, q, tol) |
Hellinger distance (re-exported from logp, range [0, 1]) |
All take (p, q, t, tol) where t in [0, 1] interpolates from p to q.
| Function | Alpha | Description |
|---|---|---|
fisher_rao_geodesic |
0 | Riemannian geodesic via sphere embedding (slerp) |
m_geodesic |
-1 | Mixture geodesic: linear interpolation in probability space |
e_geodesic |
+1 | Exponential geodesic: linear interpolation in log space (requires strictly positive entries) |
| Function | Description |
|---|---|
fisher_information_diagonal(p, tol) |
Diagonal of the Fisher information matrix: [1/p_1, ..., 1/p_n] |
natural_gradient(p, euclidean_grad) |
Natural gradient: p_i * g_i (inverse Fisher metric applied to Euclidean gradient) |
- Inputs are validated as simplex distributions (nonnegative, sum approximately 1) using
tol. - The
tolparameter also controls degenerate-case snapping (e.g., BC near 1.0).
- Amari & Nagaoka (2000), Methods of Information Geometry. Ch. 2-3 (Fisher metric, alpha-connections).
- Amari (1998), "Natural Gradient Works Efficiently in Learning", Neural Computation 10(2).
- Frank Nielsen's information geometry portal: franknielsen.github.io/IG
cargo run --example simplex_distances-- geodesics, distances, and natural gradientcargo run --example divergence_geometry-- cross-crate comparison withlogpdivergencescargo run --example ot_interpolation_geometry-- geodesics vs. optimal transport interpolation
Not published on crates.io (publish = false).
MIT OR Apache-2.0