EmrysFilter 0.1.0
State estimation utilities in C++23 using Eigen
Loading...
Searching...
No Matches
Divergence.h File Reference

Divergences between distributions (decisions.md [divergences]): Kullback-Leibler, Bhattacharyya, Hellinger, Jensen-Shannon, and 2-Wasserstein, in closed form between two Gaussians or two Categoricals and by MonteCarlo estimate otherwise; kullbackLeiblerCollapseBounds(), how far a Gaussian mixture or a hybrid state is from its moment-matched Gaussian; GroundMetric for the Wasserstein distance's units; and expectedSquaredError() about a known truth. More...

Go to the source code of this file.

Classes

struct  Emrys::MonteCarlo
 Method that estimates a divergence from count draws. More...
struct  Emrys::MonteCarloEstimate< Scalar >
 An estimate from MonteCarlo draws, with its standard error. More...
class  Emrys::GroundMetric< Space_, Scalar_ >
 A weighting of a space's differences, built by tag path: the ground metric of wasserstein(). More...
struct  Emrys::CollapseBounds< Scalar >
 The bracket \( \max(B - H(\hat w), 0) \le \mathrm{KL}(p \parallel q) \le B \) on the divergence of a distribution from its collapse, which kullbackLeiblerCollapseBounds() returns. More...

Functions

template<typename P, typename Q>
requires internal::GaussianDensitiesOfOneSpace<P, Q>
P::Scalar Emrys::kullbackLeibler (P const &p, Q const &q)
template<DiscreteSpace Space, typename Scalar>
Scalar Emrys::kullbackLeibler (Categorical< Space, Scalar > const &p, Categorical< Space, Scalar > const &q)
template<typename P, typename Q, std::uniform_random_bit_generator G>
requires internal::MonteCarloComparable<P, Q, G>
MonteCarloEstimate< typename P::Scalar > Emrys::kullbackLeibler (MonteCarlo const &method, P const &p, Q const &q, G &rng)
template<ExecutionPolicy Policy, typename P, typename Q, std::uniform_random_bit_generator G>
requires internal::MonteCarloComparable<P, Q, G>
MonteCarloEstimate< typename P::Scalar > Emrys::kullbackLeibler (Policy &&policy, MonteCarlo const &method, P const &p, Q const &q, G &rng)
 The MonteCarlo kullbackLeibler() under policy: the draws and \( \log p \) at each are taken as Sequential takes them and stored, and \( \log q \) at each is a for-each over them, so the estimate is Sequential's (see Execution policies).
template<typename P, typename Q>
internal::NoClosedForm Emrys::kullbackLeibler (P const &, Q const &)
 kullbackLeibler() for a pair with no closed form: a compile-time error naming the estimator.
template<typename Space, typename Scalar, typename Allocator>
CollapseBounds< Scalar > Emrys::kullbackLeiblerCollapseBounds (GaussianMixture< Space, Scalar, Allocator > const &p)
template<typename Space, typename ModeSpace, typename Scalar, typename Allocator>
CollapseBounds< Scalar > Emrys::kullbackLeiblerCollapseBounds (HybridGaussian< Space, ModeSpace, Scalar, Allocator > const &p)
template<typename Space, typename ModeSpace, typename Scalar, typename ComponentAllocator, typename Allocator>
CollapseBounds< Scalar > Emrys::kullbackLeiblerCollapseBounds (Mixture< HybridGaussian< Space, ModeSpace, Scalar, ComponentAllocator >, Allocator > const &p)
template<typename P, typename Q>
requires internal::GaussianDensitiesOfOneSpace<P, Q>
P::Scalar Emrys::bhattacharyya (P const &p, Q const &q)
template<DiscreteSpace Space, typename Scalar>
Scalar Emrys::bhattacharyya (Categorical< Space, Scalar > const &p, Categorical< Space, Scalar > const &q)
template<typename P, typename Q, std::uniform_random_bit_generator G>
requires internal::MonteCarloComparable<P, Q, G>
MonteCarloEstimate< typename P::Scalar > Emrys::bhattacharyya (MonteCarlo const &method, P const &p, Q const &q, G &rng)
template<ExecutionPolicy Policy, typename P, typename Q, std::uniform_random_bit_generator G>
requires internal::MonteCarloComparable<P, Q, G>
MonteCarloEstimate< typename P::Scalar > Emrys::bhattacharyya (Policy &&policy, MonteCarlo const &method, P const &p, Q const &q, G &rng)
 The MonteCarlo bhattacharyya() under policy, as the MonteCarlo kullbackLeibler() runs under one.
template<typename P, typename Q>
internal::NoClosedForm Emrys::bhattacharyya (P const &, Q const &)
 bhattacharyya() for a pair with no closed form: a compile-time error naming the estimator.
