This class provides a specific implementation for the
generic function `run`

-- concretising the virtual
interface class `NMFStrategy-class`

, for NMF
algorithms that conform to the following iterative schema
(starred numbers indicate mandatory steps):

- 1. Initialisation
- 2*. Update the model at each iteration
- 3. Stop if some criterion is satisfied
- 4. Wrap up

This schema could possibly apply to all NMF algorithms, since these are essentially optimisation algorithms, almost all of which use iterative methods to approximate a solution of the optimisation problem. The main advantage is that it allows to implement updates and stopping criterion separately, and combine them in different ways. In particular, many NMF algorithms are based on multiplicative updates, following the approach from Lee et al. (2001), which are specially suitable to be cast into this simple schema.

- onInitoptional function that performs some initialisation or pre-processing on the model, before starting the iteration loop.
- Updatemandatory function that implement the update step, which computes new values for the model, based on its previous value. It is called at each iteration, until the stopping criterion is met or the maximum number of iteration is achieved.
- Stopoptional function that implements the
stopping criterion. It is called
**before**each Update step. If not provided, the iterations are stopped after a fixed number of updates. - onReturnoptional function that wraps up the result into an NMF object. It is called just before returning the

- run
`signature(object = "NMFStrategyIterative", y = "matrix", x = "NMFfit")`

: Runs an NMF iterative algorithm on a target matrix`y`

. - show
`signature(object = "NMFStrategyIterative")`

: Show method for objects of class`NMFStrategyIterative`

Lee DD and Seung H (2001). "Algorithms for non-negative
matrix factorization." _Advances in neural information
processing systems_.