The Non-Negative Matrix Factorization (NMF) is a decomposition of a matrix
into a product of two matrices
X = WH,
where all entries in W and H
are positive or zero. When the inner dimension of the product
(the number of columns of W) is less than the
rank of X, then the product is only an approximation,
and the factorization is sometimes referred to as the
Approximative Non-Negative Matrix Factorization.
The non-negative matrix factorization is represented by the
NonNegativeMatrixFactorizationT
class.
Working with Non-negative Matrix Factorizations
The NonNegativeMatrixFactorizationT
class represents the non-negative matrix factorization of a matrix.
It has only one constructor which takes two arguments. The first is a
MatrixT that represents
the matrix that is to be factored. The second argument is an integer that specifies
the inner dimension of the matrix product. If this value is less than
both the number of rows and columns of the original
matrix, then the factorization is approximate.
The Decompose
method performs the actual decomposition using an alternating least squares algorithm.
For large matrices, this method may take a long time to complete. This method is called
by other methods as needed. You will rarely need to call it explicitly.
After the decomposition is computed, the
LeftFactor and
RightFactor
properties return matrices that represent the non-negative factors.
var A = Matrix.CreateRandom(6, 4);
var nnmf = new NonNegativeMatrixFactorization<double>(A, 3);
nnmf.Decompose();
var left = nnmf.LeftFactor;
var right = nnmf.RightFactor;
Dim A = Matrix.CreateRandom(6, 4)
Dim nnmf = New NonNegativeMatrixFactorization(Of Double)(A, 3)
nnmf.Decompose()
Dim left = nnmf.LeftFactor
Dim right = nnmf.RightFactor
No code example is currently available or this language may not be supported.
let A = Matrix.CreateRandom(6, 4)
let nnmf = new NonNegativeMatrixFactorization<double>(A, 3)
nnmf.Decompose()
let left = nnmf.LeftFactor
let right = nnmf.RightFactor
Unlike other matrix decompositions, the non-negative matrix factorization
does not help with solving systems of equations or related operations. Although
methods like
Solve
are defined, they simply delegate the work to the corresponding method on the base matrix.