nmfsc {fabia}R Documentation

Non-negative Sparse Matrix Factorization

Description

nmfsc: R implementation of nmfsc.

Usage


nmfsc(X,p,sL,sZ,cyc=100)

Arguments

X the data matrix.
p number of hidden factor = number of biclusters.
sL sparseness loadings.
sZ sparseness factors.
cyc maximal number of iterations.

Details

Non-negative Matrix Factorization represents positive matrix X by positive matrices L and Z that are sparse.

Objective for reconstruction is Euclidean distance and sparseness constraints.

X = L Z

X = sum_{i=1}^{p} L_i (Z_i )^T

If the nonzero components of the sparse vectors are grouped together then the outer product results in a matrix with a nonzero block and zeros elsewhere.

The model selection is performed by a constraint optimization according to Hoyer, 2004. The Euclidean distance (the Frobenius norm) is minimized subject to sparseness and non-negativity constraints.

Model selection is done by gradient descent on the Euclidean objective and thereafter projection of single vectors of L and single vectors of Z to fulfill the sparseness and non-negativity constraints.

The projection minimize the Euclidean distance to the original vector given an l_1-norm and an l_2-norm and enforcing non-negativity.

The projection is a convex quadratic problem which is solved iteratively where at each iteration at least one component is set to zero. Instead of the l_1-norm a sparseness measurement is used which relates the l_1-norm to the l_2-norm.

The code is implemented in R.

Value

L Left matrix: L
Z Right matrix: Z

Author(s)

Sepp Hochreiter

References

Patrik O. Hoyer, ‘Non-negative Matrix Factorization with Sparseness Constraints’, Journal of Machine Learning Research 5:1457-1469, 2004.

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

See Also

fabi, fabia, fabiap, fabias, fabiasp, mfsc, nmfdiv, nmfeu, nprojfunc, projfunc, make_fabi_data, make_fabi_data_blocks, make_fabi_data_pos, make_fabi_data_blocks_pos, extract_plot, extract_bic, myImagePlot, PlotBicluster, Breast_A, DLBCL_B, Multi_A, fabiaDemo, fabiaVersion

Examples


#---------------
# TEST
#---------------

dat <- make_fabi_data_blocks(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)
XX <- tcrossprod(X)
dXX <- 1/sqrt(diag(XX))
X <- dXX*X

resEx <- nmfsc(as.matrix(abs(X)),3,0.7,0.7)

## Not run: 
#---------------
# DEMO
#---------------

dat <- make_fabi_data_blocks(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)
XX <- tcrossprod(X)
dXX <- 1/sqrt(diag(XX))
X <- dXX*X

resToy <- nmfsc(as.matrix(abs(X)),8,0.7,0.7)

rToy <- extract_plot(X,resToy$L,resToy$Z,ti="NMFSC",Y=Y)

## End(Not run)

[Package fabia version 0.1.1 Index]