理解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算法 能够把非对称加密算法里的公钥想象成一个带锁的箱子,把私钥想象成一把钥匙 能够把对称加密算法里的密钥想象 ...
随机推荐
- shell脚本三剑客之awk
shell脚本之awk命令 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具 适合小型文本数据 1.工作原理 2.AWK格式 3.按行输入文本 4.按字段输入文本 5.通过管道符号,双引号调 ...
- 简单的JSON数组转树形结构
function toTree(data) { let result = [] if(!Array.isArray(data)) { return result } data.forEach(item ...
- jquery-easyui环境的搭建及测试
对于软件开发者来说,一个良好的前端框架不仅能够使页面优美可观而且还能够大大的提高开发效率.提高系统整体界面的美观,框架将常用的功能封装完成,减少工作量.前端框架目前也比较多,小编本次主要介绍下easy ...
- C语言中各种输入函数之间的区别
以下内容全部来自Bay(百度百科) scanf的返回值 scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF. 如: scanf("%d%d", &a, ...
- 组合&反射&面向对象内置函数
内容概要 组合 反射 面向对象的内置函数 异常 内容详细 一.组合 组合:在对象中定义一个属性,属性的值是另一个对象 除了继承父类的方法,这是获取另一个类中属性的另一种方式 如果想给学生对象添加课程属 ...
- Solution -「UVA 1104」Chips Challenge
\(\mathcal{Description}\) Link. 在一个 \(n\times n\) 的方格图中,有一些格子已经放了零件,有一些格子可以放零件,其余格子不能放零件.求至多放多少个 ...
- 海盗湾The Pirate Bay:每一名技术人员都应该思考的问题
海盗湾The Pirate Bay:一场互联网技术下没有硝烟的战争 写在前面: 开学啦,返校啦!祝大家新的一年,工作顺顺利利,家庭幸福美满! 正文: 假期的时候,闲来无事,看了几部纪录片,其中< ...
- ReentrantLock与synchronized比较分析
ReentrantLock:完成了Lock接口,是一个可重入锁,并且支持线程公正竞赛和非公正竞赛两种形式,默认情况下对错公正形式.ReentrantLock算是synchronized的补充和替代计划 ...
- Python+selenium自动循环扔QQ邮箱漂流瓶
Python代码如下: # coding=utf-8 from selenium import webdriver from time import sleep from random import ...
- maven项目 mvn clean install 或 build,报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
解决办法 在pom文件中添加