2012-12-18 65 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