The built-in NMF algorithms described here minimise the
Frobenius norm (Euclidean distance) between an NMF model
and a target matrix. They use the updates for the basis
and coefficient matrices (
H) defined by
Lee et al. (2001).
nmf_update.lee implements in C++ an optimised
version of the single update step.
Algorithm Frobenius provides an NMF algorithm
based on the C++-optimised version of the updates from
Lee et al. (2001), which uses the stationarity of
the objective value as a stopping criterion
nmf.stop.stationary, instead of the
stationarity of the connectivity matrix
nmf.stop.connectivity as used by
nmf_update.lee_R(i, v, x, rescale = TRUE, eps = 10^-9, ...) nmf_update.lee(i, v, x, rescale = TRUE, copy = FALSE, eps = 10^-9, weight = NULL, ...) nmfAlgorithm.lee_R(..., .stop = NULL, maxIter = 2000, rescale = TRUE, eps = 10^-9, stopconv = 40, check.interval = 10) nmfAlgorithm.lee(..., .stop = NULL, maxIter = 2000, rescale = TRUE, copy = FALSE, eps = 10^-9, weight = NULL, stopconv = 40, check.interval = 10) nmfAlgorithm.Frobenius(..., .stop = NULL, maxIter = 2000, rescale = TRUE, copy = FALSE, eps = 10^-9, weight = NULL, stationary.th = .Machine$double.eps, check.interval = 5 * check.niter, check.niter = 10L)
Wshould be rescaled so that its columns sum up to one.
FALSE) or on a copy (
TRUE- default). With
copy=FALSEthe memory footprint is very small, and some speed-up may be achieved in the case of big matrices. However, greater care should be taken due the side effect. We recommend that only experienced users use
(object="NMFStrategy", i="integer", y="matrix", x="NMF", ...), where
NMFStrategyobject that describes the algorithm being run,
iis the current iteration,
yis the target matrix and
xis the current value of the NMF model.
nmf_update.lee_R implements in pure R a single
update step, i.e. it updates both matrices.
Lee DD and Seung H (2001). "Algorithms for non-negative
matrix factorization." _Advances in neural information