隐马尔可夫模型(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

相关文章

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型