隐马尔可夫模型(HMM) |前向算法 |一个简单的例子说清计算过程 |一般步骤总结

本文主要是介绍隐马尔可夫模型(HMM) |前向算法 |一个简单的例子说清计算过程 |一般步骤总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如是我闻: 本文通过一个简单的例子来详细说明隐马尔可夫模型(HMM)的前向算法

我们求解的问题类型是:给定模型及观测序列计算其出现的概率

隐马尔可夫模型由三个主要部分组成:

  1. 隐藏状态集合
  2. 观测状态集合
  3. 以及三个概率矩阵(状态转移概率矩阵、观测概率矩阵、和初始状态概率向量)

1. 示例说明

假设有一个简化的天气模型,其中隐藏状态是“晴朗”(Sunny)和“雨天”(Rainy),观测状态是“干燥”(Dry)和“湿润”(Wet)。

  • 隐藏状态集合:S = {Sunny, Rainy}
  • 观测状态集合:O = {Dry, Wet}

我们定义以下概率:

  • 初始状态概率向量(π):P(Sunny) = 0.8, P(Rainy) = 0.2
  • 状态转移概率矩阵(A):
SunnyRainy
Sunny0.70.3
Rainy0.40.6
  • 观测概率矩阵(B):
DryWet
Sunny0.90.1
Rainy0.30.7

1.1 任务

给定观测序列:O = {Dry, Wet},计算这个观测序列出现的概率。

2.解决过程

2.1前向算法概述

前向算法通过递归的方式计算每个时间点上所有隐藏状态的前向概率。前向概率α是给定模型参数和观测序列直到当前时间点的所有观测值条件下,隐藏状态为某状态的概率。那么前向概率是什么呢

2.2 前向算法中的前向概率(这个是重点,明白前向概率就明白前向算法)

在隐马尔可夫模型(HMM)中,α(前向概率)代表了在给定模型参数和到当前时间点为止的观测序列的条件下,序列处于某一特定隐藏状态的概率。具体来说,对于时间点t的状态i, α t ( i ) α_t(i) αt(i)表示从序列开始到时间点t观察到特定观测序列,并且在时间点t处于状态i的联合概率。这个概念是通过结合初始状态概率、状态转移概率,以及观测概率来计算得出的。

2.3示例计算过程

给定的观测序列O = {Dry, Wet},我们如何使用前向算法计算其概率?

2.3.1初始化

对于第一个观测“Dry”,我们计算每个隐藏状态的前向概率 α 1 ( i ) α_1(i) α1(i)

  • α 1 ( S u n n y ) = π ( S u n n y ) ⋅ B ( S u n n y ∣ D r y ) = 0.8 ∗ 0.9 = 0.72 α_1(Sunny) = π(Sunny) \cdot B(Sunny|Dry) = 0.8 * 0.9 = 0.72 α1(Sunny)=π(Sunny)B(SunnyDry)=0.80.9=0.72
  • α 1 ( R a i n y ) = π ( R a i n y ) ⋅ B ( R a i n y ∣ D r y ) = 0.2 ∗ 0.3 = 0.06 α_1(Rainy) = π(Rainy) \cdot B(Rainy|Dry) = 0.2 * 0.3 = 0.06 α1(Rainy)=π(Rainy)B(RainyDry)=0.20.3=0.06

实际上要是把 α 1 ( S u n n y ) α_1(Sunny) α1(Sunny) α 1 ( R a i n y ) α_1(Rainy) α1(Rainy)相加,得到就是t=1的时刻下,观测是Dry的概率

2.3.2递归

