Nan值来自MATLAB中数据的计算正态分布?

时间:2012-12-18 00:09:03

标签: matlab gaussian pattern-recognition

我正在使用高斯混合进行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的值太小了。

1 个答案:

答案 0 :(得分:0)

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

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

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