Split–Merge Incremental LEarning (SMILE) algorithm for estimation of mixture model structure and parameters, with generalized internal estimations.


[theta, D] = smile(data, target_num)
[theta, D] = smile(data, target_num, options)
[theta, D, info] = smile(...)
[theta, D, info, options] = smile(...)


This function implements the SMILE algorithm proposed by Blekas and Lagaris (2007), though here we use generalized optimization methods.

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

[theta, D] = smile(data, target_num, options) utilizes applicable options from the options structure in the estimation procedure.

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

[theta, D, info, options] = smile(...) 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

  • numInit (default 2) : Initial number of mixture components.
  • tolCostDiff (default 0) : Minimum decrease in cost to accept a SOMO operation.
  • componentD (default MVN distribution) : distribution structure defining the mixture component distribution type.

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.


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


  1. K. Blekas and I. E. Lagaris, “Split–Merge Incremental LEarning (SMILE) of Mixture Models,” in Artificial Neural Networks – ICANN 2007, J. M. de S?, L. A. Alexandre, W. Duch, and D. Mandic, Eds. Springer Berlin Heidelberg, 2007, pp. 291–300.