HMM模型
隐马尔可夫模型(HHM)是统计模型,用来描述一个含有隐含未知参数的马尔可夫过程
其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步分析,例如模式识别
马尔可夫链
状态空间中从一个状态到另一个状态转换的随机过程
HMM模型基础
前向算法评估观察序列概率
后向算法评估观察序列概率
维特比算法解码隐藏状态序列
鲍姆-韦尔奇算法
HMM模型API介绍
import numpy as np
from hmmlearn import hmm
# 设定隐藏状态的集合
states = ["box 1", "box 2", "box3"]
n_states = len(states)
# 设定观察状态的集合
observations = ["red", "white"]
n_observations = len(observations)
# 设定初始状态分布
start_probability = np.array([0.2, 0.4, 0.4])
# 设定状态转移概率分布矩阵
transition_probability = np.array([
[0.5, 0.2, 0.3],
[0.3, 0.5, 0.2],
[0.2, 0.3, 0.5]
])
# 设定观测状态概率矩阵
emission_probability = np.array([
[0.5, 0.5],
[0.4, 0.6],
[0.7, 0.3]
])
# 设定模型参数
model = hmm.MultinomialHMM(n_components=n_states)
# 设定初始状态分布
model.startprob_ = start_probability
# 设定状态转移概率矩阵
model.transmat_ = transition_probability
# 设定观测状态概率矩阵
model.emissionprob_ = emission_probability
# 设定观测序列
seen = np.array([[0, 1, 0]]).T
print("球的观测顺序为:\n", ",".join(map(lambda x: observations[x], seen.flatten())))
球的观测顺序为:
red,white,red
# 维特比 - 模型训练
box = model.predict(seen)
print("盒子最可能的隐藏状态顺序为:\n", ",".join(map(lambda x: states[x], box)))
盒子最可能的隐藏状态顺序为:
box3,box3,box3
# 观测序列的概率的问题
model.score(seen)
-2.038545309915233
import math
math.exp(-2.038545309915233)
0.13021800000000003