Gaussian Mixture を使用して EM アルゴリズムを実行していますが、問題は、データが非常に少ないため、値がゼロに近い非常に小さな値で変化することです。
ここが問題の部分です
for i=1:ncomp,
**logdenom = -log((2*pi)^(dim/2)*sqrt(abs(det(Cov(:,:,i)))));**
dist = mahalan(X,Mean(:,i),Cov(:,:,i));
y(i,:) = logdenom-0.5*dist;
end
アスタリスク線が問題です。計算中、結果の NAN 値より後の 'inf' 値を返します。どうすればその問題に対処できますか。log関数なしでも計算します
for i=1:ncomp,
dist = mahalan(X,Mean(:,i),Cov(:,:,i));
y(i,:) = exp(-0.5*dist)/sqrt((2*pi)^dim*det(Cov(:,:,i))); % problem
end
しかし、問題は同じで、Cov の値が非常に小さいためです。