2012-12-18 3 views
1

Gaussian Mixture를 사용하여 EM 알고리즘을 수행하고 있지만 문제는 내 데이터가 너무 여유해서 값이 0에 가까운 아주 작은 값으로 이동한다는 것입니다.MATLAB에서 데이터의 계산 정규 분포에서 얻은 Nan 값은 무엇입니까?

여기

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의 값이 너무 작습니다. 이 상황에서 inf의 방지를

답변

0

하나의 방법은 단순히

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

내가 최대 우도 추정 스파 스 데이터에 대한 유용한이 절 찾아 사용하는 것입니다. 나는 그것이 EM에서 유용 할 것인지 전혀 모른다. 기본적으로 제로 조건은 +36과 같아서 너무 크지는 않지만 여전히 log이 필요한 작은 확률의 증폭을 허용합니다.

관련 문제