MixtureNegativeLogLikelihoodLoss#

class mlquantify.losses.MixtureNegativeLogLikelihoodLoss(reduction='mean')[source]#

Negative log-likelihood for class likelihood mixtures.

Computes the mixture likelihood

\[p(x_i) = \sum_c \hat{p}_c \cdot p(x_i \mid c)\]

and then applies the negative log-likelihood reduction. This is the standard loss used by the Expectation–Maximisation Quantifier (EMQ).

Parameters:
reduction{‘mean’, ‘sum’}, default=’mean’

How to reduce the per-sample log-likelihood values.

Attributes:
reductionstr

The configured reduction mode.

Examples

>>> from mlquantify.losses import get_loss
>>> import numpy as np
>>> loss = get_loss("mixture_nll")
>>> prev = np.array([0.4, 0.6])
>>> lkl = np.array([[0.3, 0.7], [0.6, 0.4]])
>>> loss(prev, lkl)  
0.5...
__call__(prevalences, class_likelihoods)[source]#

Compute mixture negative log-likelihood.

Parameters:
prevalencesarray-like of shape (n_classes,)

Estimated class prevalence vector.

class_likelihoodsarray-like of shape (n_classes, n_samples) or (n_samples, n_classes)

Per-class likelihood for each test instance. The axis whose length matches n_classes is contracted with prevalences.

Returns:
lossfloat

Reduced mixture negative log-likelihood.

Examples

>>> from mlquantify.losses import get_loss
>>> import numpy as np
>>> loss = get_loss("ml")
>>> prev = np.array([0.5, 0.5])
>>> lkl = np.array([[0.2, 0.8], [0.7, 0.3]])
>>> round(loss(prev, lkl), 4)
0.6931