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 Kullback-Leibler divergence.
nmf_update.KL.w
and nmf_update.KL.h
compute
the updated basis and coefficient matrices respectively.
They use a C++ implementation which is optimised
for speed and memory usage.
nmf_update.KL.w_R
and nmf_update.KL.h_R
implement the same updates in plain R.
nmf_update.KL.h(v, w, h, nbterms = 0L, ncterms = 0L,
copy = TRUE) nmf_update.KL.h_R(v, w, h, wh = NULL)
nmf_update.KL.w(v, w, h, nbterms = 0L, ncterms = 0L,
copy = TRUE)
nmf_update.KL.w_R(v, w, h, wh = NULL)
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.
target matrix
current basis matrix
current coefficient matrix
number of fixed basis terms
number of fixed coefficient terms
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
.
already computed NMF estimate used to compute the denominator term.
Update definitions by Lee2001.
C++ optimised implementation by Renaud Gaujoux.
The coefficient matrix (H
) is updated as follows:
$$ H_{kj} \leftarrow H_{kj} \frac{\left( sum_i
\frac{W_{ik} V_{ij}}{(WH)_{ij}} \right)}{ sum_i W_{ik} }.
$$
These updates are used in built-in NMF algorithms
KL
and
brunet
.
The basis matrix (W
) is updated as follows: $$
W_{ik} \leftarrow W_{ik} \frac{ sum_j [\frac{H_{kj}
A_{ij}}{(WH)_{ij}} ] }{sum_j H_{kj} } $$
Lee DD and Seung H (2001). "Algorithms for non-negative matrix factorization." _Advances in neural information processing systems_. <URL: http://scholar.google.com/scholar?q=intitle:Algorithms+for+non-negative+matrix+factorization>.