最近感觉学习深度学习不能一直只注重代码,而不注重对于算法的理解,决定补一补深度学习相关的算法内容。

隐马尔可夫模型是可用于标注问题的统计学习模型,描述的是由隐藏的马尔可夫链随机生成观测序列的过程。

一、隐马尔可夫模型的基本概念

它是一个关于时序的概率模型,过程是:隐藏的马尔可夫链随机生成不可观测的状态随机序列,称为状态序列->每个状态生成一个观测,组成观测序列。

注意!序列的每一个位置又可以看作是一个时刻。

隐马尔可夫模型有三个重要的过程组件:初始概率分布、状态转移概率分布、观测概率分布。

下面是需要记住的常用参数:

Q={q1,q2,……,qN},V={v1,v2,……,vM},Q和V分别是所有可能的状态的集合和所有可能观测的集合。记住是所有!长度为N和M.

设I为长度为T的状态序列,O是对应的观测序列。I和O在后面经常提到,大家要记住他们分别是状态序列和观测序列。记住,这不是所有,而是一组,长度为T

I=(i1,i2,……,iT),O=(o1,o2,……,oT)

我们先讲状态转移概率分布:

A是状态转移矩阵,N*N就是N行N列的意思,因为有N个状态。

aij意思就是从状态i到状态j转移的概率,意思是在时刻t处于状态qi的条件下在时刻t+1转移到qj的概率。N*N个aij构成A。

然后是观测概率矩阵:

bj(k)是在t时刻处于状态qj条件下生成观测vk的概率。

这是时刻t=1处于状态qi的概率。 也就是每个状态作为初始状态的概率。

鉴于马尔可夫模型由这三个参数来调节,所以我们将这三个参数用拉么大表示

马尔可夫有两个基本假设

1.齐次马尔可夫性假设:马尔可夫链任意时刻的状态只与前一时刻的状态有关,与哪个时刻无关,与其他的状态和观测也无关。

2.观测独立性假设:马尔可夫任一时刻的观测只与当前时刻的状态有关,和其他时刻的状态与观测无关。

下面说一个马尔可夫的小栗子:

有没有发现在这个例子里,状态和观测分别是什么?我们可以直接观察到抽取的结果,即颜色序列,但是我们无法观察到他们是从哪个盒子里面抽取到的,所以说,状态就是盒子,颜色就是观测。

这样就很容易写出上面提到的很多参量了,比如:

Q={盒子1,盒子2,盒子3,盒子4},N=4

V={红,白},M=2

观测了五次,很容易得出,T=5

由于是随机选取盒子,初始状态下每个盒子被选取的概率是一样的,所以,初始概率分布也可以很容易得出:

然后状态转移概率分布:

这个根据题意也很容易得出吧~

这个是观测概率分布就更简单了,回想一下,啥是观测概率分布?是已经在这个状态下了的情况下,各个观测出现的概率,比如第一行0.5,0.5,就是已经选择了第一个盒子的情况下,抽到白色和红色的概率。由于题目显示盒子1中两个颜色的球的个数是一样的,所以出现的概率也是一样的。同理可得下面各行。

有必要说一下观测序列的生成过程:

假设我们输入一组模型参数

观测序列长度为T,

那么我们要输出的就是观测序列O={o1,o2,o3,……,oT}

首先我们就会根据初始状态分布得到状态i1,有了i1就能根据B得到o1,根据定义,每个状态生成一个观测组成观测序列,所以我们下一步需要得到i2状态,具体方法是通过A,也就是aij状态转移概率分布来产生状态i2,然后又可以得到o2,循环往复,一直到得到T个观测序列。记得,观测序列是每个状态得到一个观测组成的。什么叫一个观测?就是取各个可能观测结果的概率!!比如上面那个例题:

0.5 0.5就是状态1(盒子1)对于可能的观测结果(白色?红色?)的各个概率!

然后就是隐马尔可夫模型的3个基本的问题应用类型:

1.概率计算问题:给定拉么大,观测序列O=(o1,o2,……,oT),计算P(O|拉么大)

2.学习问题:

3.预测问题:

下面挨个进行讲解:首先看一下概率计算问题。

二.三大应用:

一、概率计算算法:

1.直接计算法:

