HMM——前向后向算法

1. 前言

解决HMM的第二个问题:学习问题, 已知观测序列,需要估计模型参数,使得在该模型下观测序列 P(观测序列 | 模型参数)最大,用的是极大似然估计方法估计参数。

根据已知观测序列和对应的状态序列,或者说只有观测序列,将学习过程分为监督和无监督学习方法

主要参考《李航统计学习》、《PRML》

2. 监督学习方法

给定了s个长度相同的观测序列和对应的状态序列(相当于有s个样本,所有样本长度一样)


然后我们需要做的就是统计三种频率:

① 在样本中,从t 时刻的各状态转移到 t+1时刻的各状态的频率,比如第一个状态转移到第二个状态共有3次,第2个状态转移到第三个状态共有10次,等。。。。。

据此能够推导出状态转移概率


② 在样本中,每对(某个状态j,某个观测k)出现的频率,就是状态为j 观测为k的概率,即混淆矩阵


③在样本中,统计s个样本中初始状态为 的频率就是初始状态概率πi

缺点就是:监督学习需要人工标注训练数据,代价高

3.前向-后向算法

3.1 目标

其它称呼有:Baum-Welch算法

主要针对只有观测序列没有对应的状态序列的情况

这一部分在《统计学习方法》中推导的非常好,主要利用的是拉格朗日乘子法求解

已知:训练数据是S个长度为T的观测序列,没有对应的状态序列

求解:学习隐马尔科夫的参数,包括:转移矩阵、混淆矩阵、初始概率

思路:

因为HMM中引入了隐状态,所以设隐状态序列为I,那么HMM就可以当做一个具有隐变量的概率模型:


其实这个式子就有点像一种边缘概率:


只不过将这个概率加了一个条件,是在HMM的模型参数下计算的,就变成了条件概率。

求解的时候利用E-M算法求解即可(EM中,E代表expectation,是求期望;M代表的是maximization,求极大;合起来EM算法就被称为期望值最大化算法)

3.2 EM步骤简述

摘自《统计学习方法》

输入:观测变量数据Y,隐变量数据Z,联合分布 P(Y, Z | θ),条件分布 P( Z | Y , θ)

输出:模型参数 θ

步骤:

① 选择参数初值,开始迭代

② E步:记为第 i 次迭代参数θ的估计值,在第 i+1 次迭代E步,计算


第二个等式的第二项是给定观测数据Y和当前的估计参数下隐变量数据Z的条件概率分布

③ M步:求使得极大化的θ,确定第 i+1 次迭代的参数的估计值


④ 重复第②和③步,直到收敛

3.3求解HMM模型参数

(1) 确定完全数据的对数似然函数

观测数据:

隐藏数据:

完全数据:

完全数据的对数似然函数就是

②EM算法之E:求Q函数


式子中是HMM模型参数的当前估计值,λ 是要极大化的HMM模型参数

对于前面一半,根据概率有向图的联合概率分布,我们知道



两式相乘就可以得到:


根据P(O,I | λ)可以将 Q 函数可以改写为:


式中的求和是对所有训练数据的序列长度T进行的

③ EM算法之M:极大化Q函数求解模型参数π、A、B

观察E步骤的式子发现三个参数刚好分别在三项中,所以单独对每一项求解就行了

第一步先求π:

注意,π只与初始状态有关,第一项可以写成


意思就是在模型参数已知的条件下,初始时候的各种状态以及对应的初始观测的概率的和

限制条件就是对于某种观测,初始的所有状态,其概率和为1,例如,第一天观测为晴天时候,海藻的干燥、湿润、潮湿三个状态概率和为1


那么就可以根据拉格朗日乘法计算了,设


那么令其偏导数等于零


对 i 求和得到


再带回偏导为0的式子中得到


第二步求转移矩阵A

将第二项改写为


找到约束条件为


意思就是上一个隐状态到当前所有隐状态的转移概率和为1,比如今天是晴天,那么到明天得隐状态转移:晴天->多云,晴天->雨天,晴天->晴天的概率和为1

依旧根据拉格朗日乘子法得到


第三步求混淆矩阵

将第三项改写为


找到约束条件为


也就是说一个隐状态对应的所有观测概率和为1,比如天气为晴天的时候,对应的海藻干燥、湿润、潮湿的概率和为1

但是有一个需要注意的是只有当观测状态为当前所求导的状态时候,的偏导数才不为0,其实也就相当于的时候才是偏导不为0,书中用表示,最终偏导以后求得:


3.4 Baum-Welch算法

该求得都求了,那么具体的HMM模型参数估计算法就是:

输入:观测数据

输出:HMM的模型参数

(1) 初始化:

对n=0,选取得到模型

(2) 递推,对n=1,2,...

分别计算上面的三个偏导

(3) 计算到最后一次迭代就得到最终结果了


后续分析一下HMM的代码再另行添加

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

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

相关文章

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…

【重大修改】动态时间规整(Dynamic Time Warping)

本文只是简单的介绍DTW算法的目的和实现。具体的DTW可以参考一下文献&#xff1a; 离散序列的一致性度量方法&#xff1a;动态时间规整&#xff08;DTW&#xff09; http://blog.csdn.net/liyuefeilong/article/details/45748399 动态时间归整/规整/弯曲(Dynamic time warpi…

python中的深拷贝与浅拷贝

浅拷贝的时候&#xff0c;修改原来的对象&#xff0c;深拷贝的对象不会发生改变。 对象的赋值 对象的赋值实际上是对象之间的引用&#xff1a;当创建一个对象&#xff0c;然后将这个对象赋值给另外一个变量的时候&#xff0c;python并没有拷贝这个对象&#xff0c;而只是拷贝了…