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

相关文章

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应