HMM——维特比算法(Viterbi algorithm)
1. 前言
维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列:
对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列。
也就是说给定了HMM的模型参数和一个观测序列,计算一系列的隐状态,使得此观察序列的出现可能最大,即最大化P(隐状态 | 观测序列),给定观测序列,求最可能的对应的隐状态序列。
实际上解决此问题,在《统计学习方法》中给出了两种解法,一个是近似算法,另一个就是维特比算法(Viterbi algorithm)
2. 近似算法
思路:计算每一时刻最有可能出现的隐状态,从而得到一个状态序列作为预测结果。
算法:给定HMM模型参数λ和观测序列O,在时刻 t 处于状态qi的概率是:
则每一时刻t 最有可能的状态是
感觉很类似于贪婪算法,每一个时间点计算一次,取最大的。
优点是计算简单;而缺点就很明显了,没有考虑时序关系,不能保证预测的状态序列整体上是最优可能的状态序列,预测的状态序列可能有实际不发生的部分。
3. 维特比算法
利用动态规划求解概率最大的路径,一条路径一个状态序列。
动态规划求解最优路径专责:如果最优路径在某时刻t 通过节点i,那么这条路径从节点 i 到终点的部分路径,在节点 i 到终点的路径中,必须是最优的。
通过这种原理就可以从t=1时刻开始,不断向后递推到下一个状态的路径的最大概率,直到在最后到达最终的最优路径终点,然后依据终点回溯到起始点,这样就能得到最优路径。
具体过程:(《李航统计学习》)
输入:模型参数λ和观测序列
输出:最优的隐状态路径
(1) 第一层所有的N中状态概率
(2) 逐渐递推到t=2,3,...,.T
第一个式子是记录递推到 t 时刻时候,最优路径经过的所有结点的联合概率。
第二个式子是记录到底到达的是哪个节点,即 t 时刻的哪个隐状态
其实这一步说白了计算时间和前向计算差不多,只不过把前向计算的状态加和换成了取max值
(3) 终止
(4) 回溯最优路径,t= T-1,T-2,...,1
4. 维特比算法实例
4.1 天气的实例
摘自知乎上的一个实例:https://www.zhihu.com/question/20962240
这张图就告诉了我们HMM的模型参数
初始概率π=[ 0.6 0.4]
转移概率(天气(隐状态)之间互相转移)
rain sun
rain 0.7 0.3
sun 0.4 0.6
混淆矩阵(每种天气(隐状态)对应行为(可观测)的概率)
walk shop clean
rain 0.1 0.4 0.5
sun 0.6 0.3 0.1
已知模型参数,以及三天的行为(walk,shop,clean)
求解:三天对应最可能的天气状态
解答:
【注】δ的下标不是代表第几天,而是当前天的第几个隐状态,注意,下面的每天的第二个δ下标都写错了,应该是δ2,因为不是用markdown写的,懒得改了,自己推导注意一下
①首先初始化,对于每一个天气状态,求当天对应行为的概率
初始化,即第一天不用找最大值,因为第一天哪里知道最可能的路径,路径是链接两个节点的,一个节点无法称为路径
②第一天到达第二天的路径概率
③第二天到第三天的路径概率
④回溯
找到最后一天最大的概率
发现第三天对应第一个状态的概率最大,而且此概率通过③中的ψ1是第二天的第一个状态ψ1到达第三天的第一个状态得到的,所以第二天对应的应该是第一个状态。
而到达第二天的第一个状态的最大概率是第一天的第二个状态,通过②中的ψ1能够看出来。
所以合起来就是第一天的第二个状态->第二天的第一个状态->第三天的第一个状态
即三天天气应该是(sun,rain,rain)
4.2 球与盒子的实例
依旧是前向算法中选择的实例,摘自《李航统计学习》
已知:三个盒子是隐状态,球的颜色是观测序列(红、白、红)
转移矩阵
1 2 3
1 0.5 0.2 0.3
2 0.3 0.5 0.2
2 0.2 0.3 0.5
混淆矩阵
red white
1 0.5 0.5
2 0.4 0.6
3 0.7 0.3
初始概率:π=(0.2,0.4,0.4)
解答过程:
①初始化,拿到红球
②第二次 拿到白球的时候,路径概率
谢谢@征途开始 指出的问题,之前这里的公式写错了,排版的时候上传图片搞错了
③第三次拿到红球时候,路径概率
④通过第三次拿的ψ ,找第三次拿最大的概率:ψ3=0.0147
对应的是第三个隐状态,然后看它对应从第二条路径中的哪一个转移过来的,看③中的ψ3=3,说明是第二个路径的第三个状态
然后查看第二个路径第三个状态对应的是从第一个状态的哪一个转移过来的,看②中的ψ3=3,说明是第一个路径的第三个状态
综上,隐状态的转移过程为(3,3,3)
---------------------
作者:风翼冰舟
来源:CSDN
原文:https://blog.csdn.net/zb1165048017/article/details/48578183
版权声明:本文为博主原创文章,转载请附上博文链接!
HMM——维特比算法(Viterbi algorithm)的更多相关文章
- Java实现:抛开jieba等工具,写HMM+维特比算法进行词性标注
一.前言:词性标注 二.经典维特比算法(Viterbi) 三.算法实现 四.完整代码 五.效果演示: 六.总结 一.前言:词性标注 词性标注(Part-Of-Speech tagging, POS t ...
- 【机器学习】【条件随机场CRF-2】CRF的预测算法之维特比算法(viterbi alg) 详解 + 示例讲解 + Python实现
1.CRF的预测算法条件随机场的预测算法是给定条件随机场P(Y|X)和输入序列(观测序列)x,求条件概率最大的输出序列(标记序列)y*,即对观测序列进行标注.条件随机场的预测算法是著名的维特比算法(V ...
- 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...
- 维特比算法(Viterbi Algorithm)
寻找最可能的隐藏状态序列(Finding most probable sequence of hidden states) 对于一个特殊的隐马尔科夫模型(HMM)及一个相应的观察序列,我们常常希望 ...
- viterbi维特比算法和隐马尔可夫模型(HMM)
隐马尔可夫模型(HMM) 原文地址:http://www.cnblogs.com/jacklu/p/7753471.html 本文结合了王晓刚老师的ENGG 5202 Pattern Recognit ...
- HMM模型学习笔记(维特比算法)
维特比算法(Viterbi) 维特比算法 编辑 维特比算法是一种动态规划算法用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中.术语“维特比 ...
- 维特比算法(Viterbi)-实例讲解(暴力破解+代码实现)
1.简介 维特比算法是一个通用的求序列最短路径的动态规划算法,也可以用于很多其他问题,比如:文本挖掘.分词原理.既然是动态规划算法,那么就需要找到合适的局部状态,以及局部状态的递推公式.在HMM中,维 ...
- 维特比算法(Viterbi)
维特比算法(Viterbi) 维特比算法 编辑 维特比算法是一种动态规划算法用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中.术语“维特比路 ...
- Viterbi(维特比)算法在CRF(条件随机场)中是如何起作用的?
之前我们介绍过BERT+CRF来进行命名实体识别,并对其中的BERT和CRF的概念和作用做了相关的介绍,然对于CRF中的最优的标签序列的计算原理,我们只提到了维特比算法,并没有做进一步的解释,本文将对 ...
随机推荐
- TSQL:让监控分析更简单更高效
1. 前言 阿里时序时空数据库TSDB最新推出TSQL,支持标准SQL的语法和函数.用户使用熟悉的SQL,不仅仅查询更简单易用,用户还可以利用SQL强大的功能,实现更加复杂的计算分析. 2. 为什么需 ...
- LUOGU 2593 : [Zjoi2006] 超级麻将
传送门 解题思路 直接爆搜全T..状态数太多了,所以我们考虑贪心+剪枝.贪心:先拿三个连着的,再拿四个一样的,再拿三个一样的,最后拿两个一样的这样的搜索顺序最优,两个的放最后是因为只要这样的一个,三个 ...
- SEO优化步骤
SEO技术并不是简单的几个建议,而是一项需要足够耐心和细致的脑力劳动.大体上,SEO优化主要分为8小步: 1.关键词分析(也叫关键词定位) 这是进行SEO优化最重要的一环,关键词分析包括:关键词关注量 ...
- Python中 sys.argv的用法简明解释
Python中 sys.argv[]的用法简明解释 sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得 ...
- Python3.7.4入门-4模块
4 模块 Python有一种方法可以把定义放在一个文件里,并在脚本或解释器的交互式实例中使用它们.这样的文件被称作 模块 :模块中的定义可以 导入 到其它模块或者 主 模块 模块是一个包含Python ...
- JetBrains 系列软件--操作数据库+centos系统
这系列软件贼强大! 能操作数据库 也能操作centos(linux)系统 由于这系列都有这两个功能,下面以最近常用的JetBrains PhpStorm 2017.2.1 x64来举例子: 一.操作数 ...
- 【JZOJ4745】【NOIP2016提高A组模拟9.3】看电影
题目描述 听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影.可是省常中OI队的同学们共有 N(N >= K)人.于是机智的你想到了一个 ...
- jmeter使用Badboy录制、检查点和参数化
jmeter使用Badboy录制 1.打开Badboy,在地址栏输入需要录制的网址,如:百度首页
- 【NS2】学习点滴
1 $ns duplex-link-op $n2 $n3 queuePos 0.5#此命令用于设置在NAM中显示的队列方向#经测试,发现: # queuePos 0.5表示包从上到下进入队列# que ...
- 在JS中模拟表单的post提交,进行页面的跳转
原文链接:https://blog.csdn.net/jal517486222/article/details/83147761 /* *功能: 模拟form表单的提交 *参数: URL 跳转地址 P ...