2014-06-17 4 views
0

MATLAB을 사용하여 가우스 혼합 모델을 사용하여 두 개의 클래스를 분류하고자합니다.MATLAB을 사용하여 GMM으로 분류

나는 기능 두 가지 모델을 만들어 훈련을하고 그런 다음

NComponents = 1; 
    for class=1:2 
     model(class).obj = gmdistribution.fit(trainData(class).feature,NComponents,'Regularize',.1); 
    end 

을 gmdistribution.fit, 주어진 테스트 데이터 포인트는, 내가 그들을 분류하는 방법을 알고 싶어요. 내가 지금 뭐하는 거지 각 모델의 각 포인트에 대한 사후 확률을 얻을 수 있습니다 :

vectorClasses = zeros(1,2); 
    for class=1:2 
     Pos= posterior(model(class).obj,testDataPoint);   
     suma=0; 
     for k=1:NComponents 
      suma = suma + Pos(1,k)*model(class).obj.PComponents(k); 
     end 
     vectorClasses(class)=suma; 
    end 
    [v ix] = sort(vectorClasses,'descend'); 
    if ix(1)==realClass 
     success= 1; 
    else 
     success= 0; 
    end 

나는 각 구성 요소의 사후 확률과 모델의 구성 요소의 확률의 곱셈을 요약. 그런 다음 각 모델에서 얻은 확률을 정렬합니다. 테스트 데이터 포인트가 가장 높은 확률을 가진 클래스에 해당한다고 말합니다.

나는 괜찮은가요? 올바른 방법은 무엇입니까? 그것을 할 수있는 가장 쉬운 방법이 있습니까?

+0

안녕하세요, 전에 비슷한 질문에 직면, http://stackoverflow.com/questions/24037988/how-to-calculate-the-probability-with-a-gaussian-mixture-model-in-matlab?noredirect= 1 # comment37492776_24037988, @dpwe가 맞다고 생각합니다. 기본적으로, 나는 [Dummy, nlogl] = posterior (model (class) .obj, testDataPoint)''nlogl'을 일반적인 클래스의 후부로 사용한다. 희망이 당신을 도울 수 있습니다. 또한 Matlab에서 후방 기능을 열어 디버그 모드로 해당 기능의 출력 의미를 알 수 있습니다. – sflee

답변

0

this very complete description의 해답에서 설명한 것처럼 HMM의 경우와 같이 클래스마다 독립적 인 모델을 가질 필요가없는 것처럼 보입니다. 분류 단계와 유사하게 후방 명령이 작업을 수행하는 것 같습니다. 그러나 모델이 어느 클래스가 어떤 클래스를 나타내는 지 표시하지는 않습니다 (우리가 알아 내야 만합니다). 완벽한 솔루션을 얻었 으면 게시하십시오. 분류를 위해 matlab의 gmm을 사용하는 방법에 대한 정보는별로 없습니다 (검색도).

관련 문제