Trait rv::traits::KlDivergence
source · pub trait KlDivergence {
// Required method
fn kl(&self, other: &Self) -> f64;
// Provided method
fn kl_sym(&self, other: &Self) -> f64 { ... }
}
Expand description
KL divergences
Required Methods§
sourcefn kl(&self, other: &Self) -> f64
fn kl(&self, other: &Self) -> f64
The KL divergence, KL(P|Q) between this distribution, P, and another, Q
§Example
use rv::dist::Gaussian;
use rv::traits::KlDivergence;
let g1 = Gaussian::new(1.0, 1.0).unwrap();
let g2 = Gaussian::new(-1.0, 2.0).unwrap();
let kl_self = g1.kl(&g1);
let kl_other = g1.kl(&g2);
// KL(P|P) = 0
assert!( kl_self < 1E-12 );
// KL(P|Q) > 0 if P ≠ Q
assert!( kl_self < kl_other );
Provided Methods§
sourcefn kl_sym(&self, other: &Self) -> f64
fn kl_sym(&self, other: &Self) -> f64
Symmetrized divergence, KL(P|Q) + KL(Q|P)
§Example
use rv::dist::Gaussian;
use rv::traits::KlDivergence;
let g1 = Gaussian::new(1.0, 1.0).unwrap();
let g2 = Gaussian::new(-1.0, 2.0).unwrap();
let kl_12 = g1.kl(&g2);
let kl_21 = g2.kl(&g1);
let kl_sym = g1.kl_sym(&g2);
assert!( (kl_12 + kl_21 - kl_sym).abs() < 1E-10 );
Object Safety§
This trait is not object safe.