2012-03-20 2 views
2

MATLAB 통계 도구 상자 기능 hmmtrain.m은 모델이 초기에 교육 과정 전에 상태 1에 있다고 가정합니다. 이 "기능"을 끌 수있는 방법이 있습니까? 예 :MATLAB의 hmmtrain은 상태 1에서 초기 천이로 가정합니다.

>> y = [ 3 3 1 2 3 ]; 
>> H = eye(3); 
>> T = ones(3)/3; 
>> [ T, H ] = hmmtrain(y, T, H) 

T = 

     0 0.5000 0.5000 
     0   0 1.0000 
    0.5000   0 0.5000 


H = 

    1  0  0 
    0  1  0 
    0  0  1 

훈련 세트에는 1에서 3까지의 전환이 포함되지 않습니다. 왜 T (1,3)가 0이 아닌지?!

+0

나는 완전히 확실하지 않다, 그러나 당신이 알려진 상태와 모델에 맞게 원하는 것처럼 오히려 알 수없는보다는 보인다. [Mathworks는 그 상황에서'hmmestimate()'] (http://www.mathworks.com/help/toolbox/stats/hmmestimate.html)을 사용하도록 제안합니다. 내가 보여주는 결과물이 Matlab이하는 바보 같은 일이라는 것에 완전히 동의하지만,'hmmestimate() '를 시도하면 그 동안 올바른 방향으로 나아갈 수 있을까요? – ely

+0

팁 주셔서 감사합니다, EMS. 외모에도 불구하고, 나는 일반적으로 일반적으로 상태와 같은 아닌 배출 된 기호로부터 배우기를 원합니다. 위 예제에서 H = eye (3)를 사용하여 쉽게 따라 할 수 있습니다. – Clark

답변

1

필자는 hmmtrain에 대해 모델의 초기 상태에서만 사용되는 특수한 상태 1을 생성하는 래퍼 함수를 ​​작성했습니다. 외부 호출자의 관점에서 볼 때 그것은 존재하지 않으며 트레이닝 시퀀스의 심볼 간 전환 통계 만 얻을 수 있습니다. 그것은 시스템의 초기 상태에 관해 아무것도 알지 못합니다. 나는 내 앞에 컴퓨터에 matlab에이 없기 때문에

% MYHMMTRAIN - Wrapper on HMMTRAIN that removes "initial state" effects 

    function [ T, H ] = myhmmtrain(y, T, H, varargin) 

    % hmmtrain assumes the system always starts in state 1, 
    % so we create a "state 1" that isn't used for anything else 
    N = size(T,1); 
    T = [ 0   ones(1,N)/N; ... 
     zeros(N,1) T ]; 
    M = size(H,2); 
    H = [ zeros(1,M); H ]; 

    % train 
    [ T, H ] = hmmtrain(y, T, H, varargin{:}); 

    % remove false state 1 
    T = T(2:end,2:end); 
    H = H(2:end,:); 

    end 
관련 문제