HMM模型-----学习笔记整理

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...,xi2,xi1,xi)=P(xi+1xi)
既然某一时刻状态转移的概率只依赖前一个状态,那么只要求出系统中任意两个状态之间的转移概率,这个马尔科夫链的模型就完了

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值