2012-03-20 1 views
2

Функция инструмента статистики статистики MATLAB hmmtrain.m, по-видимому, предполагает, что модель изначально находится в состоянии 1 до тренировочной последовательности. Есть ли способ отключить эту функцию? Пример:hmtrain MATLAB предполагает первоначальный переход из состояния 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

Я не совсем уверен, потому что у меня нет MATLAB на компьютере передо мной, но похоже, что вы хотите подгонять модель с известными состояниями, а не с неизвестными. [Mathworks предлагает использовать 'hmmestimate()'] (http://www.mathworks.com/help/toolbox/stats/hmmestimate.html) в этой ситуации. Хотя я полностью согласен с тем, что вывод, который вы показываете, является действительно глупой вещью для Matlab, возможно, попытка «hmmestimate()» поможет вам на правильном пути тем временем? – ely

+0

Спасибо за подсказку, EMS. Несмотря на внешность, я действительно хочу, чтобы в целом учился только из испущенных символов, которые не совпадают с состояниями. В приведенном выше примере я использовал H = eye (3), чтобы было легче следовать. – Clark

ответ

1

Я написал следующую функцию-оболочку для hmmtrain, которая создает специальное состояние 1, которое используется только для исходного состояния модели. С точки зрения внешнего абонента это не существует, и вы получаете статистику переходов между символами вашей обучающей последовательности; он ничего не узнает относительно начального состояния системы.

% 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