pub struct Mixture<T, L>where
T: Parametrizable<Likelihood = L::Likelihood>,
L: Parametrizable + Latent<L>,{
pub mixables: T,
pub latent: L,
}
Expand description
This trait represents the traditional mixture models with an underlying probability density (as opposed to k-means or SOM). They have a soft assignment, that is, for each sample and each component the likelihood is computed that the sample belongs to the component. The alternative is that a sample can only belong to one of the compent alone.
Warning: we don’t enforce trait bounds here due to a possible compiler bug
Warning: Mixables
have to compute the log-likelihood in the expectation step!
Fields§
§mixables: T
§latent: L
Implementations§
source§impl<T, L> Mixture<T, L>where
T: Parametrizable<Likelihood = L::Likelihood>,
L: Parametrizable + Latent<L>,
impl<T, L> Mixture<T, L>where T: Parametrizable<Likelihood = L::Likelihood>, L: Parametrizable + Latent<L>,
Trait Implementations§
source§impl<T, L> Clone for Mixture<T, L>where
T: Parametrizable<Likelihood = L::Likelihood> + Clone,
L: Parametrizable + Latent<L> + Clone,
impl<T, L> Clone for Mixture<T, L>where T: Parametrizable<Likelihood = L::Likelihood> + Clone, L: Parametrizable + Latent<L> + Clone,
source§impl<T, L> Debug for Mixture<T, L>where
T: Parametrizable<Likelihood = L::Likelihood> + Debug,
L: Parametrizable + Latent<L> + Debug,
impl<T, L> Debug for Mixture<T, L>where T: Parametrizable<Likelihood = L::Likelihood> + Debug, L: Parametrizable + Latent<L> + Debug,
source§impl<T, L> Parametrizable for Mixture<T, L>where
T: for<'a> Parametrizable<Likelihood = L::Likelihood, DataIn<'a> = L::DataIn<'a>> + Mixable<T>,
L: Parametrizable + Latent<L>,
impl<T, L> Parametrizable for Mixture<T, L>where T: for<'a> Parametrizable<Likelihood = L::Likelihood, DataIn<'a> = L::DataIn<'a>> + Mixable<T>, L: Parametrizable + Latent<L>,
source§fn predict(&self, data: &Self::DataIn<'_>) -> Result<Self::DataOut, Error>
fn predict(&self, data: &Self::DataIn<'_>) -> Result<Self::DataOut, Error>
Prediction can be classification or regression depending on the implementation.
type SufficientStatistics = (<L as Parametrizable>::SufficientStatistics, <T as Parametrizable>::SufficientStatistics)
type Likelihood = <T as Parametrizable>::Likelihood
type DataIn<'a> = <T as Parametrizable>::DataIn<'a>
type DataOut = <T as Parametrizable>::DataOut
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.
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<T, L> RefUnwindSafe for Mixture<T, L>where L: RefUnwindSafe, T: RefUnwindSafe,
impl<T, L> Send for Mixture<T, L>where L: Send, T: Send,
impl<T, L> Sync for Mixture<T, L>where L: Sync, T: Sync,
impl<T, L> Unpin for Mixture<T, L>where L: Unpin, T: Unpin,
impl<T, L> UnwindSafe for Mixture<T, L>where L: UnwindSafe, T: UnwindSafe,
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.