最直接的方法就是直接计算喽~通过列举所有可能长度为T的状态序列求各个状态序列I与观测序列O=(o1,o2,……,oT)的联合概率P(O,I|拉么大),然后对所有可能的状态序列求和得到P(O|拉么大)

P(O,I|拉么大)怎么求呢?很明显,它的意思是某个状态序列出现某个观测序列的概率,首先应该知道这个状态序列出现的概率P(I|拉么大),然后乘以该状态下某观测序列的概率P(O|I,拉么大)吧!

然后是P(O|I,拉么大)

至于他们的公式为什么是这个,不用我一一解释吧,挺容易懂的,就比如这个P(O|I,拉么大),每个观测序列o1,o2……他们都是由i1,i2……状态的到的,而bi1(o1)、bi2(o2)……就是i1,i2……状态下,o1,o2……产生的概率,乘起来就完事了。

最后,别忘了,可能的状态序列有很多,每一种都有可能产生这个观测序列O,记得加起来。

2.前向算法与后向算法结合

前向概率

首先定义一下什么是前向概率:定义从开始到t时刻部分观测序列o1,o2,……,ot且状态为qi的概率为前向概率。

然后开始算法的讲解:

输入:隐马尔可夫模型拉么大,观测序列O

输出:观测序列概率P(O|拉么大)

步骤:

1.初始化前向概率,

2.递归

上面计算的只是初始时刻的前向概率,从前向概率的定义来看,如果t>1那么就是一个递归的概率,我们来计算一下。

怎么解读上面这个公式呢?我们想向以下,在t+1时刻,此时状态为i,那么之前的时刻状态可不一定是i,在t+1时刻都将转化为i状态,所以方括号里面就是其他所有状态在t时的前向概率乘以状态转移概率(即从j转化为i的概率),从而得到了t时刻在任何状态下观测到o1……ot并在t+1时刻转化为i状态的概率,可看下图加深理解

这时状态已经是i了,乘以(t+1时刻,i状态下,生成观测序列o1……ot+1的概率)就得到了某个状态下得到输入的观测序列O的概率。

3.求和

别忘了状态可不止一个哦,还要对所有状态求和

刚才我们上面得到的就是下面这个图里的表示

即在模型拉么大条件下,状态为i并得到o1……ot的概率,下面对N个状态进行求和就完事了。

下面放个例题,然后大家可以自己看一下加深理解。

后向概率

你想啊,刚才我们的前向概率是啥?是t时刻i状态下观测结果为o1……ot的概率,那么是不是应该有一个t时刻i状态下,观测结果为ot+1到oT的概率?正好一前一后。所以:

后向概率是时刻t状态qi的条件下,从t+1到T的部分观测序列为ot+1到oT的概率

然后开始算法的讲解:

输入:隐马尔科夫模型辣么大,观测序列O

输出:观测序列概率P(O|辣么大)

步骤:(我就不写太多文字描述了,和之前的前向概率是一个思想)

1.

这里是一个规定,规定对于最终时刻的所有状态qi规定后向概率等于1。(想想也是,最后一个时刻了,后面已经没有可以观测的了)

2.

这个就是后向概率喽~看公式里面说的,从初始的i状态转向状态j产生观测为ot+1再乘以j状态下,t+1时刻下ot+1……oT的概率。

其实这个公式反着看更容易理解。t时刻的后向概率就等于t+1时刻的后向概率*(t+1时刻i状态转化为其他状态并生成观测ot+1的概率)

3.

β1(i)是观测o2……oT,所以,需要π1和bi(o1)来生成o1,当然由于初始状态有好多,自然需要求和。

下面再讲一些概率与期望值的计算:

利用前后向概率可以得到关于单个状态和两个状态概率的计算公式

首先看单个状态的:

上面的公式不难理解吧应该。

然后是多状态的:

如果公式不太好理解,可以把分母乘过去。其实也挺好理解的,就好比P(A|B)=P(AB)/P(B)。

这都很好理解了。

二、学习算法:

根据训练数据是包含观测序列和对应的状态序列还是只有观测序列可以分别由监督学习与无监督学习来实现。

我们首先介绍监督学习:

监督学习:

