View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
Gaussian Mixture Model (GMM) - Gaussian Mixture Regression (GMR)

4.8 | 13 ratings Rate this file 44 Downloads (last 30 days) File Size: 39.9 KB File ID: #19630 Version: 1.2
image thumbnail

Gaussian Mixture Model (GMM) - Gaussian Mixture Regression (GMR)



18 Apr 2008 (Updated )

Encoding of data in Gaussian Mixture Model and retrieval through Gaussian Mixture Regression

| Watch this File

File Information

GMM-GMR is a set of Matlab functions to train a Gaussian Mixture Model (GMM) and retrieve generalized data through Gaussian Mixture Regression (GMR). It allows to encode efficiently any dataset in Gaussian Mixture Model (GMM) through the use of an Expectation-Maximization (EM) iterative learning algorithms. By using this model, Gaussian Mixture Regression (GMR) can then be used to retrieve partial output data by specifying the desired inputs. It then acts as a generalization process that computes conditional probability with respect to partially observed data.

A sample is provided to load a dataset containing several trajectory data [t,x] where t is a temporal value and x is a position in 3D. The joint probability p(t,x) is then encoded in GMM, and GMR is used to retrieve p(x|t), namely the expected position at each time step. This is used to retrieve a smooth generalized version of the trajectories provided.

The source codes are implementations of the algorithms described in the book "Robot Programming by Demonstration: A Probabilistic Approach", EPFL/CRC Press. More information on


This file inspired Mixtures Of Experts, Using Gaussian Mixture Models For The Gate.

Required Products Statistics and Machine Learning Toolbox
MATLAB release MATLAB 7.5 (R2007b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (19)
14 Nov 2016 Seungho Jeong

08 Jul 2016 Mohammad Najafi

06 Nov 2014 Joseph Santarcangelo

20 Feb 2014 francesco

17 Jan 2013 Nie Shaoshuai


07 Aug 2011 Dongsheng

Thanks for you code. It is great! But to address my problem, I need every Gaussion function shares exactly the same width. Is that possible or which part I need to amend?


10 Jun 2011 Bahareh

I'm trying to implement this for my data but at the first stage, I'm getting the following error:
Warning: Matrix is singular, close to singular or badly scaled.
Results may be inaccurate. RCOND = NaN.
> In gaussPDF at 21
In EM at 94
Can you please help me?

Comment only
31 May 2011 Holger

Holger (view profile)

Nice implementation.

Just a tiny little thing: I was wondering why there is no function that computes the output (i.e. the probability) of a learned GMM for a set of data points. I know that it can easily be done by summing the PDFs of all GMM components (using the function gaussPDF(...)) multiplied by their respective prior.
Also, some of the dimensions of the vectors and matrices in the help-text of the function gaussPDF(...) are not correct. It should be:
Mu: D x 1 array
Sigma: D x D array

26 Apr 2011 haifa ben saber

you shoud change your parameters !! but i can't interpret the resualt !!

Comment only
12 Feb 2011 Oleg

Oleg (view profile)

I had such problem also. The reason was that some other kmeans.m (with other order of inputs) overrides original one. In my example it was kmeans from MatlabArsenal. So I have deleted its path from Matlab's directories ("File->Set Path...")

Comment only
08 Dec 2010 Kamil Wojcicki

Kamil Wojcicki (view profile)

25 Nov 2010 Janez Podobnik

If I run demo1, demo2 or demo3 I always get the same error
??? Error using ==> kmeans at 46
Data dimension does not match dimension of centres

Error in ==> EM_init_kmeans at 27
[Data_id, Centers] = kmeans(Data', nbStates);

Error in ==> demo1 at 52
[Priors, Mu, Sigma] = EM_init_kmeans(Data, nbStates);

What I am doing wrong?

Comment only
08 Feb 2010 Eric Trautmann

Eric Trautmann (view profile)

This also does not work for 3D data, line 28 of plotGMM explicitly considers only the 2D case since the [cos(t) sin(t)] constrains the result to be a length(t) x 2 matrix:

X = [cos(t) sin(t)] * real(stdev) + repmat(Mu(:,j)',nbDrawingSeg,1);

The documentation appears great, but suggests that this can handle arbitrarily high dimensional cases.

Comment only
04 Dec 2009 Daniel Goodman

18 Nov 2009 Rifat

Rifat (view profile)

I guess nobody tried to plot the GMM for the 1-D data. I am getting "Matrix dimensions must agree" error in plotGMM line 28.

05 Mar 2009 Lesab Lahgab


12 Nov 2008 Christie Smith

There is also a kmeans function in LeSage's toolbox that you need to avoid when trying to use EM_init_kmeans. The demos ran as expected and the code seems pretty well documented.

Comment only
18 Oct 2008 safri ilias


15 Jul 2008 Nicholas Simanjuntak

this is good

24 Jul 2009 1.1

Notation updated to match the algorithms described in the book "Robot Programming by Demonstration: A Probabilistic Approach", EPFL/CRC Press (more information on

24 Jul 2009 1.2

Updated source code files

Contact us