Learn R Programming

fabia (version 2.18.0)

nmfdiv: Non-negative Matrix Factorization: Kullback-Leibler Divergence

Description

nmfdiv: Rimplementation of nmfdiv.

Usage

nmfdiv(X,p=5,cyc=100)

Arguments

X
the data matrix.
p
number of hidden factors = number of biclusters; default = 5.
cyc
maximal number of iterations; default = 100.

Value

  • object of the class Factorization. Containing LZ (estimated noise free data $L Z$), L (loading $L$), Z (factors $Z$), U (noise $X-LZ$), X (scaled data $X$).

concept

  • sparse coding
  • non-negative matrix factorization

Details

Non-negative Matrix Factorization represents positive matrix $X$ by positive matrices $L$ and $Z$.

Objective for reconstruction is Kullback-Leibler divergence.

Essentially the model is the sum of outer products of vectors: $$X = \sum_{i=1}^{p} \lambda_i z_i^T$$ where the number of summands $p$ is the number of biclusters. The matrix factorization is $$X = L Z$$

Here $\lambda_i$ are from $R^n$, $z_i$ from $R^l$, $L$ from $R^{n \times p}$, $Z$ from $R^{p \times l}$, and $X$ from $R^{n \times l}$.

The model selection is performed according to D. D. Lee and H. S. Seung, 1999, 2001.

The code is implemented in R.

References

D. D. Lee and H. S. Seung, Algorithms for non-negative matrix factorization, In Advances in Neural Information Processing Systems 13, 556-562, 2001.

D. D. Lee and H. S. Seung, Learning the parts of objects by non-negative matrix factorization, Nature, 401(6755):788-791, 1999.

See Also

fabia, fabias, fabiap, fabi, fabiasp, mfsc, nmfdiv, nmfeu, nmfsc, extractPlot, extractBic, plotBicluster, Factorization, projFuncPos, projFunc, estimateMode, makeFabiaData, makeFabiaDataBlocks, makeFabiaDataPos, makeFabiaDataBlocksPos, matrixImagePlot, fabiaDemo, fabiaVersion

Examples

Run this code
#---------------
# TEST
#---------------

dat <- makeFabiaDataBlocks(n = 100,l= 50,p = 3,f1 = 5,f2 = 5,
  of1 = 5,of2 = 10,sd_noise = 3.0,sd_z_noise = 0.2,mean_z = 2.0,
  sd_z = 1.0,sd_l_noise = 0.2,mean_l = 3.0,sd_l = 1.0)

X <- dat[[1]]
Y <- dat[[2]]
X <- abs(X)


resEx <- nmfdiv(X,3)


#---------------
# DEMO
#---------------

dat <- makeFabiaDataBlocks(n = 1000,l= 100,p = 10,f1 = 5,f2 = 5,
  of1 = 5,of2 = 10,sd_noise = 3.0,sd_z_noise = 0.2,mean_z = 2.0,
  sd_z = 1.0,sd_l_noise = 0.2,mean_l = 3.0,sd_l = 1.0)

X <- dat[[1]]
Y <- dat[[2]]
X <- abs(X)


resToy <- nmfdiv(X,13)

extractPlot(resToy,ti="NMFDIV",Y=Y)

Run the code above in your browser using DataLab