2012-11-06 25 views
0

我有一個任務,用matlab實現MoG與EM。作業: enter image description here混合高斯(EM)如何計算責任

我的代碼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的矩陣。雖然我相信協方差矩陣應該是2×2。

回答

0

不幸的是,我不會說Matlab,所以我不能真正看到你的代碼是不正確的,但我可以普遍回答(也許有人知道Matlab可以看到你的代碼是否可以被搶救)。每個數據點都有一個與之相關的伽馬值,這是混合物中每個組分的指示變量的期望值。計算它們非常簡單:對於第i個數據點和第k個分量,gamma_ik就是第i個點的第k個分量的密度,乘以第k個混合係數(先驗概率該點來自第k個分量,在您的分配中爲pi),通過在所有k上計算的此數量進行歸一化。因此,對於每個數據點,您有一個責任向量(長度爲k),總和爲1。