因此,對於馬爾可夫鏈,我假設你只對狀態轉換感興趣。您可以將所有狀態轉換組合到一個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
當你有多個向量時,hmmestimate是否有效? – galtor