Transition Matrix that compares two elements to the next two elements.
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Ellie
am 27 Jul. 2015
Kommentiert: Walter Roberson
am 28 Jul. 2015
Hi all, I am trying to modify this code to create a transition matrix that compares two elements to the next two elements. As of now the code successfully compares two elements to the next one element. I have been trying to modify it, but have not had any luck. Any help would be greatly appreciated. Thanks.
close all
clc
dataset = [1 2 1 1 1 2 2 2 1 1 1 2 2];
precision = 1;
markovChain = (round(dataset/precision)).*precision;
%number of states
Nstates = max(markovChain);
%get Norder-contiguous sequences of the markov chain
ngrams = [];
for i = 0:1
ngrams = [ngrams, circshift(markovChain,[0 -1*(i)])'];
end
ngrams = cellstr(num2str( ngrams));
ngrams = ngrams(1:end-2);
%create all combinations of Norder-contiguous sequences
[x{1:2}] = ndgrid(1:Nstates);
%format x to cell
evalStr = ['xCell = cellstr(num2str(['];
for i = 1:2
evalStr = [evalStr 'x{' num2str(i) '}(:) '];
end
evalStr = [evalStr ']));'];
eval(evalStr);
%map ngrams to numbers
[gn,~,g]=unique([xCell;ngrams]);
s1 = g(Nstates^2+1:end);
%states following the ngrams
s2 = markovChain(3:end);
%get transition matrix
tm = full(sparse(s1,s2,1,Nstates^2,Nstates^2) );
transitionMatrix = bsxfun(@rdivide, tm, sum(tm,2));
9 Kommentare
Walter Roberson
am 28 Jul. 2015
I have given a solution in http://uk.mathworks.com/matlabcentral/answers/231381-error-using-accumarray-third-input-sz-must-be-a-full-row-vector-with-one-element-for-each-column-of to the form of the question presented there, which does not use those messy eval().
Akzeptierte Antwort
Azzi Abdelmalek
am 27 Jul. 2015
Bearbeitet: Azzi Abdelmalek
am 27 Jul. 2015
a=[1 2 1 1 1 2 2 2 1 1 1 2 2];
b=[0 1 0 0; 0.5 0 0 0.5; 1 0 0 0; 0.5 0 0.5 0];
state=[1 1;1 2;2 1;2 2];
q=zeros(4);
for k=1:4
for p=1:4
q(p,k)=numel(strfind(a,[state(k,:) state(p,:)]));
end
q(:,k)=q(:,k)/sum(q(:,k));
end
q
The result
q =
0 0.5000 1.0000 0.5000
0.5000 0 0 0
0 0 0 0.5000
0.5000 0.5000 0 0
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Filter Analysis finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!