1

我正在使用高斯混合进行 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”值。我该如何处理这个问题。我也计算它没有对数函数

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 的值太小了。

4

1 回答 1

0

在这种情况下防止infs 的一种方法是简单地使用

 logdenom = -log( eps + (2*pi)^...  )

我发现这个 v 对于最大似然估计中的稀疏数据很有用。我不知道它在 EM 中是否有用!基本上,零项变成类似+36,所以不会太大,但它仍然允许放大您需要的小概率log

于 2012-12-18T00:16:35.667 回答