【ML-13-2】隐马尔科夫模型HMM--前向后向算法

【ML-13-1】隐马尔科夫模型HMM

【ML-13-2】隐马尔科夫模型HMM--前向后向算法

【ML-13-3】隐马尔科夫模型HMM--Baum-Welch(鲍姆-韦尔奇)

【ML-13-4】隐马尔科夫模型HMM--预测问题Viterbi(维特比)算法

目录

  1. 引言
  2. 直接计算
  3. 前向算法
  4. 前向算法实例
  5. 后向算法
  6. HMM常用概率的计算

一、引言

在【ML-13-1】隐马尔科夫模型HMM中,我们讲到了HMM模型的基础知识和HMM的三个基本问题,本篇我们就关注于HMM第一个基本问题的解决方法。即给定模型λ=(A,B,π)和观测序列Q={q1,q2,...,qT},计算模型 λ 下观测到序列Q出现的概率P(Q|λ)

前向概率-后向概率指的其实是在一个观测序列中,时刻t对应的状态为si的概率值转换过来的信息。

下图中(隐含用q表示,观测用y表示),前者为前向概率(所有的1-t的观测状态和t时刻的隐含状态),后者为后向概率

二、直接计算

按照概率公式,列举所有可能的长度为T的状态序列I={i1,i2,...,iT},求各个状态序列I与观测序列Q={q1,q2,...,qT}的联合概率P(Q,I;λ),然后对所有可能的状态序列求和,从而得到最终的概率P(Q;λ)

    前向后向算法就是来帮助我们在较低的时间复杂度情况下求解这个问题的。

三、前向算法

前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率。我们先来看看前向算法是如何求解这个问题的。

  前向算法本质上属于动态规划的算法,也就是我们要通过找到局部状态递推的公式,这样一步步的从子问题的最优解拓展到整个问题的最优解。

定义:给定λ,定义到时刻t部分观测序列为q1,q2,...,qt且隐含状态为si的概率为前向概率。记做:

其中推导过程如下,也可以自己进行理解:在t+1时刻的i状态,可能是由每一个状态经过变换而来

从递推公式可以看出,我们的算法时间复杂度是O(TN^2),比暴力解法的时间复杂度O(TN^T)少了几个数量级。

四、前向算法实例

4.1 例题

假设有三个盒子,编号为1,2,3;每个盒子都装有黑白两种颜色的小球,球的比例如下:

按照下列规则的方式进行有放回的抽取小球,得到球颜色的观测序列:

  1. 按照π的概率选择一个盒子,从盒子中随机抽取出一个小球,记录颜色后,放回盒子中;
  2. 按照某种条件概率选择新的盒子,重复该操作;
  3. 最终得到观测序列:"白黑白白黑
  • 状态集合:S={盒子1,盒子2,盒子3}
  • 观测集合:O={白,黑}
  • 状态序列和观测序列的长度T=5
  • 初始概率分布π
  • 状态转移概率矩阵A
  • 观测概率矩阵B

在给定参数π、A、B的时候,得到观测序列为"白黑白白黑"的概率是多少??注意在这个过程中,观察者只能看到球的颜色序列,却不能看到球是从哪个盒子里取出的。

4.2 计算过程

得到最终的结果:

五、后向算法

  熟悉了用前向算法求HMM观测序列的概率,现在看看怎么用后向算法求HMM观测序列的概率。

后向算法和前向算法非常类似,都是用的动态规划,唯一的区别是选择的局部状态不同,后向算法用的是"后向概率",那么后向概率是如何定义的呢?

定义:给定λ,定义到时刻t状态为si的前提下,从t+1到T部分观测序列为qt+1,qt+2,...,qT的概率为后向概率。记做:

推导:

根据这个式子,同样可以算出上节中的概率,求得得结果一样得,本文不再举例。

六、HMM常用概率的计算

 利用前向概率和后向概率,我们可以计算出HMM中单个状态和两个状态的概率公式。

6.1 单个状态的概率

