pub struct Gaussian {
pub means: Array2<f64>,
pub covariances: Array3<f64>,
pub precisions: Array3<f64>,
pub summands: Array1<f64>,
/* private fields */
}
Expand description
Represents a gaussian mixture model. The number of components
is determined automatically from the responsibilities when first
calling maximize
method.
The sufficient statistics that can be extracted from the data to maximize the parameters. It is a triple of arrays (names as in Kimura et al.):
$$ \begin{aligned} a_j &= \sum_i^n r_{ij},&& (k) \\ b_j &= \sum_i^n r_{ij} \cdot x_i ,&& (k \times d) \\ c_j &= \sum_i^n r_{ij} \cdot x_i^T\cdot x_i, &&(k \times d \times d) \\ \end{aligned} $$
Fields§
§means: Array2<f64>
The mean values, $ k\times d $
covariances: Array3<f64>
The covariance matrices), $(k\times d\times d)$
precisions: Array3<f64>
The precision matrices (inverted coariances), $(k\times d\times d)$
summands: Array1<f64>
Implementations§
Trait Implementations§
source§impl Mixable<Gaussian> for Gaussian
impl Mixable<Gaussian> for Gaussian
fn predict( &self, _latent_likelihood: <Gaussian as Parametrizable>::Likelihood, _data: &<Gaussian as Parametrizable>::DataIn<'_> ) -> Result<<Gaussian as Parametrizable>::DataOut, Error>
source§impl Parametrizable for Gaussian
impl Parametrizable for Gaussian
type SufficientStatistics = (ArrayBase<OwnedRepr<f64>, Dim<[usize; 1]>>, ArrayBase<OwnedRepr<f64>, Dim<[usize; 2]>>, ArrayBase<OwnedRepr<f64>, Dim<[usize; 3]>>)
type Likelihood = ArrayBase<OwnedRepr<f64>, Dim<[usize; 2]>>
type DataIn<'a> = ArrayBase<ViewRepr<&'a f64>, Dim<[usize; 2]>>
type DataOut = ArrayBase<OwnedRepr<f64>, Dim<[usize; 2]>>
source§fn expect(
&self,
data: &Self::DataIn<'_>
) -> Result<(Self::Likelihood, AvgLLH), Error>
fn expect( &self, data: &Self::DataIn<'_> ) -> Result<(Self::Likelihood, AvgLLH), Error>
The E-Step. Computes the likelihood for each component in the mixture
Note that for
Mixables
, this is the log-likelihoodsource§fn compute(
&self,
data: &Self::DataIn<'_>,
responsibilities: &Self::Likelihood
) -> Result<Self::SufficientStatistics, Error>
fn compute( &self, data: &Self::DataIn<'_>, responsibilities: &Self::Likelihood ) -> Result<Self::SufficientStatistics, Error>
Computes the sufficient statistics from the responsibility matrix. The
Optionally, stores the
sufficient statistics (for incremental learning and store.restore functionality)
can be disabled for performance (defaults to
True
)source§fn maximize(
&mut self,
sufficient_statistics: &Self::SufficientStatistics
) -> Result<(), Error>
fn maximize( &mut self, sufficient_statistics: &Self::SufficientStatistics ) -> Result<(), Error>
Maximize the model parameters from
source§fn update(
&mut self,
sufficient_statistics: &Self::SufficientStatistics,
weight: f64
) -> Result<(), Error>
fn update( &mut self, sufficient_statistics: &Self::SufficientStatistics, weight: f64 ) -> Result<(), Error>
Update the stored sufficient statistics (for incremental learning)
Weights is a tuple (a float should suffice, if summing to one)
source§fn merge(
sufficient_statistics: &[&Self::SufficientStatistics],
weights: &[f64]
) -> Result<Self::SufficientStatistics, Error>
fn merge( sufficient_statistics: &[&Self::SufficientStatistics], weights: &[f64] ) -> Result<Self::SufficientStatistics, Error>
merge multiple sufficient statistics into one.
fn predict(&self, _data: &Self::DataIn<'_>) -> Result<Self::DataOut, Error>
source§fn expect_rand(
&self,
_data: &Self::DataIn<'_>,
_k: usize
) -> Result<Self::Likelihood, Error>
fn expect_rand( &self, _data: &Self::DataIn<'_>, _k: usize ) -> Result<Self::Likelihood, Error>
Generate a random expectation. Used as an initalization. It is recommended
to draw the expectations from a univorm Dirichlet distribution.
Note: This works better than an initialization method, because the layers
such as the
Probabilistic
trait don’t need to implement backend-specific
random samplers.Auto Trait Implementations§
impl RefUnwindSafe for Gaussian
impl Send for Gaussian
impl Sync for Gaussian
impl Unpin for Gaussian
impl UnwindSafe for Gaussian
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.