2

MATLAB에서 마르코프 체인을위한 전이 행렬을 만들려고합니다. 나는 여러 가지 관찰 시퀀스 (모든 길이가 다름)를 가지고 있으며이를 사용하여 전환 매트릭스를 생성해야합니다.다른 상태 시퀀스 길이를 가진 MATLAB의 마르코프 체인 전이 행렬 추정

Constructing a multi-order Markov chain transition matrix in Matlab은 하나의 관찰 순서로 전환 행렬을 만드는 방법을 보여줍니다.

다른 길이의 관측치를 사용하여 어떻게 구성 할 수 있습니까? 하나의 예는 한 시퀀스가 ​​1,2,3,4이고 다른 시퀀스가 ​​4,5,6 일 수 있습니다. 모든 시퀀스와 계산 횟수를 통해 for 루프를 수행하지 않고도이 작업을 수행 할 수있는 방법이 있습니까?

답변

4

그래서 마르코프 체인의 경우 상태 전환에만 관심이 있다고 가정합니다. 모든 상태 전이를 단일 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-occur-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 
0

이 쉽게를 주어진 데이터 시퀀스 (하나의 벡터)에 대해 다음과 같이 전환 확률 행렬 (TPM)을 계산하는 방법 :

myS = {S1, S2, S1, S3, ...} 보유한 상태 수만큼 표시됩니다.

TPM = hmmestimate (myS, myS);

hmmestimate 함수는 MATLAB의 숨겨진 마코프 모델에서 정의됩니다.

+0

은 하나 이상의 벡터가있을 때 유효합니다. – galtor