HMM模型
了解什么是马尔可夫链
知道什么是HMM模型
知道前向后向算法评估管擦序列概率
知道维特比算法解码隐藏状态序列
了解鲍姆-韦尔奇算法
知道HMM模型API的使用
1、马尔可夫链
1.1、简介
马尔可夫链几位状态空间中从一个状态到另一个状态转换的随机过程
该过程要求具备"无记忆"的特征
下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关
在马尔可夫链的每一步,系统根据概率分布,可从一个状态变到另一个状态,也可以保持当前状态。
状态的改变叫做转移,与不同的状态改变相关的概率叫做转移概率。
马尔可夫的数据表达式
P
(
x
i
+
1
∣
.
.
.
,
x
i
−
2
,
x
i
−
1
,
x
i
)
=
P
(
x
i
+
1
∣
x
i
)
P(x_{i+1}|...,x_{i-2},x_{i-1},x_{i})=P(x_{i+1}|x_{i})
P(xi+1∣...,xi−2,xi−1,xi)=P(xi+1∣xi)
既然某一时刻状态转移的概率只依赖前一个状态,那么只要求出系统中任意两个状态之间的转移概率,这个马尔科夫链的模型就完了
1.2、经典举例
2、HMM简介
隐马尔可夫模型(Hidden Markov Model)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。
其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析。例如模式识别。
3、HMM模型基础
3.1、什么样的数据使用HMM
使用HMM模型时我们的问题一般有两个特征
1)问题是基于序列的,比如时间序列或者状态序列
2)问题中有两类数据:1、一类序列是可以观测到的,即观测序列。2、不能观测到的,即隐藏序列,简称状态序列。
3.2、HMM模型的定义
3.3、一个HMM模型实例
3.4、HMM观测序列的生成过程
3.5、HMM模型的三个基本问题
4、前向后向算法评估观测序列概率
5、维特比算法解码隐藏状态序列
6、鲍姆-韦尔奇算法简介
7、HMM模型API介绍
7.1、API安装
pip3 install hmmlearn
7.2、hmmlearn介绍
Gaussian和GMMHMM是连续观测状态的HMM模型,而MultinomialHMM是离散观测状态的模型,也是我们再HMM原理系列篇里面使用的模型
对于MultinomialHMM的模型,使用比较简单
"startprob_"参数对应我们的隐藏状态初始分布
"transmat_"对应我们的状态转移矩阵
“emissionprob_” 对应我们的观测状态概率矩阵
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
seen
observations
seen.flatten()
print("球的观测顺序为:\n",",".join(map(lambda x: observations[x],seen.flatten())))
#模型训练
box = model.predict(seen)
print("盒子最可能的隐藏状态顺序为:\n",",".join(map(lambda x: states[x],box)))
#观测序列的概率问题
model.score(seen)
import math
math.exp(-2.038545309915233)
球的观测顺序为:
red,white,red
盒子最可能的隐藏状态顺序为:
box3,box3,box3