Trait rv::traits::KlDivergence[][src]

pub trait KlDivergence {
    fn kl(&self, other: &Self) -> f64;

    fn kl_sym(&self, other: &Self) -> f64 { ... }
}

KL divergences

Required methods

fn kl(&self, other: &Self) -> f64[src]

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 );
Loading content...

Provided methods

fn kl_sym(&self, other: &Self) -> f64[src]

Symmetrised 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 );
Loading content...

Implementors

impl KlDivergence for Bernoulli[src]

impl KlDivergence for Categorical[src]

impl KlDivergence for Exponential[src]

impl KlDivergence for Gaussian[src]

impl KlDivergence for Poisson[src]

impl<Fx> KlDivergence for Fx where
    Fx: Deref,
    Fx::Target: KlDivergence
[src]

Loading content...