理解HMM算法
长这样:
理解的前提:
(1)状态:生成观测值的变量(上图中的“吃”和“睡”)。
(2)观测值:状态乘上输出概率对应的输出(上图中的橙色节点)。
(3)输出概率:输出概率矩阵里面的某个元素(状态和观测值两层之间的某个权重参数)。
(4)输出概率矩阵:由输出概率组成的矩阵。
(5)bi: 第i个状态(比如”睡“)输出所有观测值对应的概率构成的行向量(上图中所有红线构成的行向量)。
(6)o1:表示我要输出第一个观测值。不是把o1做为自变量输入到bi中,只是一个记号(个人表示没什么用)。
(7)Πi:走 第i个状态的初始概率(p(start->吃)=0.3)。
(8)αi(t):(阿尔法)在给定马尔可夫模型中,到t时刻为止,状态们在t个时刻,每个时刻都由所有状态中的一个输出某个观测值,一共输出了t个观测值观测序列,记为,
,并且t时刻输出Ot的状态为qi(状态用q表示),把出现上述场景的概率记作αi(t),称作前向概率(应该是在做前向计算,所以形象成为”前向概率“)。
(9)aij:(字母a,注意不是阿尔法,在第一张图中的“推导”公式里面的)概率转移矩阵中第i行,第j列对应的概率(今天为第i个状态,明天为第j个状态的概率。网络图示中“吃->吃”、“吃->睡”和“睡->睡”之间连线的数 值)。
(10)转移概率矩阵:如下图A所示。
理解
:
表示第1时刻,第i个状态的初始概率Πi乘以第i个状态对应的输出矩阵的第i行向量。
例如:假设第i个状态为“睡”,那么Πi等于0.7,bi等于[0.3,0.5,0.2],那么第1时刻的状态为“睡”,观测值为“哭”、“没精神”和“找妈妈”的概率分别为0.7*[0.3,0.5,0.2],如果第一时刻的观测值为“哭”,那么α1(t)=0.21.
:
t+1时刻,所有t时刻的前向概率里面按时的t时刻的状态转化为j状态后再乘以j对应的输出概率总和。
以第2时刻为例:状态j为“吃”,那么αj(t+1)表示第二时刻,第二状态为“吃”,观测值序列为的O1O2概率,其等于第1时刻的前向概率αi(t) 乘以 第一时刻的前向概率里面暗示的第一时刻的状态i转化为状态j的概率(aij),i有可能是“吃”,也有可能是“睡”,我们要计算的是第2时刻状态为“吃”的概率,根据马尔可夫模型,第二时刻的“吃”和第一时刻的状态有关,但是我们不知道第一时刻到底是什么状态,所以用概率的方式全部考虑进来。
[0.21,0.03,0.02]*0.1*bjo2(0.1表示“吃1”->“吃2”的概率)+[0.21,0.15,0.14]*0.9*bjo2(0.9表示“睡1”->“吃2”的概率)
乘上转移概率之后,在乘以“吃”对应的输出概率行向量:
[0.021,0.003,0.002]Tx[0.7,0.1,0.2] + [0.189,0.135,0.126]Tx[0.7,0.1,0.2](考虑了所有情况,可能会有点费解,请看下一行)
如果第一时刻的观测值为“哭”,第二时刻的状态为“吃”,观测值为“哭”,那么αj(t+1)=0.21*0.1*0.7=0.0147 + 0.21*.0.9*0.7=0.1323.
:
μ:给定的马尔可夫模型。
O:1-T+1时刻的观测值序列。
在马尔可夫模型μ中,输出序列O的概率为:输出O并且T+1时刻的状态为qi的概率综合。
本文截图部分来自:隐马尔科夫模型(HMM)一前向与后向算法 - 知乎 (zhihu.com)
理解HMM算法的更多相关文章
- 深入理解KMP算法
前言:本人最近在看<大话数据结构>字符串模式匹配算法的内容,但是看得很迷糊,这本书中这块的内容感觉基本是严蔚敏<数据结构>的一个翻版,此书中给出的代码实现确实非常精炼,但是个人 ...
- KMP算法详解 --- 彻头彻尾理解KMP算法
前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k. 但是问题在于如何求出这个最大前后缀长度呢? 我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破, 后来翻看 ...
- 一步一步理解Paxos算法
一步一步理解Paxos算法 背景 Paxos 算法是Lamport于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后重新发表到 TOCS ...
- 简单的理解deflate算法
简单的理解deflate算法 最近做压缩算法. 用到了deflate压缩算法, 找了很多资料, 这篇文章算是讲的比较易懂的, 这篇文章不长,但却浅显易懂, 基本上涵盖了我想要知道的所有要点. 翻译 ...
- 理解 KMP 算法
KMP(The Knuth-Morris-Pratt Algorithm)算法用于字符串匹配,从字符串中找出给定的子字符串.但它并不是很好理解和掌握.而理解它概念中的部分匹配表,是理解 KMP 算法的 ...
- 理解DeepBox算法
理解DeepBox算法 基本情况 论文发表在ICCV2015,作者是Berkeley的博士生Weicheng Kuo: @inproceedings{KuoICCV15DeepBox, Author ...
- 如何感性地理解EM算法?
https://www.jianshu.com/p/1121509ac1dc 如果使用基于最大似然估计的模型,模型中存在隐变量,就要用EM算法做参数估计.个人认为,理解EM算法背后的idea,远比看懂 ...
- uva11383 Golden Tiger Claw 深入理解km算法
/** 题目: uva11383 Golden Tiger Claw 深入理解km算法 链接:https://vjudge.net/problem/UVA-11383 题意:lv 思路:lrj训练指南 ...
- 怎么理解RSA算法
原文地址:http://www.ittenyear.com/414/rsa/ 怎么理解RSA算法 能够把非对称加密算法里的公钥想象成一个带锁的箱子,把私钥想象成一把钥匙 能够把对称加密算法里的密钥想象 ...
随机推荐
- python unittest控制用例的执行顺序
为什么要进行顺序控制呢?使用过testng的同学就知道,它相对于junit来说有更强大的功能,其中的一个功能就是依赖测试.什么是依赖测试呢?简单的说一下就是,A方法运行时,其中有个变量的取值是B方法的 ...
- 它来了,那个最帅的男人来了 Linux常用命令精华讲解 中部
Linux 相对于上部,今天这些内容有点干巴 -ls 列表显示目录内容 -alias 设置别名 -du 统计目录及文件空间占用情况 -mkdir 创建新目录 - ...
- mybatis的一对多(collection)
使用图解: 低效率查询: 高效率查询: 1 查询用联合查询 2<collection 里面不写column
- 解决"Uncaught (in promise) Error: Navigation cancelled from "/" to "/login" with a new navigation"报错处理
Uncaught (in promise) Error: Navigation cancelled from "/" to "/login" with a ne ...
- Linux爱情故事之如何以不一样的姿势(ssh)进入她的心
文章目录 1.ssh是谁,为什么要进入她的心 2.如何正确的扒拉ssh 2.1.ssh的常用参数 2.2.您配钥匙吗?(ssh生成公钥或者秘钥) 2.3.我要单向畅通无阻的进入你的心(ssh-copy ...
- 微服务从代码到k8s部署应有尽有系列(六、订单服务)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- Spring是什么? 核心总结
Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情. 然而,Spring ...
- 【C#基础概念】 里氏转换-as/is
里氏转换 子类可以赋值给父类.(如果有一个地方需要一个父类作为参数,我们可以给一个子类 ) 如果父类中装的是子类对象,那么可以将这个父类强转为子类对象. 创建几个类帮助我们理解: using Syst ...
- Oracle之SQL限定查询
WHERE限定条件 /*语法结构:SELECT * | 列名1[,列名2...] | 表达式FROM 表名 WHERE 限定条件; */ --查询职位为CLERK的员工信息 SELECT * FROM ...
- XStart远程连接Linux图形化界面
转至:https://zhuanlan.zhihu.com/p/337791712 场景: 因在Linux中安装Oracle11g 需要调用Oracle的图形化界面,此时在宿主机上安装了 Xmanag ...