I have 11 states, and a transition probability matrix, but I don't have emissions as my model is not hidden. It consists only of states (1,2,3, ..., 11)
I want to generate random states based on my transition probability matrix, but the HMM tool box requires an emission probability matrix. What should I do?
[seq, states] = hmmgenerate(100, Trans, Emis)
Consider the following:
%# number of states
N = 11;
%# some random transition matrix
trans = rand(N,N);
trans = bsxfun(@rdivide, trans, sum(trans,2));
%# fake emission matrix (only one symbol)
emis = ones(N,1);
%# get a sample of length = 10
[~,states] = hmmgenerate(10, trans, emis)
The sequence of states generated:
>> states
states =
10 1 3 11 9 4 11 1 4 6
In fact working with a Markov chain is relatively easy, that we can do it ourselves. Here is another example without using HMM functions from the stats toolbox.
%# number of states
N = 3;
%# transition matrix
trans = rand(N,N);
trans = bsxfun(@rdivide, trans, sum(trans,2));
%# probability of being in state i at time t=0
prior = rand(1,N);
prior = prior ./ sum(prior);
%# generate a sequence of states
len = 100; %# length of sequence
states = zeros(1,len);
states(1) = randsample(N, 1, true, prior);
for t=2:len
states(t) = randsample(N, 1, true, trans(states(t-1),:));
end
%# show sequence
stairs(states, 'LineWidth',2)
set(gca, 'YGrid','on', 'YLim',[0 N+1])
xlabel('time'), ylabel('states')
title('sequence of states')
I am using RANDSAMPLE function to sample at each iteration. If you want to use only core functions (no toolboxes), see Weighted random numbers in MATLAB for an alternative.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With