why change in mean and covariance doesnot effect gmdistribution

1 view (last 30 days)
Hello,
Below I have given 5 points. In each point mu, sigma and mixp is given. Gmdistribution is calculated for each . Changing of mu and sigma values do not make any change in the answer. But if I change the mixp values then the distribution value changes. Why does the change in mean and sigma doesnot affect the gmdistribution?
1. mu = [1 2;-3 -5]; Sigma = [2 0; 0 .5],[1 0; 0 1]; mixp = ones(1,2)/2; gm = gmdistribution(mu,Sigma,mixp) ans= Sigma = 2.0000 0 0 0.5000 gm = Gaussian mixture distribution with 2 components in 2 dimensions Component 1: Mixing proportion: 0.500000 Mean: 1 2
Component 2: Mixing proportion: 0.500000 Mean: -3 -5
2. I have changed the value of mixp
mu = [1 2;-3 -5]; Sigma = [2 0; 0 .5],[1 0; 0 1]; mixp = ones(1,2); gm = gmdistribution(mu,Sigma,mixp) ans= Sigma = 2.0000 0 0 0.5000 gm = Gaussian mixture distribution with 2 components in 2 dimensions Component 1: Mixing proportion: 0.500000 Mean: 1 2
Component 2: Mixing proportion: 0.500000 Mean: -3 -5
3. I have changed the value of mixp again
mu = [1 2;-3 -5]; Sigma = [2 0; 0 .5],[1 0; 0 1]; mixp = [3 4]; gm = gmdistribution(mu,Sigma,mixp) ans= Sigma = 2.0000 0 0 0.5000 gm = Gaussian mixture distribution with 2 components in 2 dimensions Component 1: Mixing proportion: 0.428571 Mean: 1 2
Component 2: Mixing proportion: 0.571429 Mean: -3 -5
4. I have changed the value of sigma. The mixing proportion remains the same as above.
mu = [1 2;-3 -5]; Sigma = [8 0; 0 .5],[1 0; 0 1]; mixp = [3 4]; gm = gmdistribution(mu,Sigma,mixp) Sigma = 8.0000 0 0 0.5000 gm = Gaussian mixture distribution with 2 components in 2 dimensions Component 1: Mixing proportion: 0.428571 Mean: 1 2
Component 2: Mixing proportion: 0.571429 Mean: -3 -5 5. I have changed the value of mean but the mixing proportion doesnot change.
mu = [7 2;-3 -5]; Sigma = [8 0; 0 .5],[1 0; 0 1]; mixp = [3 4]; gm = gmdistribution(mu,Sigma,mixp)
Sigma =
8.0000 0
0 0.5000
gm =
Gaussian mixture distribution with 2 components in 2 dimensions Component 1: Mixing proportion: 0.428571 Mean: 7 2
Component 2: Mixing proportion: 0.571429 Mean: -3 -5
Thanks,
Nidhi

Accepted Answer

Tom Lane
Tom Lane on 25 Jun 2012
There are two ways to create a gmdistribution. One is by specifying the mean, covariance, and mixing proportion. The result is a distribution with the parameters you specified. That seems to be what is happening in your case. The resulting objects have the means that you specify. The mixing proportions are also the same as the ones you provided, but they are normalized to sum to 1 (so they are real proportions, not just relative sizes.
The other way is to fit to data using the gmdistribution.fit function.
So what is confusing about the output you quote? It may be the normalization of the mixing proportions. My only other idea is that you seem to be trying to specify two covariance matrices, but that's not working. You have
Sigma = [8 0; 0 .5],[1 0; 0 1];
This is actually two statements, one assigning a 2-by-2 matrix to Sigma and the other simply creating a second matrix and discarding it. You may be intending this:
>> Sigma = cat(3,[8 0; 0 .5],[1 0; 0 1])
Sigma(:,:,1) =
8.0000 0
0 0.5000
Sigma(:,:,2) =
1 0
0 1

More Answers (1)

Nidhi
Nidhi on 26 Jun 2012
Thanks a lot. Actually the reason for asking about gmdistribution was that I was making a program using gmdistribution. But, it is giving error at the gmdistribution command. So, I wanted to clear the concept. I saw the algo of this on internet itself and tried it.
The program is :
frame20 = double(imread('image6.jpg'));
[rows,cols,bands] = size(frame20);
skin_detection = zeros(rows, cols);
for row = 1:rows
for col = 1:cols
red = frame20(row, col, 1);
green = frame20(row, col, 2);
blue = frame20(row, col, 3);
r = gmdistribution(red_mean, red_std, red); red_pr=pdf(r,red);
g = gmdistribution(green_mean, green_std, green) green_pr=pdf(g,green);
b = gmdistribution(blue_mean, blue_std, blue); blue_pr=pdf(b,blue);
prob = red_pr .* green_pr .* blue_pr; skin_detection(row, col)= prob;
end
end
This is giving error:
??? Error using ==> gmdistribution.gmdistribution>gmdistribution.gmdistribution at 158 The mixing proportions must be positive.
Error in ==> trial_gauss_fullimage at 51 g = gmdistribution(green_mean, green_std, green); Error in ==> trial_gauss_fullimage at 52 green_pr=pdf(g,green);
The name of my file is trial_gauss_fullimage.
In this the mean and std values of red, green and blue it calculated and these are 1*1 matrix i.e. constant one value eg. red_mean is 237.2865 and red_std is 13.8627. Same holds for red also.
I hope I have been able to explain my problem. If you can help me out it would be great.
Thanks,
Nidhi
  6 Comments
Tom Lane
Tom Lane on 30 Jun 2012
The gaussian_probability function isn't a Statistics Toolbox function. At just a quick look, it appears to be something like normpdf but with arguments in a different order. My guess is normpdf(x,mu,sigma) is like gaussian_probability(mu,sigma,x). But that's a guess. Maybe you could try writing to the author.
Nidhi
Nidhi on 2 Jul 2012
Thanks a lot. You have been very helpful, although my problem didnot get solved as i do not have the email id of this person. Anyways, once again thanks a lot for your cooperation.
Nidhi

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!