12template <
typename T,
typename P>
36 static double InnerProduct(
const P &left,
const P &right);
46template <
typename T,
typename P>
49 P sourceParameters = SourceParameters();
50 return SourceToNatural(sourceParameters);
53template <
typename T,
typename P>
56 return std::exp(LogProbabilityMeasure(x));
59template <
typename T,
typename P>
62 P theta = this->NaturalParameters();
63 P t = this->SufficientStatistic(x);
64 double y = InnerProduct(t, theta);
65 y -= this->LogNormalizer(theta);
66 y += this->CarrierMeasure(x);
70template <
typename T,
typename P>
73 double KL = this->CrossEntropyAdjusted(parameters);
74 KL -= this->EntropyAdjusted();
78template <
typename T,
typename P>
81 P theta_p = this->NaturalParameters();
82 P theta_q = this->SourceToNatural(parameters);
83 double H = this->LogNormalizer(theta_q);
84 P grad = this->LogNormalizerGradient(theta_p);
85 H -= InnerProduct(theta_q, grad);
89template <
typename T,
typename P>
92 P sourceParameters = this->SourceParameters();
93 return CrossEntropyAdjusted(sourceParameters);
96template <
typename T,
typename P>
99 if constexpr (std::is_arithmetic_v<P>)
102 return left.first * right.first + left.second * right.second;
Definition exponential_family.hpp:14
double KullbackLeiblerDivergence(P parameters) const
Definition exponential_family.hpp:71
virtual double LogNormalizer(P theta) const =0
virtual P LogNormalizerGradient(P theta) const =0
virtual ~ExponentialFamily()
Definition exponential_family.hpp:17
virtual P SourceToNatural(P sourceParameters) const =0
double LogProbabilityMeasure(T x) const
Definition exponential_family.hpp:60
virtual double EntropyAdjusted() const
Definition exponential_family.hpp:90
virtual P NaturalParameters() const
Definition exponential_family.hpp:47
ExponentialFamily()
Definition exponential_family.hpp:16
virtual double CrossEntropyAdjusted(P parameters) const
Definition exponential_family.hpp:79
double ProbabilityMeasure(T x) const
Definition exponential_family.hpp:54
virtual P SufficientStatistic(T x) const =0
virtual double CarrierMeasure(T x) const =0
virtual P SourceParameters() const =0
Definition bivariate_normal.hpp:10