0

我有一个任务是在 matlab 中用 EM 实现 MoG。那作业: 在此处输入图像描述

我的自动取款机;

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。

4

1 回答 1

0

不幸的是,我不会说 Matlab,所以我真的看不出你的代码在哪里不正确,但我可以大致回答(也许知道 Matlab 的人可以看看你的代码是否可以挽救)。每个数据点都有一个与之关联的 gamma,它是混合物中每个成分的指示变量的期望值。计算它们非常简单:对于第 i 个数据点和第 k 个分量,gamma_ik 只是第 i 个点的第 k 个分量的密度乘以第 k 个混合系数(先验概率该点来自第 k 个组件,即您的作业中的 pi),通过在所有 k 上计算的这个数量进行归一化。因此,对于每个数据点,您都有一个总和为 1 的职责向量(长度为 k)。

于 2012-11-06T11:29:12.303 回答