MATLAB中的高斯混合模型 - 经验方差协方差矩阵的计算

时间:2018-06-15 11:59:13

标签: matlab statistics normal-distribution mixture-model

我在调整高斯混合的一些基本理论结果和Matlab中命令gmdistribution, random的输出方面存在问题。

考虑两个独立的3变量正态分布的混合,权重为1/2,1/2

第一个分布A的特征是均值和方差 - 协方差矩阵等于

muA=[-1.4 3.2 -1.9]; %mean vector
rhoA=-0.5; %correlation among components in A
sigmaA=[1 rhoA rhoA; rhoA 1 rhoA; rhoA rhoA 1]; %variance-covariance matrix of A

第二个分布B的特征是均值和方差 - 协方差矩阵等于

muB=muB=[1.2 -1.6 1.5]; %mean vector
rhoB=0.3; %correlation among components in B
sigmaB=[1 rhoB rhoB; rhoB 1 rhoB; rhoB rhoB 1]; %variance-covariance matrix of B

epsilon为分布为混合物的3变量随机向量。我的计算表明epsilon的预期值应为

Mtheory=1/2*(muA+muB);

和方差 - 协方差矩阵应

Vtheory=1/4*[2 rhoA+rhoB rhoA+rhoB; rhoA+rhoB 2 rhoA+rhoB; rhoA+rhoB rhoA+rhoB 2];

现在让我们试着看看MtheoryVtheory是否与我们从混合物中抽取许多随机数得到的经验时刻一致。

clear
rng default 

n=10^6; %number of draws 

w = ones(1,2)/2; %weights 

rhoA=-0.5; %correlation among components of A
rhoB=0.3; %correlation among components of B

muA=[-1.4 3.2 -1.9]; %mean vector of A
muB=[1.2 -1.6 1.5]; %mean vector of B
mu = [muA;muB];    
%Variance-covariance matrix for mixing
sigmaA=[1 rhoA rhoA; rhoA 1 rhoA; rhoA rhoA 1]; %variance-covariance matrix of A
sigmaB=[1 rhoB rhoB; rhoB 1 rhoB; rhoB rhoB 1]; %variance-covariance matrix of B 
sigma = cat(3,sigmaA,sigmaB);

obj = gmdistribution(mu, sigma,w);

%Draws
epsilon = random(obj, n); 

M=mean(epsilon);
V=cov(epsilon);
Mtheory=1/2*(muA+muB);
Vtheory=1/4*[2 rhoA+rhoB rhoA+rhoB; rhoA+rhoB 2 rhoA+rhoB; rhoA+rhoB rhoA+rhoB 2];

问题:MMtheory几乎重合。 VVtheory完全不同。我究竟做错了什么?我应该做一些非常愚蠢的事情,但我不知道在哪里。

1 个答案:

答案 0 :(得分:1)

当您计算协方差时,请注意您的数据不是居中的 而且,你的0.25因素是错误的 这不是变量的缩放,而是选择 应使用Law of Total Variance / Law of Total Covariance进行计算 "给定事件"是混合指数。

计算的一个例子由Calculation of the Covariance of Gaussian Mixtures给出。