# Seeding Strategies for NMF Algorithms

## Description

`nmfSeed` lists and retrieves NMF seeding methods.

`getNMFSeed` is an alias for `nmfSeed`.

`existsNMFSeed` tells if a given seeding method exists in the registry.

## Usage

```nmfSeed(name = NULL, ...)

getNMFSeed(name = NULL, ...)

existsNMFSeed(name, exact = TRUE)```

## Arguments

name
access key of a seeding method stored in registry. If missing, `nmfSeed` returns the list of all available seeding methods.
...
extra arguments used for internal calls
exact
a logical that indicates if the access key should be matched exactly or partially.

## Details

Currently the internal registry contains the following seeding methods, which may be specified to the function `nmf` via its argument `seed` using their access keys:

1. random The entries of each factors are drawn from a uniform distribution over `[0, max(x)]`, where \$x\$ is the target matrix.
2. nndsvd Nonnegative Double Singular Value Decomposition.

The basic algorithm contains no randomization and is based on two SVD processes, one approximating the data matrix, the other approximating positive sections of the resulting partial SVD factors utilising an algebraic property of unit rank matrices.

It is well suited to initialise NMF algorithms with sparse factors. Simple practical variants of the algorithm allows to generate dense factors.

Reference: Boutsidis et al. (2008)

3. ica Uses the result of an Independent Component Analysis (ICA) (from the `fastICA` package). Only the positive part of the result are used to initialise the factors.
4. none Fixed seed.

This method allows the user to manually provide initial values for both matrix factors.

## References

Boutsidis C and Gallopoulos E (2008). "SVD based initialization: A head start for nonnegative matrix factorization." _Pattern Recognition_, *41*(4), pp. 1350-1362. ISSN 00313203, , .

## Examples

``````
# list all registered seeding methods
nmfSeed()
``````
``````## [1] "none"   "random" "ica"    "nndsvd"
``````
``````# retrieve one of the methods
nmfSeed('ica')
``````
``````## <object of class:  NMFSeed >
## name:     ica
## method:   <function>
``````
``````
``````