mlpack
|
This follows a method described in the paper 'Algorithms for Non-negative. More...
#include <nmf_mult_div.hpp>
Public Member Functions | |
template<typename MatType > | |
void | Initialize (const MatType &, const size_t) |
Initialize the factorization. More... | |
template<typename Archive > | |
void | serialize (Archive &, const uint32_t) |
Serialize the object (in this case, there is nothing to serialize). | |
Static Public Member Functions | |
template<typename MatType > | |
static void | WUpdate (const MatType &V, arma::mat &W, const arma::mat &H) |
The update rule for the basis matrix W. More... | |
template<typename MatType > | |
static void | HUpdate (const MatType &V, const arma::mat &W, arma::mat &H) |
The update rule for the encoding matrix H. More... | |
This follows a method described in the paper 'Algorithms for Non-negative.
This is a multiplicative rule that ensures that the Kullback-Leibler divergence
\[ \sum_i \sum_j (V_{ij} \log\frac{V_{ij}}{(W H)_{ij}} - V_{ij} + (W H)_{ij}) \]
is non-increasing between subsequent iterations. Both of the update rules for W and H are defined in this file.
This set of update rules is not meant to work with sparse matrices. Using sparse matrices often causes NaNs in the output, so other choices of update rules are better in that situation.
|
inlinestatic |
The update rule for the encoding matrix H.
The formula used is
\[ H_{a\mu} \leftarrow H_{a\mu} \frac{\sum_{i} W_{ia} V_{i\mu}/(WH)_{i\mu}} {\sum_{k} H_{ka}} \]
The function takes in all the matrices and only changes the value of the H matrix.
V | Input matrix to be factorized. |
W | Basis matrix. |
H | Encoding matrix to updated. |
|
inline |
Initialize the factorization.
These rules don't store any state, so the input values are ignore.
|
inlinestatic |
The update rule for the basis matrix W.
The formula used is
\[ W_{ia} \leftarrow W_{ia} \frac{\sum_{\mu} H_{a\mu} V_{i\mu} / (W H)_{i\mu}} {\sum_{\nu} H_{a\nu}} \]
The function takes in all the matrices and only changes the value of the W matrix.
V | Input matrix to be factorized. |
W | Basis matrix to be updated. |
H | Encoding matrix. |