Оцените матрицу переходов цепи Маркова в MATLAB с различными длинами последовательности состояний

Я пытаюсь построить матрицу перехода для цепи Маркова в MATLAB; У меня есть несколько разных последовательностей наблюдений (все разной длины), и мне нужно сгенерировать матрицу перехода, используя их.

Построение многоуровневой матрицы переходов цепи Маркова в Matlab показывает мне, как построить матрицу перехода с одной последовательностью наблюдений.

Как я могу построить его, используя наблюдения разной длины? Один из примеров может заключаться в том, что одна последовательность - 1,2,3,4, а другая - 4,5,6. Есть ли способ сделать это без перебора всех последовательностей и вычислений?


person radhika    schedule 30.05.2013    source источник


Ответы (2)


Итак, что касается цепей Маркова, я предполагаю, что вас интересуют только переходы состояний. Вы можете сгруппировать все переходы состояний в одну матрицу Nx2, а затем подсчитать, сколько раз появляется строка.

В этом примере я использую три наблюдения длиной 4, 3 и 3. Я могу использовать cellfun, чтобы сгруппировать все переходы состояний в единую матрицу следующим образом:

obs = cell(1, 3);

obs(1) = {[1 2 3 4]};
obs(2) = {[4 5 6]};
obs(3) = {[3 4 5]};

transitions = cellfun(@(x)([x(1:length(x)-1); x(2:length(x))]), obs, 'UniformOutput', false);

alltransitions = cell2mat(transitions)';

Это дает мне мои наблюдаемые переходы (1->2, 2->3, 3->4 ...):

alltransitions =

     1     2
     2     3
     3     4
     4     5
     5     6
     3     4
     4     5

Чтобы настроить матрицу переходов, вы можете воспользоваться приведенным здесь советом и подсчитать строки всех ваших переходов:

http://www.mathworks.it/matlabcentral/answers/75009-i-ve-a-matrix-of-6x4-and-i-want-to-count-the-rows-how-many-times-it-Have-in-a-matrix

[uniqueTransitions, ~, i]=unique(alltransitions,'rows','stable');
v=arrayfun(@(x) sum(i==x),1:size(uniqueTransitions,1))';
p = v/sum(v);

Мой вектор p содержит мою вероятность перехода, поэтому я могу продолжить и построить разреженную матрицу

transitionMatrix = sparse(uniqueTransitions(:,1), uniqueTransitions(:,2), p, 6,6)

что приводит к:

transitionMatrix =

   (1,2)       0.1429
   (2,3)       0.1429
   (3,4)       0.2857
   (4,5)       0.2857
   (5,6)       0.1429
person Huguenot    schedule 30.05.2013

Возможно, это более простой способ вычисления матрицы вероятности перехода (TPM) для заданной последовательности данных (одного вектора) следующим образом:

myS = {S1, S2, S1, S3, ...} с любым количеством состояний;

TPM = hmmestimate (myS, myS);

Функция hmmestimate определяется под скрытыми марковскими моделями в MATLAB.

person PM0087    schedule 10.06.2016
comment
действует ли hmmestimate, если у вас более одного вектора? - person galtor; 10.05.2017