# NMFStrategy: Factory Method for NMFStrategy Objects In NMF: Algorithms and Framework for Nonnegative Matrix Factorization (NMF)

## Description

Creates NMFStrategy objects that wraps implementation of NMF algorithms into a unified interface.

## Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25``` ``` NMFStrategy(name, method, ...) ## S4 method for signature 'NMFStrategy,matrix,NMFfit' run(object, y, x, ...) ## S4 method for signature 'NMFStrategy,matrix,NMF' run(object, y, x, ...) ## S4 method for signature 'NMFStrategyFunction,matrix,NMFfit' run(object, y, x, ...) ## S4 method for signature 'NMFStrategyIterative,matrix,NMFfit' run(object, y, x, .stop = NULL, maxIter = nmf.getOption("maxIter") %||% 2000, ...) ## S4 method for signature 'NMFStrategyIterativeX,matrix,NMFfit' run(object, y, x, maxIter, ...) ## S4 method for signature 'NMFStrategyOctave,matrix,NMFfit' run(object, y, x, ...) ```

## Arguments

 `name` name/key of an NMF algorithm. `method` definition of the algorithm `...` extra arguments passed to `new`. `.stop` specification of a stopping criterion, that is used instead of the one associated to the NMF algorithm. It may be specified as: the access key of a registered stopping criterion; a single integer that specifies the exact number of iterations to perform, which will be honoured unless a lower value is explicitly passed in argument `maxIter`. a single numeric value that specifies the stationnarity threshold for the objective function, used in with `nmf.stop.stationary`; a function with signature ```(object="NMFStrategy", i="integer", y="matrix", x="NMF", ...)```, where `object` is the `NMFStrategy` object that describes the algorithm being run, `i` is the current iteration, `y` is the target matrix and `x` is the current value of the NMF model. `maxIter` maximum number of iterations to perform. `object` an object computed using some algorithm, or that describes an algorithm itself. `y` data object, e.g. a target matrix `x` a model object used as a starting point by the algorithm, e.g. a non-empty NMF model.

## Methods

NMFStrategy

```signature(name = "character", method = "function")```: Creates an `NMFStrategyFunction` object that wraps the function `method` into a unified interface.

`method` must be a function with signature `(y="matrix", x="NMFfit", ...)`, and return an object of class `NMFfit`.

NMFStrategy

```signature(name = "character", method = "NMFStrategy")```: Creates an `NMFStrategy` object based on a template object (Constructor-Copy).

NMFStrategy

```signature(name = "NMFStrategy", method = "missing")```: Creates an `NMFStrategy` based on a template object (Constructor-Copy), in particular it uses the same name.

NMFStrategy

```signature(name = "missing", method = "character")```: Creates an `NMFStrategy` based on a registered NMF algorithm that is used as a template (Constructor-Copy), in particular it uses the same name.

It is a shortcut for ```NMFStrategy(nmfAlgorithm(method, exact=TRUE), ...)```.

NMFStrategy

```signature(name = "NULL", method = "NMFStrategy")```: Creates an `NMFStrategy` based on a template object (Constructor-Copy) but using a randomly generated name.

NMFStrategy

```signature(name = "character", method = "character")```: Creates an `NMFStrategy` based on a registered NMF algorithm that is used as a template.

NMFStrategy

```signature(name = "NULL", method = "character")```: Creates an `NMFStrategy` based on a registered NMF algorithm (Constructor-Copy) using a randomly generated name.

It is a shortcut for ```NMFStrategy(NULL, nmfAlgorithm(method), ...)```.

NMFStrategy

```signature(name = "character", method = "missing")```: Creates an NMFStrategy, determining its type from the extra arguments passed in `...`: if there is an argument named `Update` then an `NMFStrategyIterative` is created, or if there is an argument named `algorithm` then an `NMFStrategyFunction` is created. Calls other than these generates an error.

run

```signature(object = "NMFStrategy", y = "matrix", x = "NMFfit")```: Pure virtual method defined for all NMF algorithms to ensure that a method `run` is defined by sub-classes of `NMFStrategy`.

It throws an error if called directly.

run

```signature(object = "NMFStrategy", y = "matrix", x = "NMF")```: Method to run an NMF algorithm directly starting from a given NMF model.

run

```signature(object = "NMFStrategyFunction", y = "matrix", x = "NMFfit")```: Runs the NMF algorithms implemented by the single R function – and stored in slot `'algorithm'` of `object`, on the data object `y`, using `x` as starting point. It is equivalent to calling `object@algorithm(y, x, ...)`.

This method is usually not called directly, but only via the function `nmf`, which takes care of many other details such as seeding the computation, handling RNG settings, or setting up parallelisation.

run

```signature(object = "NMFStrategyIterative", y = "matrix", x = "NMFfit")```: Runs an NMF iterative algorithm on a target matrix `y`.

run

```signature(object = "NMFStrategyOctave", y = "matrix", x = "NMFfit")```: Runs the NMF algorithms implemented by the Octave/Matlab function associated with the strategy – and stored in slot `'algorithm'` of `object`.

This method is usually not called directly, but only via the function `nmf`, which takes care of many other details such as seeding the computation, handling RNG settings, or setting up parallel computations.

NMF documentation built on Aug. 1, 2020, 9:06 a.m.