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]

转移概率(天气(隐状态)之间互相转移)

 

 rainsun
rain0.70.3
sun0.40.6

混淆矩阵(每种天气(隐状态)对应行为(可观测)的概率)

 

 walkshopclean
rain0.10.40.5
sun0.60.30.1

已知模型参数,以及三天的行为(walk,shop,clean)

求解:三天对应最可能的天气状态

解答:

【注】δ的下标不是代表第几天,而是当前天的第几个隐状态,注意,下面的每天的第二个δ下标都写错了,应该是δ2,因为不是用markdown写的,懒得改了,自己推导注意一下

①首先初始化,对于每一个天气状态,求当天对应行为的概率

初始化,即第一天不用找最大值,因为第一天哪里知道最可能的路径,路径是链接两个节点的,一个节点无法称为路径

②第一天到达第二天的路径概率

③第二天到第三天的路径概率

④回溯

找到最后一天最大的概率

发现第三天对应第一个状态的概率最大,而且此概率通过③中的ψ1是第二天的第一个状态ψ1到达第三天的第一个状态得到的,所以第二天对应的应该是第一个状态。

而到达第二天的第一个状态的最大概率是第一天的第二个状态,通过②中的ψ1能够看出来。

所以合起来就是第一天的第二个状态->第二天的第一个状态->第三天的第一个状态

即三天天气应该是(sun,rain,rain)

4.2 球与盒子的实例

依旧是前向算法中选择的实例,摘自《李航统计学习》

已知:三个盒子是隐状态,球的颜色是观测序列(红、白、红)

转移矩阵

 

 123
10.50.20.3
20.30.50.2
20.20.30.5

混淆矩阵

 

 redwhite
10.50.5
20.40.6
30.70.3


初始概率:π=(0.2,0.4,0.4)
解答过程:

①初始化,拿到红球

②第二次 拿到白球的时候,路径概率

谢谢@征途开始 指出的问题,之前这里的公式写错了,排版的时候上传图片搞错了

③第三次拿到红球时候,路径概率

④通过第三次拿的ψ ,找第三次拿最大的概率:ψ3=0.0147

对应的是第三个隐状态,然后看它对应从第二条路径中的哪一个转移过来的,看③中的ψ3=3,说明是第二个路径的第三个状态

然后查看第二个路径第三个状态对应的是从第一个状态的哪一个转移过来的,看②中的ψ3=3,说明是第一个路径的第三个状态

综上,隐状态的转移过程为(3,3,3)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tensorflow安装正确, import tf, the problem is Couldn't find field google.protob.ExtensionRange.options

问题描述 import tensorflow error with correct installation, the problem is “Couldn’t find field google.protobuf.DescriptorProto.ExtensionRange.options” python import tensorflow 出现如下问题: I tensorflow/stream_executor/dso_loader.cc:135]…

HMM——前向后向算法

1. 前言 解决HMM的第二个问题:学习问题, 已知观测序列,需要估计模型参数,使得在该模型下观测序列 P(观测序列 | 模型参数)最大,用的是极大似然估计方法估计参数。 根据已知观测序列和对应的状态序列,或者说…

Web安全(吴翰清)

安全工程师的核心竞争力不在于他能拥有多少个 0day,掌握多少种安全技术,而是在于他对安全理解的深度,以及由此引申的看待安全问题的角度和高度。 第一篇 我的安全世界观 脚本小子 “Script Kids”。 黑客精神所代表的 Open、Free、Share。…

机器学习两种方法——监督学习和无监督学习(通俗理解)

前言 机器学习分为:监督学习,无监督学习,半监督学习(也可以用hinton所说的强化学习)等。 在这里,主要理解一下监督学习和无监督学习。 监督学习(supervised learning) 从给定的训…

Tensorflow中padding的两种类型SAME和VALID

边界补充问题 原始图片尺寸为7*7,卷积核的大小为3*3,当卷积核沿着图片滑动后只能滑动出一个5*5的图片出来,这就造成了卷积后的图片和卷积前的图片尺寸不一致,这显然不是我们想要的结果,所以为了避免这种情况&#xff…

机器学习两种距离——欧式距离和马氏距离

我们熟悉的欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。例如,在教育研究中,经常遇到对人的分析和判别,个体的…

HMM前向算法,维比特算法,后向算法,前向后向算法代码