template<typename P, typename Q>
requires internal::GaussianDensitiesOfOneSpace<P, Q>
P::Scalar Emrys::hellinger (P const &p, Q const &q)
template<DiscreteSpace Space, typename Scalar>
Scalar Emrys::hellinger (Categorical< Space, Scalar > const &p, Categorical< Space, Scalar > const &q)
template<typename P, typename Q, std::uniform_random_bit_generator G>
requires internal::MonteCarloComparable<P, Q, G>
MonteCarloEstimate< typename P::Scalar > Emrys::hellinger (MonteCarlo const &method, P const &p, Q const &q, G &rng)
template<ExecutionPolicy Policy, typename P, typename Q, std::uniform_random_bit_generator G>
requires internal::MonteCarloComparable<P, Q, G>
MonteCarloEstimate< typename P::Scalar > Emrys::hellinger (Policy &&policy, MonteCarlo const &method, P const &p, Q const &q, G &rng)
 The MonteCarlo hellinger() under policy, as the MonteCarlo kullbackLeibler() runs under one.
template<typename P, typename Q>
internal::NoClosedForm Emrys::hellinger (P const &, Q const &)
 hellinger() for a pair with no closed form: a compile-time error naming the estimator.
template<DiscreteSpace Space, typename Scalar>
Scalar Emrys::jensenShannon (Categorical< Space, Scalar > const &p, Categorical< Space, Scalar > const &q)
template<typename P, typename Q, std::uniform_random_bit_generator G>
requires internal::MonteCarloComparable<P, Q, G> && internal::MonteCarloComparable<Q, P, G>
MonteCarloEstimate< typename P::Scalar > Emrys::jensenShannon (MonteCarlo const &method, P const &p, Q const &q, G &rng)
template<ExecutionPolicy Policy, typename P, typename Q, std::uniform_random_bit_generator G>
requires internal::MonteCarloComparable<P, Q, G> && internal::MonteCarloComparable<Q, P, G>
MonteCarloEstimate< typename P::Scalar > Emrys::jensenShannon (Policy &&policy, MonteCarlo const &method, P const &p, Q const &q, G &rng)
 The MonteCarlo jensenShannon() under policy, as the MonteCarlo kullbackLeibler() runs under one.
template<typename P, typename Q>
internal::NoClosedForm Emrys::jensenShannon (P const &, Q const &)
 jensenShannon() for a pair with no closed form: a compile-time error naming the estimator.
template<typename P, typename Q>
requires internal::GaussianDensitiesOfOneSpace<P, Q>
P::Scalar Emrys::wasserstein (P const &p, Q const &q)
template<typename P, typename Q, typename WeightsDerived>
requires internal::GaussianDensitiesOfOneSpace<P, Q>
P::Scalar Emrys::wasserstein (P const &p, Q const &q, Eigen::MatrixBase< WeightsDerived > const &weights)
template<typename P, typename Q>
requires internal::GaussianDensitiesOfOneSpace<P, Q>
P::Scalar Emrys::wasserstein (P const &p, Q const &q, GroundMetric< typename P::SpaceType, typename P::Scalar > const &metric)
 wasserstein() under the ground metric metric (see GroundMetric).
template<typename P, typename Q>
internal::NoClosedForm Emrys::wasserstein (P const &, Q const &)
 wasserstein() for a pair with no closed form: a compile-time error.
template<internal::HasMoments Distribution, typename TruthDerived>
auto Emrys::expectedSquaredError (Distribution const &distribution, Eigen::MatrixBase< TruthDerived > const &truth)
template<internal::HasMoments Distribution, typename TruthDerived, typename WeightsDerived>
auto Emrys::expectedSquaredError (Distribution const &distribution, Eigen::MatrixBase< TruthDerived > const &truth, Eigen::MatrixBase< WeightsDerived > const &weights)
 expectedSquaredError() under the ground metric \( \|W \delta\| \): \( \|W (\mu \boxminus x^*)\|^2 + \mathrm{tr}(W \Sigma W^T) \), with weights a matrix with a column per difference coordinate.
template<internal::HasMoments Distribution, typename TruthDerived>
auto Emrys::expectedSquaredError (Distribution const &distribution, Eigen::MatrixBase< TruthDerived > const &truth, GroundMetric< typename Distribution::SpaceType, typename Distribution::Scalar > const &metric)
 expectedSquaredError() under the ground metric metric (see GroundMetric).

Detailed Description

Divergences between distributions (decisions.md [divergences]): Kullback-Leibler, Bhattacharyya, Hellinger, Jensen-Shannon, and 2-Wasserstein, in closed form between two Gaussians or two Categoricals and by MonteCarlo estimate otherwise; kullbackLeiblerCollapseBounds(), how far a Gaussian mixture or a hybrid state is from its moment-matched Gaussian; GroundMetric for the Wasserstein distance's units; and expectedSquaredError() about a known truth.

Read Conditionals.h next.