我正在使用高斯混合进行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
星号线是问题所在。在计算时,它返回'inf'值而不是产生NAN值。我该如何处理这个问题。我也计算它没有日志功能
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的值太小了。
答案 0 :(得分:0)
在这种情况下阻止inf
的一种方法是简单地使用
logdenom = -log( eps + (2*pi)^... )
我发现这对于最大似然估计中的稀疏数据很有用。我不知道它在EM中是否有用!基本上,零项成为+36
,因此不会太大,但它仍然允许放大您需要log
的小概率。