NMF Multiplicative Update for Nonsmooth Nonnegative Matrix Factorization (nsNMF).


These update rules, defined for the NMFns-class model V \approx W S H from Pascual-Montano et al. (2006), that introduces an intermediate smoothing matrix to enhance sparsity of the factors.

nmf_update.ns_R implements the same updates in plain R.

Algorithms ‘nsNMF’ and ‘.R#nsNMF’ provide the complete NMF algorithm from Pascual-Montano et al. (2006), using the C++-optimised and plain R updates nmf_update.brunet and nmf_update.brunet_R respectively. The stopping criterion is based on the stationarity of the connectivity matrix.


nmf_update.ns(i, v, x, copy = FALSE, ...)

nmf_update.ns_R(i, v, x, ...)

nmfAlgorithm.nsNMF_R(..., .stop = NULL, maxIter = 2000, stopconv = 40, check.interval = 10)

nmfAlgorithm.nsNMF(..., .stop = NULL, maxIter = 2000, copy = FALSE, stopconv = 40, 
  check.interval = 10)


current iteration number.
target matrix.
current NMF model, as an NMF-class object.
logical that indicates if the update should be made on the original matrix directly (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.
extra arguments. These are generally not used and present only to allow other arguments from the main call to be passed to the initialisation and stopping criterion functions (slots onInit and Stop respectively).
specification of a stopping criterion, that is used instead of the one associated to the NMF algorithm. It may be specified as:
  • the access key of a registered stopping criterion;
  • a single integer that specifies the exact number of iterations to perform, which will be honoured unless a lower value is explicitly passed in argument maxIter.
  • a single numeric value that specifies the stationnarity threshold for the objective function, used in with nmf.stop.stationary;
  • a function with signature (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.
maximum number of iterations to perform.
number of iterations intervals over which the connectivity matrix must not change for stationarity to be achieved.
interval (in number of iterations) on which the stopping criterion is computed.


an NMFns-class model object.


nmf_update.ns computes the updated nsNMF model. It uses the optimized C++ implementations nmf_update.KL.w and nmf_update.KL.h to update W and H respectively.

The multiplicative updates are based on the updates proposed by Brunet et al. (2004), except that the NMF estimate W H is replaced by W S H and W (resp. H) is replaced by W S (resp. S H) in the update of H (resp. W).

See nmf_update.KL for more details on the update formula.


Pascual-Montano A, Carazo JM, Kochi K, Lehmann D and Pascual-marqui RD (2006). "Nonsmooth nonnegative matrix factorization (nsNMF)." _IEEE Trans. Pattern Anal. Mach. Intell_, *28*, pp. 403-415.

Brunet J, Tamayo P, Golub TR and Mesirov JP (2004). "Metagenes and molecular pattern discovery using matrix factorization." _Proceedings of the National Academy of Sciences of the United States of America_, *101*(12), pp. 4164-9. ISSN 0027-8424, , .