nmf_update.lee implements in C++ an optimised
version of the single update step.
Algorithms lee and .R#lee provide the
complete NMF algorithm from Lee et al. (2001),
using the C++-optimised and pure R updates
nmf_update.lee and
nmf_update.lee_R respectively.
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
lee.
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 = nmf.getOption("maxIter") %||% 2000, rescale = TRUE, eps = 10^-9, stopconv = 40, check.interval = 10)
nmfAlgorithm.lee(..., .stop = NULL, maxIter = nmf.getOption("maxIter") %||% 2000, rescale = TRUE, copy = FALSE, eps = 10^-9, weight = NULL, stopconv = 40, check.interval = 10)
nmfAlgorithm.Frobenius(..., .stop = NULL, maxIter = nmf.getOption("maxIter") %||% 2000, rescale = TRUE, copy = FALSE, eps = 10^-9, weight = NULL, stationary.th = .Machine$double.eps, check.interval = 5 * check.niter, check.niter = 10L)NMF object.onInit and Stop
respectively).FALSE) or
on a copy (TRUE - default). With copy=FALSE
the 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 copy=TRUE.maxIter. nmf.stop.stationary;
(object="NMFStrategy", i="integer", y="matrix",
x="NMF", ...), where object is the
NMFStrategy object that describes the algorithm
being run, i is the current iteration, y is
the target matrix and x is the current value of
the NMF model. v -- and h.nmf_update.lee_R implements in pure R a single
update step, i.e. it updates both matrices.