# How to interpret Hidden Markov Model parameters (transition matrix, emission matrix, and pi values)?

I am working on channel modeling for cognitive radio using HMM. I've written a MATLAB program for forward, backward and Baum-Welch algorithm for multiple sequences. After given some random input and running the program for 1000 to 4000 iterations I'm getting some results. But I'm not getting how to interpret my results.

Will be glad if anyone can talk about inputting matrix/log-likelihood/transition matrix/emission matrix.

• Maybe providing a small sample of your data could help in getting more focused answers. – chl Oct 22 '13 at 10:44
• Berkan makes a good point: if you're able to program you're own HMM implementation, you must have some understanding of these parameters. Can you possibly elaborate on what specifically is confusing you? – David Marx Nov 21 '13 at 14:51

## 1 Answer

For MatLab, I would recommend using the HMM toolbox. It allows you to do pretty much all you would need from an HMM model.

If you feel strongly about using your own code, before running on a real dataset, you should probably validate your Baum Welch implementation by checking whether it actually returns sensible results. You can use an experimental setup similar to below. Please note that I am using the HMM toolbox functions, but it is more the order of steps that I am trying to draw your attention to.

M = 3; % number of observation levels
N  = 2; % number of states

% A - "true" parameters (of your validation model)
prior0 = normalise(rand(N ,1));
transmat0 = mk_stochastic(rand(N ,N ));
obsmat0 = mk_stochastic(rand(N ,M));

% B- using the real parameters in step A, simulate a sequence of states and corresponding observations
n_seq = 5;  % you want to generate 5 multiple sequences
seq_len= 100; % you want each sequence to be of length 100
obs_seq, state_seq = dhmm_sample(prior0, transmat0, obsmat0, n_seq, seq_len);

% C- like you say you do, generate some initial guesses of the real parameters (from step A) that you want to learn
prior1 = normalise(rand(N ,1));
transmat1 = mk_stochastic(rand(N ,N ));
obsmat1 = mk_stochastic(rand(N ,M));

% D - train based on your guesstimates using EM (Baum-Welch)
[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', 5);

% E- Finally, compare whether your trained values in step D are actually similar to the real values (that generated your data) from Step A.
% The simplest way to do that is to print them side by side or look at the absolute differences...
obsmat0
obsmat2

transmat0
transmat2


The interpretations of the transition matrix, observation (emission) matrix and loglikelihoods is a broad topic. I assume you already have a fair understanding since you could implement your own Baum-Welch. The easiest and best read on HMMs (in my opinion) is Rabiner's paper. I would recommend having a look at this if you haven't yet.