2012-12-18 38 views
1

我正在做高斯混合的EM算法,但问题是,我的数据是如此的空闲,所以值都会随着真正的小值接近零。Nan值是从MATLAB中计算数据的正态分布?

这里是有问题的部分

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 

Asterixed线就是问题所在。在计算过程中,它会返回比所得到的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的值是如此之小。

回答

0

一个防止inf S IN这种情况的方法是简单地使用

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

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