0

matlabでEMを使用してMoGを実装する割り当てがあります。割り当て: ここに画像の説明を入力してください

私のコード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である必要があると思いますが。

4

1 に答える 1

0

残念ながら、私は Matlab を話せないので、コードがどこで間違っているかはわかりませんが、一般的には答えることができます (また、Matlab を知っている人なら、あなたのコードが救われるかどうかわかるかもしれません)。各データポイントにはガンマが関連付けられています。これは、混合物内の各成分の指標変数の期待値です。それらの計算は非常に簡単です。i 番目のデータポイントと k 番目のコンポーネントの場合、gamma_ik は、i 番目のポイントでの k 番目のコンポーネントの密度に、k 番目の混合係数 (事前確率) を掛けたものです。ポイントは k 番目のコンポーネント (割り当てでは pi) に由来し、すべての k に対して計算されたこの量によって正規化されます。したがって、データポイントごとに、合計が 1 の責任のベクトル (長さ k) があります。

于 2012-11-06T11:29:12.303 に答える