Decomposition nmfbetaloss - CyrilB1531/lodestar GitHub Wiki
Development build. This page describes
main, not a released package. The latest published Lodestar.Decomposition is 0.2.0 — read its documentation.
Home › Decomposition › Factorization
NmfBetaLoss
What Nmf.Fit is asked to minimise, and therefore what "a good factorization" means
for the data in hand.
The beta divergence is one family with a parameter; this package ships the two members of it that
solver="mu" computes in closed form. They are not two ways of reaching one answer. Each is the
maximum-likelihood fit under a different noise model, so they disagree about which errors are
worth trading against which — and a matrix of counts and a matrix of measurements do not want the
same trade.
Members
| Member | Value | What it does |
|---|---|---|
Frobenius |
0 |
Half the squared Frobenius norm of X − W H, β = 2. The Gaussian noise model, and what a matrix of continuous measurements wants. scikit-learn's beta_loss="frobenius". |
KullbackLeibler |
1 |
The generalised Kullback–Leibler divergence, β = 1. The Poisson noise model, and what counts want — a term-document matrix included, which is why it is here. scikit-learn's beta_loss="kullback-leibler". |
The choice changes the arithmetic and not only the objective. Frobenius updates W through two
dense products; Kullback–Leibler divides X by W H where X is non-zero and broadcasts a row
of sums as the denominator, which is why it is the slower of the two on a wide matrix and why it
snaps H below machine epsilon to zero where Frobenius does not.
ReconstructionError is reported in the loss that produced it, so numbers from two different
members are not comparable — a Kullback–Leibler fit of a corpus is routinely the "larger" of the
two and is not the worse one. Compare a loss against itself, across ranks or across
initialisations, and never across this enum.
Other β values — Itakura–Saito at β = 0, or anything between — are not offered. They cost a
general power in the inner loop, and neither of the two data shapes this package targets asks for
one.