假设:训练数据包含S个长度相同的观测序列和对应状态序列{(O1,I1),(O2,I2),……,(Os,Is)},那么可以用极大似然估计法来估计隐马尔可夫模型的参数。

1.对于转移概率aij的估计

设样本中时刻t处于状态i时刻t+1转移到状态j的频数为Aij,那么状态转移概率aij的估计是:

同理

2.观测概率bj(k)的估计:

设样本状态为j并观测为k的频数是Bjk,那么状态为j观测为k的概率bj(k)的估计是:

同理

3.初始状态概率πi的估计πi帽为S个样本中初始状态为qi的概率

无监督学习算法——Baum-Welch算法(EM算法)

这一部分的算法推导过程我不打算详细描述了,我是按照李航的统计学习方法里面讲的,大家有兴趣的 可以自己看一下这里算法推导的过程。只列出 推导之后的操作步骤:

二、预测算法:

下面是隐马尔可夫模型的两种预测算法:近似算法,维特比算法。

1.近似算法:思想是在每个时刻t选择在该时刻最有可能出现的状态i,从而确定整个状态序列。

给定隐马尔可夫模型辣么大和观测序列O,在时刻t处于状态qi的概率是:

从而在每一时刻t最有可能的状态i是

优点是计算简单,缺点是不能保证预测的状态序列整体是最有可能的状态序列,因为预测的状态序列有可能包含实际不发生的部分,比如转移概率为0的相邻状态。尽管如此,他依然是有用的。

2.维特比算法

其是用动态规划来求解预测问题,就是用动态规划求概率最大的路径(最优路径),每条路径对应一个状态序列。

根据动态规划的原理,要想整条道路最优,局部道路也要是最优的。所以我们要从时刻t=1开始递归的计算在时间t状态为i的各条部分路径的最大概率,一直到t=T。t=T时的最大概率即为最优路径的概率p,终结点iT也同时得到,只有为了找出最优路径的各个节点,从终结点iT开始从后向前逐步求得节点iT-1,……i1,得到最优路径。

首先导入两个变量,定在时刻t状态为i的所有单个路径(i1,i2……iT)中概率最大值为

由此可以得到下一步的递归公式

arg max就是使右边的式子达到最大的时候自变量的取值,也就是说j的取值。

下面就是维特比算法的过程步骤:

下面通过一个例子来说明维特比算法。

解:

(1)初始化。首先计算在t=1时,对应每一个状态i,i=1,2,3,求状态i观测o1为红色的概率,

带入矩阵中的数据我们可以得到下面的结果:

这三个数是怎么得出来的?

0.1是B矩阵中的第一列第一行的数0.5(即b1(o1))*π矩阵中的第一个数0.2(即π1)。

同理:

0.16=B矩阵中的第一列第二行的0.4(即b2(o1))*π矩阵中的第二个数0.4(即π2)。

0.28=b3(o1)*π3=0.28

上面就求出了t=1时刻得到红色的概率。

(2)再依次求t=2时白球的概率,t=3时红球的概率。

用上面这个公式可以求出t=2和t=3的情况,然后对每个状态记录概率最大路径的前一个状态j

(3)最后求出最优路径的概率以及终点:

