热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

HMM轻松理解1

1.HMM解码问题—最笨解法如图,已知了HMM的参数θ(π,A,B)和观测序列X(x1,x2,x3,…xn),寻找最佳的状态序列Z(z1,z2,z3,

1.HMM解码问题 —最笨解法

如图,已知了HMM的参数 θ (π, A, B) 和观测序列 X(x1,x2,x3,…xn),寻找最佳的状态序列 Z(z1,z2,z3,…,zn)
在这里插入图片描述
其中:π 是初始状态概率向量, A 是状态转移矩阵, B 是观测概率矩阵
最笨的解法 :求使 likelyhood 最大的状态序列
假设每个隐状态可取 {a, b, c}, 那么状态序列的组合就有 3^n 次方种,假设其中 3 种 (只考虑 n=5 时)为:
Z1 = (a, b, b, c, a)
Z2 = (b, c, a, b, c)
Z3 = (a, a, c, b ,b)
那么计算 Zi的 likelyhood 为P(Zi):(概率值包括两部分,一部分是转移概率,一部分是观测概率)
P(Z1) = p(a) * p(b|a) * p(b | b) * p(c|b ) * p(a |c) * p( x1 | a) * p(x2|b) * p(x3 | b) *p(x4|c) *p(x5| a)
P(Z1) = p(b) * p(c|b) * p(a | c) * p(b|a ) * p(c |b) * p( x1 | b) * p(x2| c) * p(x3 | a) *p(x4| b) *p(x5| c)
P(Z1) = p(a) * p(a|a) * p(c | a) * p(b|c ) * p(b |b) * p( x1 | a) * p(x2| a) * p(x3 | c) *p(x4| b) *p(x5 | b)
由于 θ (π, A, B)都是已知的,所以上式中所有概率都可以计算出来;
我们只需要选择使 P(Zi) 最大的 Zi 就行了,但这是指数级复杂度,不可能求解出来,所以使用威特比算法

2.HMM的解码问题 —维特比算法


2.1 维特比算法条件

维特比算法只适用于链式结构,即当前的隐藏状态只依赖与上一时刻的隐藏状态,而不能依赖于 上两个隐藏状态或下一个隐藏状态等…
维特比算法开始前都会画一个图
在这里插入图片描述
图中:Zi 是隐藏状态,m 是状态的所有可能取值 类似于上文提到的{ a, b , c …}

2.2 维特比算法

定义:δ_k(i) 是到 第 K 时刻,状态为 i 的最佳路径的score,score值就是 likelyhood值,只不过会取 log ,将乘法变成加法, 避免计算机溢出。
我们现在要求: δ_k+1(i) = ?
如图所示:假设 绿色的点 为δ_k+1(j),那么它有可能来自 δ_k(1), δ_k(2),δ_k(3),…δ_k(m)
在这里插入图片描述
所以
在这里插入图片描述
如何计算上面的式子呢?
可以创建一个 M x N 列的表格,M表示可能的状态取值,N代表每一个时刻;
然后一列一列的去填充这个表格,表格中的第一列根据 π, B 的值来填充,其他列的计算就要用到 π, A, B了。比如第一列第一个的值为:
在这里插入图片描述
填充完表格之后,找出最后一列最大值score对应的影藏状态,然后从后往前推出其他隐藏状态,因为我们在填充每一列时会记录当前值是由之前哪一条路径得来的。

3. HMM的 F/B算法


3.1 定义

F/B 算法: Forward and Backward 算法
F : Forward 算法
B :Backward算法
F/B: 目标是计算 P (Zk | X) ,即给定状态序列 X, 求 k 时刻处于隐藏状态Zk 的概率
F :目标是计算联合概率 P( Zk, X1:k) ,即求 k 时刻处于隐藏状态Zk,且 k 时刻之前的观测值为 X1,X2,X3,…,Xk
B:目标是计算条件概率 p( Xk+1:n | Zk),即求 在k 时刻处于隐藏状态Zk 的条件下,在k 时刻之后观测值为 Xk+1, Xk+2, Xk+3, …Xk+n 的概率
X1:k 表示 X1, X2, X3, …,Xk
Xk+1:n 表示 Xk+1, Xk+2, Xk+3,…, Xk+n

3.2 公式推导


引入:马尔科夫假设

  1. 齐次马尔科夫性假设:即假设隐藏的马尔科夫链在任意时刻t的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关;
  2. 观测独立性假设:即假设任意时刻的观测只依赖于该时刻的隐藏状态,与其他观测和隐藏状态无关

公式推导

在这里插入图片描述
上式只是计算了 P(Zk, X),若要计算 P(Zk | X) 还必须 进行归一化,即
在这里插入图片描述

F/B 的作用:

  1. 估计模型参数

  2. 判断两个图(或观测)之间是否发生突变,一种方法计算两种图的相似度,如果小于某个设定的阈值,则认为这两张图发生了突变,可用于风险控制。另一种方法是看隐状态,假如隐状态可能取值 {0,1}, 正常的状态序列为 0 -->0 --> 0 --> …, 如果发生突变则会变为 0 --> 0—> 0 —> 1 —>0 ----> 0 …

在这里插入图片描述

4. Forward 算法

目的:计算 P(Zk, X1:k) 概率
方法:动态规划
idea:构建一个概率,使它包含 P(Zk, X1:k) 的子问题 P(Zk-1, X1:k-1) ,类似于下图
在这里插入图片描述
观测左右两边变量不一样,左边没有Zk-1,为了引入这个变量,我们需要做边缘化处理,也就是变成联合概率
在这里插入图片描述
我们要时刻记住这是一个动态规划的算法,那么我们是要保留 P(Zk-1, X1:k-1) 这一项的,所以在此基础上拆解联合概率分布
推导过程如下:用到了马尔科夫的两个假设
在这里插入图片描述
动态规划必须有第一项才能迭代下去
在这里插入图片描述

5. backward算法

目标: 计算条件概率 P( Xk+1:n | Zk)
方法:动态规划
idea:由于是后项,子问题是 P( Xk+2:n | Zk+1)
在这里插入图片描述

观测左右两边变量不一样,左边条件是Zk,而右边是Zk+1,为了引入这个变量,我们需要做边缘化处理,也就是变成联合概率
在这里插入图片描述

算法复杂度

因为Zk+1 有 m 个可能的取值,∑ 相当于要循环 m 次,而 (Zk)也有 m 种可能取值;k 是某一时刻,而要计算完整个序列,长度是为 n 的,所以复杂度为
在这里插入图片描述
前向算法与后向算法复杂度一样

通过F/B可以得到了 P(Zk | X)

如何基于 P(Zk | X ) 去估计HMM的参数 θ (π, A, B),请听下回分解- -


推荐阅读
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 深入解析 HDFS Federation:多命名空间架构详解
    HDFS Federation 是一种扩展 HDFS 架构的方式,通过引入多个独立的 NameNode 来解决单点故障和性能瓶颈问题。本文将详细探讨 HDFS Federation 的工作原理、优势以及潜在挑战。 ... [详细]
  • IT项目管理过程中的方法、工具、技术
    工欲善其事,必先利其器。而对于一个软件开发项目,最重要的器就是方法,工具和技术。而这三要素中重要的又是方法论,方法是基础&# ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
author-avatar
笃志单车小博_801
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有