接下来,我们使用前一步的前向概率来计算第二个观测“Wet”时,每个隐藏状态的前向概率 α 2 ( i ) α_2(i) α2(i)

  • α 2 ( S u n n y ) = [ α 1 ( S u n n y ) ⋅ A ( S u n n y ∣ S u n n y ) + α 1 ( R a i n y ) ⋅ A ( S u n n y ∣ R a i n y ) ] ⋅ B ( S u n n y ∣ W e t ) = [ 0.72 ⋅ 0.7 + 0.06 ⋅ 0.4 ] ⋅ 0.1 = ( 0.504 + 0.024 ) ⋅ 0.1 = 0.0528 α_2(Sunny) = [α_1(Sunny) \cdot A(Sunny|Sunny) + α_1(Rainy) \cdot A(Sunny|Rainy)] \cdot B(Sunny|Wet) = [0.72 \cdot 0.7 + 0.06 \cdot 0.4] \cdot 0.1 = (0.504 + 0.024) \cdot 0.1 = 0.0528 α2(Sunny)=[α1(Sunny)A(SunnySunny)+α1(Rainy)A(SunnyRainy)]B(SunnyWet)=[0.720.7+0.060.4]0.1=(0.504+0.024)0.1=0.0528
  • α 2 ( R a i n y ) = [ α 1 ( S u n n y ) ⋅ A ( R a i n y | S u n n y ) + α 1 ( R a i n y ) ⋅ A ( R a i n y ∣ R a i n y ) ] ⋅ B ( R a i n y ∣ W e t ) = [ 0.72 ⋅ 0.3 + 0.06 ⋅ 0.6 ] ⋅ 0.7 = ( 0.216 + 0.036 ) ⋅ 0.7 = 0.1764 α_2(Rainy) = [α_1(Sunny) \cdot A(Rainy|Sunny) + α_1(Rainy) \cdot A(Rainy|Rainy)] \cdot B(Rainy|Wet) = [0.72 \cdot 0.3 + 0.06 \cdot 0.6] \cdot 0.7 = (0.216 + 0.036)\cdot 0.7 = 0.1764 α2(Rainy)=[α1(Sunny)A(RainySunny)+α1(Rainy)A(RainyRainy)]B(RainyWet)=[0.720.3+0.060.6]0.7=(0.216+0.036)0.7=0.1764
2.3.3终止

观测序列的总概率是最后一个观测的所有前向概率之和:

  • 总概率 = α 2 ( S u n n y ) + α 2 ( R a i n y ) = 0.0528 + 0.1764 = 0.2292 α_2(Sunny) + α_2(Rainy) = 0.0528 + 0.1764 = 0.2292 α2(Sunny)+α2(Rainy)=0.0528+0.1764=0.2292

结果非常amazing啊,这与我们通过暴力方法计算的结果相同。但是前向算法的效率更高,特别是在处理长观测序列时。

3.前向算法的一般步骤总结:

  1. 初始化:对于每个状态i,计算第一个观测的前向概率 α 1 ( i ) α_1(i) α1(i)
  2. 递归:对于每个后续的时间点t和每个状态i,更新 α t ( i ) α_t(i) αt(i)
  3. 终止:计算给定观测序列出现的概率,即最后一个时间点的所有前向概率之和。

前向算法不仅提高了计算效率,而且是理解更复杂HMM算法(如Baum-Welch算法和维特比算法)的基础。

通过前向算法,我们能够以更高效的方式解决给定观测序列在特定HMM下出现概率的计算问题,使其在实际应用中更为可行,特别是在序列较长或状态空间较大的情况下

大家一定要理解前向概率啊

非常的有品

以上

这篇关于隐马尔可夫模型(HMM) |前向算法 |一个简单的例子说清计算过程 |一般步骤总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811175

相关文章

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

用Java打造简易计算器的实现步骤

《用Java打造简易计算器的实现步骤》:本文主要介绍如何设计和实现一个简单的Java命令行计算器程序,该程序能够执行基本的数学运算(加、减、乘、除),文中通过代码介绍的非常详细,需要的朋友可以参考... 目录目标:一、项目概述与功能规划二、代码实现步骤三、测试与优化四、总结与收获总结目标:简单计算器,设计

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1