Multiplicative updates from Lee et al. (2001) for standard Nonnegative Matrix Factorization
models V \approx W H
, where the distance between the target matrix and its NMF
estimate is measured by the -- euclidean -- Frobenius norm.
nmf_update.euclidean.w
and nmf_update.euclidean.h
compute the updated basis and coefficient
matrices respectively.
They use a C++ implementation which is optimised for speed and memory usage.
nmf_update.euclidean.w_R
and nmf_update.euclidean.h_R
implement the same updates
in plain R.
nmf_update.euclidean.h(v, w, h, eps = 10^-9, nbterms = 0L, ncterms = 0L, copy = TRUE) nmf_update.euclidean.h_R(v, w, h, wh = NULL, eps = 10^-9) nmf_update.euclidean.w(v, w, h, eps = 10^-9, nbterms = 0L, ncterms = 0L, weight = NULL, copy = TRUE) nmf_update.euclidean.w_R(v, w, h, wh = NULL, eps = 10^-9)
v
-- and h
.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
.a matrix of the same dimension as the input matrix to update
(i.e. w
or h
).
If copy=FALSE
, the returned matrix uses the same memory as the input object.
The coefficient matrix (H
) is updated as follows:
H_kj <- max(H_kj (W^T V)_kj, eps) / ( (W^T W H)_kj + eps )These updates are used by the built-in NMF algorithms
Frobenius
andlee
.The basis matrix (
W
) is updated as follows:W_ik <- max(W_ik (V H^T)_ik, eps) / ( (W H H^T)_ik + eps )
Lee DD and Seung H (2001). "Algorithms for non-negative matrix factorization." _Advances in neural information processing
systems_.