`smem`

Split and Merge Expectation-Maximization (SMEM) algorithm for estimation of mixture model structure and parameters, with generalized internal estimations.

**Syntax**

[theta, D] = smem(data, num) [theta, D] = smem(data, num, options) [theta, D, info] = smem(...) [theta, D, info, options] = smem(...)

**Description**

This function implements the SMEM algorithm proposed by Ueda et al. (2000), though here we use generalized optimization methods.

`[theta, D] = smem(data, num)` returns the estimated parameters and the mixture distribution `D` with `num` components, fitted to `data`.

`[theta, D] = smem(data, num, options)` utilizes applicable options from the `options` structure in the estimation procedure.

`[theta, D, info] = smem(...)` also returns `info`, a structure array containing information about successive iterations performed by iterative estimation functions.

`[theta, D, info, options] = smem(...)` also returns the effective `options` used, so you can see what default values the function used on top of the options you possibly specified.

For information about the output `theta`, see Distribution Parameters Structure. The input argument `data` is described in Data Input Argument to Functions. You may also want to read about `options` or `info` arguments.

**Available Options**

This function supports all the options described in estimation options. This function accepts the following additional fields in `options.sm`:

(default 5) : Maximum number of merge candidates.`maxCands`(default MVN distribution) : distribution structure defining the mixture component distribution type.`componentD`

`options.inner` can be used to set specific options for the inner estimations. To set options only for the partial or full inner estimations use `options.inner.partial` or `options.inner.full` respectively.

**Returned info fields**

The fields present in the returned `info` structure array, depend on the solver used (`options.solver`). When a Manopt solver is specified, the `info` returned by the Manopt solver is returned directly. For the 'default' solver see the documentation of the 'estimatedefault' function for the mixture distribution. You can read more at our documentation on estimation statistics structure.

**Example**

% generate 1000 random data points data = randn(1,1000) .* 2 + 1; % set some options options.solver = 'cg'; options.verbosity = 2; options.sm.maxCands = 3; options.inner.partial.maxiter = 10; % fit mixture model to data [theta, D] = smem(data, 5, options)

**References**

- N. Ueda, R. Nakano, Z. Ghahramani, and G. E. Hinton, “Split and Merge EM Algorithm for Improving Gaussian Mixture Density Estimates,” The Journal of VLSI Signal Processing-Systems for Signal, Image, and Video Technology, vol. 26, no. 1–2, pp. 133–140, Aug. 2000.