typedef struct { int N; /* 隐藏状态数目;Q{1,2,…,N} */ int M; /* 观察符号数目; V{1,2,…,M}*/ double **A; /* 状态转移矩阵A[1..N][1..N]. a[i][j] 是从t时刻状态i到t1时刻状态j的转移概率 */ double **B; /* 混淆矩阵B[1..N][1..M]. b[j][k]在状态j时观察到符合k的概率。…

Python的GUI框架PySide

PySide学习笔记 PySide安装 Python自带了GUI模块Tkinter,只是界面风格有些老旧。 Python的Qt有PyQt和PySide吧。PyQt 是商业及 GPL 的版权, 而 PySide 是 LGPL。大意也就是PyQt开发商业软件是要购买授权的,而PySide则不需要。二者代码基本一…

Python中的除法保留两位小数

在C/C语言对于整形数执行除法会进行地板除(舍去小数部分)。例如 int a15/10; a的结果为1。 同样的在Java中也是如此,所以两个int型的数据相除需要返回一个浮点型数据的时候就需要强制类型转换,例如 float a (float)b/c ,其中b、…

最小二乘法深入

上次写了一个一次函数yaxb类型的最小二乘法,即可以看做是n维输入列向量对应的一个n维输出列向量,然后对已知结果进行学习,得到拟合公式。这里对m*n的矩阵进行最小二乘法分析。 设模型的输出为和训练集输出,它们之间的平方误差为&…

github访问太慢解决方案

相关文章 版本管理 github访问太慢解决方案 Material for git workshop github 域名列表 先建立一个域名列表haha.txt,下面列表中的gist.github.com是代码片功能 github.com assets-cdn.github.com avatars0.githubusercontent.com avatars1.githubusercontent.…

ubuntu16.04 制作gif

byzanz安装 sudo apt-get install byzanz byzanz-record #录像byzanz-playback #回放 下载完成后打开命令行输入byzanz-record –help 其中我们重点关注几个参数 * -d 动画录制的时间,默认录制10秒 * -e 动画开始延迟 * -x 录制区域的起始X坐标 * -y 录制区域的起始Y坐标 …

典型关联分析CCA(canonical correlation analysis)

先看两个数学概念: 相关系数(参看百度百科) 相关系数是用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度 相…

Kullback–Leibler divergence(相对熵,KL距离,KL散度)

1 前言 注意两个名词的区别: 相对熵:Kullback–Leibler divergence 交叉熵:cross entropy KL距离的几个用途: ① 衡量两个概率分布的差异。 ② 衡量利用概率分布Q 拟合概率分布P 时的能量损耗,也就是说拟合以后丢失…

李宏毅机器学习课程11~~~为何要深?

为何要“深”? pluskid的博客 Deep Learning and Shallow Learning Bengio Y. Learning deep architectures for AI. Foundations and trends in Machine Learning, 2009 Deeper is Better? 模型有更多的参数会有更好的结果,这是毋庸置疑的。 深瘦的模…

没事随便写写——matlab图像与矩阵的转换与存储为txt文件

<span style"font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">刚开课&#xff0c;上了一节计算机图像处理&#xff0c;想了一下把图像转换成矩阵表示&#xff0c;然后存储到txt文档中去。图片用的 lena.jpg</span> …

李宏毅机器学习课程12~~~半监督学习

Semi-supervised Learning The distribution of the unlabeled data tell us something. Usually with some assumptions. Semi-Supervised Generative Model 对比学习见 李宏毅机器学习课程&#xff14;~~~分类&#xff1a;概率生成模型 EM算法思路来最大化似然函数。 Self-tr…

计算机视觉、机器学习相关领域论文和源代码大集合--持续更新……

原文地址&#xff1a;http://blog.csdn.net/whaoXYSH/article/details/16886109 一、特征提取Feature Extraction&#xff1a; SIFT [1] [Demo program][SIFT Library] [VLFeat] PCA-SIFT [2] [Project] Affine-SIFT [3] [Project] SURF […

Tensor数据相关的运算、函数讲解及与numpy区别

Tensor tensorflow 中使用它来表示数据。可以看做多维数组或者list。 标量是张量&#xff0c;向量是张量&#xff0c;矩阵是张量&#xff0c;矩阵的矩阵是张量。 常用几种定义方法 1. variable变量&#xff0c;一般是可以被更更新或更改的数值&#xff0c;即在流图运行过程中…

Python程序设计—车万翔

程序设计入门—Python 对象和类型 五种基本对象类型 字符串 &#xff08;string&#xff09;&#xff0c;简记为 str 使用 ’ ’ 或 ” ” 括起来的一系列字符 整数&#xff08;integer&#xff09;&#xff0c;简记为 int 十进制&#xff1a;21&#xff0c;八进制&#xf…