统计学习方法第十章隐马尔可夫模型相关推荐

  1. 《统计学习方法》——10. 隐马尔可夫模型(Python实现)

    本文主要是在阅读过程中对本书的一些概念摘录,包括一些个人的理解,主要是思想理解不涉及到复杂的公式推导.会不定期更新,若有不准确的地方,欢迎留言指正交流 本文完整代码 github 地址:https:/ ...

  2. 统计学习方法十:隐马尔科夫模型

    一.基本概念 1.马尔科夫假设:当前的状态只与之前的状态有关 2.马尔科夫过程:当前的状态只与前n个状态有关,被称为n阶马尔科夫模型. 3.马尔科夫链:可以理解为带有概率的状态转移链 3.一阶马尔科夫 ...

  3. 机器学习理论《统计学习方法》学习笔记:第十章 隐马尔可夫模型(HMM)

    第十章 隐马尔可夫模型(HMM) 摘要 隐马尔可夫模型的基本概念 前言 生成模型和判别模型 马尔可夫过程 马尔可夫链 马尔可夫模型 隐马尔可夫模型 隐马尔可夫模型的三个问题 第一 概率计算 第二 学习 ...

  4. 隐马尔科夫模型——简介

    1.  前言 学习了概率有向图模型和概率无向图模型,回头再看了一下隐马尔可夫模型(hidden Markov model,HMM). HMM属于树状有向概率图模型,主要用于对时序数据的建模,它的潜在变 ...

  5. 全面理解隐马尔可夫模型

    文章目录 隐马尔可夫模型的基本概念 隐马尔可夫模型的定义 观测序列的生成 隐马尔可夫模型的三个基本问题 概率计算算法 直接计算法 前向算法 后向算法 一些概率与期望值的计算 学习算法 监督学习方法 转 ...

  6. 【自然语言处理】hmm隐马尔可夫模型进行中文分词 代码

    本文摘要 · 理论来源:[统计自然语言处理]第七章 自动分词:[统计学习方法]第十章 隐马尔可夫模型 · 代码目的:手写HMM进行中文分词 作者:CSDN 征途黯然. 一.数据集   数据集的形式如下 ...

  7. 【机器学习算法】隐马尔可夫模型HMM(一)

    目录 一.马尔可夫模型 1. 马尔可夫性 2. 马尔可夫链 3. 马尔可夫链案例 二.隐马尔可夫模型HMM 1. named entity recognition(命名实体识别)问题概述 2. 什么是 ...

  8. 隐马尔可夫模型的java实现_机器学习——python模拟隐马尔可夫模型

    <统计学习方法> 李航著 第十章 隐马尔可夫模型 我是小白一个:本文代码转载地址文末有注释:有问题请多指教 先看书,看完书,代码就看懂了.程序只是将算法翻译成机器认识的罢了 import ...

  9. python做马尔科夫模型预测法_李航《统计学习方法》第十章——用Python实现隐马尔科夫模型...

    相关文章: 李航<统计学习方法>第二章--用Python实现感知器模型(MNIST数据集) 李航<统计学习方法>第三章--用Python实现KNN算法(MNIST数据集) 李航 ...

最新文章

  1. 在Win7中安装Oracle 10g时检测报错的解决办法
  2. 读《瓦尔登湖》,寂寞的共鸣
  3. AndroidStudio项目提交(更新)到github最详细步骤
  4. 细胞培养中出现黑胶虫污染处理方法
  5. 能否直接在Visual Studio Code里查看TypeScript的数据类型定义
  6. 产品经理必须知道的一点知识:三种方法判断一个产品该不该做
  7. 感谢OpenEIM的技术人员能够及时修补漏洞
  8. 嵌入式 CIF/4CIF/QCIF/D1分辨率
  9. Halcon教程八:简单的语法介绍
  10. 谷歌浏览器获取主题图片
  11. 大学英语计算机四级考试内容,大学英语四级考试大纲
  12. ORB-SLAM2代码阅读笔记(十):sim3求解
  13. 阿里巴巴2018秋招总结
  14. [干货] 一文看懂numpy.nonzero() 与 numpy.argwhere()非零元素处理
  15. 美国南加州大学骆沁毅:构建高性能的异构分布式训练算法
  16. 联合证券|滴滴出行即日起恢复!A股嗨了!券商扛起领涨大旗
  17. arcgis 矢量编辑过程时,防止误移动操作设置粘滞移动容差设置大一点
  18. Android 装置CTS与GMS认证差异
  19. 55. Jump Game(跳跃游戏)
  20. GDSII format

热门文章

  1. 基于树莓派3b的嵌入式实验——蓝牙通信实验(python)
  2. 如何防止某些照片显示在Android的图库或Google相册中
  3. matlab交流电路仿真,直流交流变换电路MATLAB仿真实训教案
  4. MYSQL:关于sql文件导入提示:ERROR 1046 (3D000): No database selected的解决方法
  5. html5选择器优先级,css选择器优先级怎么比较
  6. 做投标书需要注意的6点事项
  7. Java注解 编译_Java注解处理器学习之编译时处理的注解详析
  8. 使用SIM4LIFE light对人体电磁场仿真过程1
  9. 数据分析师,BI开发人员,数据科学家和数据工程师的角色
  10. python 一行命令开启网络间的文件共享