求给定模型λ和观测序列Q的情况下,在时刻t处于状态si的概率,记做:

单个状态概率的意义主要是用于判断在每个时刻最可能存在的状态,从而可以得到一个状态序列作为最终的预测结果。

利用前向概率和后向概率的定义可知:

由上面两个表达式可知:

6.2 两个状态的联合概率

求给定模型λ和观测序列Q的情况下,在时刻t处于状态si并时刻t+1处于状态sj概率,记做:

6.3 上述两种求和可以得到:

附件一:前向概率


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58


# --encoding:utf-8 --

"""课堂上实现的一个计算HMM模型中前向概率的一个算法实现(前向算法)"""

import numpy as np

def calc_alpha(pi, A, B, Q, alpha):

"""

计算前向概率alpha,并将结果保存到alpha矩阵中(T*n)

:param pi: 1*n

:param A: n*n

:param B: n*m

:param Q: 1*T => T的数组

:param alpha: T*n

:return: alpha

"""

# 1. 获取相关的变量信息

n = np.shape(A)[0]

T = np.shape(Q)[0]

# 2 更新t=1时刻的前向概率值

for i in range(n):

alpha[0][i] = pi[i] * B[i][Q[0]]

# 3. 更新t=2... T时刻对应的前向概率值

tmp = np.zeros(n)

for t in range(1, T):

# 迭代计算t时刻对应的前向概率值

for i in range(n):

# 计算时刻t状态为i的前向概率

# a. 计算上一个时刻t-1累计到当前状态i的概率值

for j in range(n):

tmp[j] = alpha[t - 1][j] * A[j][i]

# b. 更新时刻t对应状态i的前向概率值

alpha[t][i] = np.sum(tmp) * B[i][Q[t]]

# 4. 返回结果

return alpha

if __name__ == ‘__main__‘:

# 测试

pi = np.array([0.2, 0.5, 0.3])

A = np.array([

[0.5, 0.4, 0.1],

[0.2, 0.2, 0.6],

[0.2, 0.5, 0.3]

])

B = np.array([

[0.4, 0.6],

[0.8, 0.2],

[0.5, 0.5]

])

# 白,黑,白,白,黑

Q = [0, 1, 0, 0, 1]

alpha = np.zeros((len(Q), len(A)))

# 开始计算

calc_alpha(pi, A, B, Q, alpha)

# 输出最终结果

print(alpha)

# 计算最终概率值:

p = 0

for i in alpha[-1]:

p += i

print(Q, end="->出现的概率为:")

print(p)

结果:

[[0.08 0.4 0.15 ]

[0.09 0.0374 0.1465 ]

[0.032712 0.093384 0.037695 ]

[0.01702872 0.04048728 0.03530505]

[0.0142037 0.00651229 0.01829338]]

[0, 1, 0, 0, 1]->出现的概率为:0.03900936690000001

附件一:手写练习

原文地址:https://www.cnblogs.com/yifanrensheng/p/12684727.html

时间: 2024-10-14 03:00:13

【ML-13-2】隐马尔科夫模型HMM--前向后向算法的相关文章

隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO) 在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇里会用到.在李航的<统计学习方法>中,这个算法的讲解只考虑了单个观测

七月算法-12月机器学习在线班--第十七次课笔记-隐马尔科夫模型HMM

七月算法-12月机器学习--第十七次课笔记-隐马尔科夫模型HMM 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 隐马尔科夫模型 三个部分:概率计算,参数估计,模型预测 1,HMM定义 HMM由初始概率分布π.状态转移概率分布A以及观测概率分布B确定. Eg:以中文分词为例子 隐状态为="2",是不是终止字,是/否?(Y/N)即是不是最后一个字. A矩阵:第一个:当前是终止字,下一个也是终止字的概率 B是当前的隐状态是终止词,

隐马尔科夫模型HMM

隐马尔科夫模型HMM 作者:樱花猪 摘要: 本文为七月算法(julyedu.com)12月机器学习第十七次课在线笔记.隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔科夫过程.其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析.在早些年HMM模型被非常广泛的应用,而现在随着机器学习的发展HMM模型的应用场景越来越小然而在图像识别等领域HMM依然起着重要的作用. 引言: 隐马尔科夫模型是马尔科夫链的一种,它

隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO) 在隐马尔科夫模型HMM(一)HMM模型中,我们讲到了HMM模型的基础知识和HMM的三个基本问题,本篇我们就关注于HMM第一个基本问题的解决方法,即已知模型和观测序列,求观测序列出现的概率. 1. 回顾HMM问题一:求观测序列的概率 首先我们回顾下HMM模型的问题一.这个

隐马尔科夫模型HMM(一)HMM模型

隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率(TODO) 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO) 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用.当然,随着目前深度学习的崛起,尤其是RNN,LSTM等神经网络序列模型的火热,HMM的地位有所下

隐马尔科夫模型 HMM(Hidden Markov Model)

本科阶段学了三四遍的HMM,机器学习课,自然语言处理课,中文信息处理课:如今学研究生的自然语言处理,又碰见了这个老熟人: 虽多次碰到,但总觉得一知半解,对其了解不够全面,借着这次的机会,我想要直接搞定这个大名鼎鼎的模型,也省着之后遇到再费心. Outline 模型引入与背景介绍 从概率图讲起 贝叶斯网络.马尔科夫模型.马尔科夫过程.马尔科夫网络.条件随机场 HMM的形式化表示 Markov Model的形式化表示 HMM的形式化表示 HMM的两个基本假设 HMM的三个基本问题 Evalution

【ML-13-1】隐马尔科夫模型HMM

[ML-13-1]隐马尔科夫模型HMM [ML-13-2]隐马尔科夫模型HMM--前向后向算法 [ML-13-3]隐马尔科夫模型HMM--Baum-Welch(鲍姆-韦尔奇) [ML-13-4]隐马尔科夫模型HMM--预测问题Viterbi(维特比)算法 目录 基础知识-马尔可夫链 HMM简介 HMM定义 HMM模型的三个基本问题 举例 一.基础知识-马尔可夫链 1.1 马尔可夫性质 设{X(t), t ∈ T}是一个随机过程,E为其状态空间,若对于任意的t1<t2< ...<tn<

隐马尔可夫模型HMM与维特比Veterbi算法(一)

隐马尔可夫模型HMM与维特比Veterbi算法(一) 主要内容: 1.一个简单的例子 2.生成模式(Generating Patterns) 3.隐藏模式(Hidden Patterns) 4.隐马尔可夫模型(Hidden Markov Model) 一.一个简单的例子 考虑一个简单的例子,有人试图通过一片海藻推断天气--民间传说告诉我们'湿透的'海藻意味着潮湿阴雨,而'干燥的'海藻则意味着阳光灿烂.如果它处于一个中间状态('有湿气'),我们就无法确定天气如何.然而,天气的状态并没有受限于海藻的

隐马尔可夫模型HMM与维特比Veterbi算法(二)

隐马尔可夫模型HMM与维特比Veterbi算法(二) 主要内容: 前向算法(Forward Algorithm) 穷举搜索( Exhaustive search for solution) 使用递归降低问题复杂度 前向算法的定义 程序实现前向算法 举例说明前向算法 一.前向算法(Forward Algorithm) 目标:计算观察序列的概率(Finding the probability of an observed sequence) 1. 穷举搜索( Exhaustive search fo

隐马尔科夫模型(HMM)

基本概念 1Markov Models 2Hidden Markov Models 3概率计算算法前向后向算法 1-3-1直接计算 1-3-2前向算法 1-3-3后向算法 4学习问题Baum-Welch算法也就是EM算法 5预测算法 基本概念 1.1Markov Models 处理顺序数据的最简单的方式是忽略顺序的性质,将观测看做独立同分布,然而这样无法利用观测之间的相关性.例如:预测下明天是否会下雨,所有数据看成独立同分布只能得到雨天的相对频率,而实际中,我们知道天气会呈现持续若干天的趋势,观