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

Nan值从MATLAB中计算数据的正态分布?,matlab,gaussian,pattern-recognition,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值之

我正在用高斯混合进行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值之后。我该如何处理那个问题。我也不用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的值很小。

在这种情况下,预防INF的一种方法是简单地使用

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