本代码来自github地址。添加注释仅供理解。
Viterbi算法参考自《统计学习方法》
Viterbi算法:
算法实现:
# HMM的五个元素
# -------------------------------------
# 隐状态集合 states
# 记录所有可能的隐状态 ('Healthy', 'Fever')
# -------------------------------------
# 观测集合 observations
# 记录所有可能的观测 ('normal', 'cold', 'dizzy') [当前的观测序列obs另给出]
# -------------------------------------
# 初始概率分布 start_probability
# 记录所有隐状态发生的初始概率
# healthy 0.6
# fever 0.4
# -------------------------------------
# 状态转移概率分布 transition_probability
# healthy fever
# healthy 0.7 0.3
# fever 0.4 0.6
# -------------------------------------
# 观测概率分布 emission_probability
# normal cold dizzy
# healthy 0.5 0.4 0.1
# fever 0.1 0.3 0.6
states = ('Healthy', 'Fever')
observations = ('normal', 'cold', 'dizzy')
start_probability = {
'Healthy': 0.6, 'Fever': 0.4}
transition_probability = {
'Healthy'