# jason2506/PythonHMM

A Python implementation of the Hidden Markov Model.
Python
Fetching latest commitâ€¦
Cannot retrieve the latest commit at this time.

# PythonHMM

PythonHMM is a python implementation of the Hidden Markov Model.

## Usage

To use PythonHMM, you must import the `hmm` module.

``````import hmm
``````

Then, you can create an instance of `Model` by passing the states, symbols, and (optional) probability matrices.

``````states = ('rainy', 'sunny')
symbols = ('walk', 'shop', 'clean')

start_prob = {
'rainy' : 0.5,
'sunny' : 0.5
}

trans_prob = {
'rainy': { 'rainy' : 0.7, 'sunny' : 0.3 },
'sunny': { 'rainy' : 0.4, 'sunny' : 0.6 }
}

emit_prob = {
'rainy': { 'walk' : 0.1, 'shop' : 0.4, 'clean' : 0.5 },
'sunny': { 'walk' : 0.6, 'shop' : 0.3, 'clean' : 0.1 }
}

model = hmm.Model(states, symbols, start_prob, trans_prob, emit_prob)
``````

Now, you can evaluate and decode the given sequence:

``````sequence = ['walk', 'shop', 'clean', 'clean', 'walk', 'walk', 'walk', 'clean']

print model.evaluate(sequence)
print model.decode(sequence)
``````

You can also using the given sequences (a list of (state list, symbol list) pair) to train a model:

``````sequences = [
(state_list1, symbol_list1),
(state_list2, symbol_list2),
...
(state_listN, symbol_listN),
]

model = hmm.train(sequences)
``````

The `train` function also has two optional arguments, `delta` and `smoothing`.

The `delta` argument (which is defaults to 0.0001) specifies that the learning algorithm will stop when the difference of the log-likelihood between two consecutive iterations is less than `delta`.

The `smoothing` argument (which is defaults to 0) is the smoothing parameter of the additive smoothing to avoid zero probability.