|
EmrysFilter 0.1.0
State estimation utilities in C++23 using Eigen
|
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...
#include <concepts>#include <expected>#include <limits>#include <random>#include <type_traits>#include <utility>#include <Eigen/Cholesky>#include <Eigen/SVD>#include <EmrysFilter/Core/Execution.h>#include <EmrysFilter/Core/Macros.h>#include <EmrysFilter/Core/Math.h>#include <EmrysFilter/Core/Multiply.h>#include <EmrysFilter/Core/Solve.h>#include <EmrysFilter/Core/Triangularization.h>#include <EmrysFilter/Core/Weights.h>#include <EmrysFilter/Distributions/Categorical.h>#include <EmrysFilter/Distributions/Gaussian.h>#include <EmrysFilter/Distributions/GaussianForm.h>#include <EmrysFilter/Distributions/Hybrid.h>#include <EmrysFilter/Distributions/Mixture.h>#include <EmrysFilter/Distributions/Moments.h>#include <EmrysFilter/Distributions/Product.h>#include <EmrysFilter/Distributions/Sampling.h>#include <EmrysFilter/Distributions/SqrtGaussian.h>#include <EmrysFilter/Spaces/Space.h>#include <EmrysFilter/Spaces/TagPath.h>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). | |
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.