高斯混合(EM)如何计算责任

时间:2012-11-06 08:41:05

标签: matlab machine-learning gaussian

我有一个在matlab中用EM实现MoG的任务。分配: enter image description here

我的代码atm;

clear
clc

load('data2')

%% INITIALIZE
K = 20
pi =  0.01:((1-0.01)/K):1;
for k=1:20
    sigma{k} = eye(2);
    mu(k,:) = [rand(1),rand(1)];
end


%% Posterior over the laten variables
addition = 0;

for k =1:20 
    addition = addition + (pi(k)*mvnpdf(x,mu(k,:), sigma{k}));
end
test = 0;
for k =1:20 
   gamma{k} =  (pi(k)*mvnpdf(x,mu(k), sigma{k})) ./ addition;  
end

数据有1000行和2列(所以1000个数据点)。我现在的问题是如何计算责任。当我尝试计算协方差矩阵时,得到1x1000矩阵。虽然我认为协方差矩阵应该是2x2。

1 个答案:

答案 0 :(得分:0)

不幸的是,我不会说Matlab,所以我不能真正看到你的代码不正确的地方,但我可以回答一下(也许有人知道Matlab可以看看你的代码是否可以被抢救)。每个数据点都有一个与之相关的伽玛,这是混合物中每个组分的指示变量的期望。计算它们非常简单:对于第i个数据点和第k个分量,gamma_ik只是第i个点的第k个分量的密度,乘以第k个混合系数(先验概率,该点来自第k个分量,即你的任务中的pi),通过在所有k上计算的数量进行归一化。因此,对于每个数据点,您都有一个责任向量(长度为k),总和为1。