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 );
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 );
Implementors
impl KlDivergence for Categorical
[src]
impl KlDivergence for Categorical
[src]impl KlDivergence for Exponential
[src]
impl KlDivergence for Exponential
[src]