隐马尔可夫模型(HMM)及Viterbi算法

HMM简介

  对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳。那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑。
  本文将通过具体形象的例子来引入该模型,并深入探究隐马尔可夫模型及Viterbi算法,希望能对大家有所启发。
  隐马尔可夫模型(HMM,hidden Markov model)是可用于标注问题的统计学模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。HMM模型在实际的生活和生产中有着广泛的应用,包括语音识别,自然语言处理,生物信息,模式识别等领域。

 

引入

  某天,你的女神告诉你说,她放假三天,将要去上海游玩,准备去欢乐谷、迪士尼和外滩(不一定三个都会去)。
  她呢,会选择在这三个地方中的某几个逗留并决定是否购物,而且每天只待在一个地方。根据你对她的了解,知道她去哪个地方,仅取决于她去的上一个地方,且是否购物的概率仅取决于她去的地方。已知她去的三个地方的转移概率表如下:

 

稍微对这个表格做些说明,比如第一行,前一天去了欢乐谷后,第二天还待在欢乐谷的概率为0.8,去迪士尼的概率为0.05,去外滩的概率为0.15。
  她在每个地方的购物概率为:

 

地点购物概率
欢乐谷0.1
迪士尼0.8
外滩0.3

在出发的时候,她跟你说去每个地方的可能性相同。后来,放假回来后,你看了她的朋友圈,发现她的购物情况如下:第一天不购物,第二三天都购物了。于是,你很好奇,她这三天都去了哪些地方。
  怎么样,聪明的你能求解出来吗?

HMM的模型参数

  接下来,我们将会介绍隐马尔可夫模型(HMM)。
  隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列;每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可以看作是一个时刻。
  隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。隐马尔可夫模型的形式定义如下:
  设Q是所有可能的状态的集合,V是所有可能的观测的集合,也就是说,Q是不可见的,而V是可见的,是我们观测到的可能结果。

                       

其中,N是可能的状态数,M是可能的观测数。
  在刚才的例子中,Q是不可见的状态集合,应为640?wx_fmt=png,而V是可以观测的集合,应为V={购物,不购物}。
  I是长度为T的状态序列,O是对应的观测序列

在刚才的例子中,I这个序列是我们需要求解的,即女生去了哪些地方,而O是你知道的序列,O={不购物,购物,购物}。
  A是状态转移概率矩阵

640?wx_fmt=png其中,

640?wx_fmt=png

是在时刻t处于状态q_i的条件下在时刻t+1转移到状态q_j的概率。在刚才的例子中,转移概率矩阵为:

 

 

 

 

 

B是观测概率矩阵:

640?wx_fmt=png

其中,

640?wx_fmt=png

是在时刻t处于状态q_j的条件下生成观测v_k的概率。在刚才的例子中:

 

640?wx_fmt=png初始状态概率向量640?wx_fmt=png,其中640?wx_fmt=png是时刻t=1处于状态q_j的概率。在刚才的例子中, 640?wx_fmt=png

综上,我们已经讲完HMM中的基本概念。同时,我们可以知道,隐马尔可夫模型由初始状态概率向量640?wx_fmt=png,状态转移概率矩阵A,和观测概率矩阵B决定640?wx_fmt=png和A决定状态序列,B决定观测序列。因此,隐马尔可夫模型640?wx_fmt=png可用三元符号表示,即

640?wx_fmt=png

640?wx_fmt=png称为HMM的三要素。

当然,隐马尔可夫模型之所以被称为马尔可夫模型,是因为它使用了两个基本的假设,其中之一为马尔可夫假设。它们分别是:

  1. 齐次马尔科夫假设,即假设隐藏的马尔可夫链在任意时刻t的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关。

640?wx_fmt=png

  1. 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。

640?wx_fmt=png

  在刚才的假设中,我们对应的两个假设分别为:她去哪个地方,仅取决于她去的上一个地方;是否购物的概率仅取决于她去的地方。前一个条件为齐次马尔科夫假设,后一个条件为观测独立性假设。
  以上,我们就介绍了HMM的基本概念及假设。而HMM的三个基本问题如下:

1. 概率计算问题。给定模型640?wx_fmt=png和观测序列640?wx_fmt=png,计算在模型640?wx_fmt=png下观测序列O出现的概率640?wx_fmt=png.

2. 学习问题。已知观测序列640?wx_fmt=png,估计模型640?wx_fmt=png参数,使得在该模型下观测序列概率640?wx_fmt=png最大。

3. 预测问题。已知模型640?wx_fmt=png和观测序列640?wx_fmt=png,求对给定观测序列条件概率640?wx_fmt=png最大的状态序列640?wx_fmt=png即给定观测序列,求最有可能的对应的状态序列。

  上面的例子即为HMM的第三个基本问题,也就是,给定观测序列{不购物,购物,购物},结果最有可能的状态序列,即游玩的地方。

Viterbi算法

求解HMM的第三个基本问题,会用到大名鼎鼎的维特比算法(Viterbi Algorithm)。
  维特比算法以安德鲁·维特比(Andrew Viterbi)命名,是现代数字通信中最常用的算法,同时也是很多自然语言处理采用的解码算法。可以毫不夸张地讲,维特比是对我们的生活影音力最大的科学家之一,因为基于CDMA的3G移动通信标准主要就是他和厄文·雅各布(Irwin Mark Jacobs)创办的高通公司(Qualcomm)指定的。
  维特比算法是一个特殊但应用最广的动态规划(dynamic programming)算法,利用动态规划,可以解决任何一个图中的最短路径问题,同时,它也是求解HMM描述的第三个基本问题的算法。
  在维特比算法中,需要引入两个变量640?wx_fmt=png640?wx_fmt=png。定义在时刻t状态i的所有单个路径640?wx_fmt=png中概率最大值为

640?wx_fmt=png

定义在时刻t状态为i的所有单个路径640?wx_fmt=png中概率最大的路径的第i-1个节点为

640?wx_fmt=png

  下面是维特比算法在HMM的第三个基本问题的算法:

640?wx_fmt=png640?wx_fmt=png

Python代码实现

# -*- coding: utf-8 -*-
# HMM.py
# Using Vertibi algorithmimport numpy as npdef Viterbi(A, B, PI, V, Q, obs):N = len(Q)T = len(obs)delta = np.array([[0] * N] * T, dtype=np.float64)phi = np.array([[0] * N] * T, dtype=np.int64)# 初始化for i in range(N):delta[0, i] = PI[i]*B[i][V.index(obs[0])]phi[0, i] = 0# 递归计算for i in range(1, T):for j in range(N):tmp = [delta[i-1, k]*A[k][j] for k in range(N)]delta[i,j] = max(tmp) * B[j][V.index(obs[i])]phi[i,j] = tmp.index(max(tmp))# 最终的概率及节点P = max(delta[T-1, :])I = int(np.argmax(delta[T-1, :]))# 最优路径pathpath = [I]for i in reversed(range(1, T)):end = path[-1]path.append(phi[i, end])hidden_states = [Q[i] for i in reversed(path)]return P, hidden_statesdef main():# 状态集合Q = ('欢乐谷''迪士尼''外滩')# 观测集合V = ['购物''不购物']# 转移概率: Q -> QA = [[0.8, 0.05, 0.15],[0.2, 0.6, 0.2],[0.2, 0.3, 0.5]]# 发射概率, Q -> VB = [[0.1, 0.9],[0.8, 0.2],[0.3, 0.7]]# 初始概率PI = [1/3, 1/3, 1/3]# 观测序列obs = ['不购物''购物''购物']P, hidden_states = Viterbi(A,B,PI,V,Q,obs)print('最大的概率为: %.5f.'%P)print('隐藏序列为:%s.'%hidden_states)main()

 

输出结果如下:

最大的概率为: 0.02688.
隐藏序列为:['外滩''迪士尼''迪士尼'].

 

现在,你有很大的把握可以确定,你的女神去了外滩和迪士尼。

 

参考文献

  1. 一文搞懂HMM(隐马尔可夫模型):https://www.cnblogs.com/skyme/p/4651331.html

  2. 李航《统计学习方法》 清华大学出版社

  3. HMM与分词、词性标注、命名实体识别:http://www.hankcs.com/nlp/hmm-and-segmentation-tagging-named-entity-recognition.html

  4. Hidden Markov Models 1: http://docplayer.net/21306742-Hidden-markov-models-1.html

  5. 吴军 《数学之美》 人民邮电出版社

转载于:https://www.cnblogs.com/ZFJ1094038955/p/10755809.html

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

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

相关文章

尤大直播分享:vue3生态进展和展望

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12前言10月23日,参加了前端早早聊组织的【vue生态专场】,准备写一波分享方便大家学习。早上有4个话题:volar开发,搭建平台组件开发…

利用Python查看微信共同好友

思路 首先通过itchat这个微信个人号接口扫码登录个人微信网页版,获取可以识别好友身份的数据。这里是需要分别登录两人微信的,拿到两人各自的好友信息存到列表中。 这样一来,查共同好友就转化成了查两个列表中相同元素的问题。获取到共同好友…

女生适合学ux吗_UX设计色彩心理学,理论与可访问性

女生适合学ux吗Colour is an interesting topic, which I feel is often overlooked and sometimes under-appreciated. One of the first things I was taught was the power of colour, how it can have an impact on human emotion, and that there should be purpose behin…

初学者也能看懂的 Vue2 源码中那些实用的基础工具函数

1. 前言大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12想学源码,极力推荐之前我写的《学习源码整体架构系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

视觉测试_视觉设计流行测验

视觉测试重点 (Top highlight)I often discuss the topic of improving visual design skills with junior and mid-level designers. While there are a number of design principles the designers should learn and practice, one important skill that is not often consid…

如何给开源项目提过 PR 呢?其实很简单

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12源码共读群里有小伙伴聊到如何给开源项目提PR,所以今天分享这篇文章。你有给开源的库或者框架提过 PR 吗?如果没有,那么今天的文章会教你怎么…

一次回母校教前端的经历

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12已进行了三个月,很多小伙伴都表示收获颇丰。分享一篇武大毕业的耀耀大佬的文章。有些时候会受限于环境影响,特别是在校大学生。所以要融入到积极上进的环…

设计插画工具_5个强大的设计师插画工具

设计插画工具As Product Designers, most likely, we have come across illustrative work. Visual design is one important element in enhancing the user experience. As many gravitate toward attractive looking products, designers are also adapting to the changing…

figma下载_切换到Figma并在其中工作不必是火箭科学,这就是为什么

figma下载We have seen Elon Musk and SpaceX making Rocket Science look like a child’s play. In the same spirit, should design tools be rocket science that is too hard to master? Not at all.我们已经看到埃隆马斯克(Elon Musk)和SpaceX使Rocket Science看起来像是…

npm、yarn、cnpm、pnpm 使用操作都在这了

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12有时候想查个命令,或者换个镜像找了几篇文章才找到,最近闲着没事干,干脆整理一篇文档,以后就不用在网上瞎搜有的还写不全。Usage…

每次启动项目的服务,电脑竟然乖乖的帮我打开了浏览器,100行源码揭秘!

1. 前言大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,已进行三个月了,大家一起交流学习,共同进步。想学源码,极力推荐之前我写的《学习源码整体架构系列》 包含jQuery、…

初级爬虫师_初级设计师的4条视觉原则

初级爬虫师重点 (Top highlight)Like many UXers, I got into the industry from a non-visual background (in my case it was Business and later on Human Cognition). Even though I found great benefits coming from those backgrounds, it also meant I had no UI/Visua…

开源监控解决方案OpenFalcon系列(一)

OpenFalcon是由小米的运维团队开源的一款企业级、高可用、可扩展的开源监控解决方案,,在众多开源爱好者的支持下,功能越来越丰富,文档更加的完善,OpenFalcon 已经成为国内最流行的监控系统之一。小米、美团、金山云、快…

如何利用 webpack 在项目中做出亮点

大家好,我是若川。最近这几年,在前端代码打包器领域内,webpack 算得上是时下最流行的前端打包工具。它可以分析各个模块的依赖关系,最终打包成我们常见的静态文件:.js 、 .css 、 .jpg 、.png,极大地提升了…

Github 王炸功能!Copilot 替代打工人编程?

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,已进行三个月了,大家一起交流学习,共同进步。大家好,我是皮汤。最近组里在讨论一个有意思的工具 Github Copilot&#xff…

ux和ui_糟糕的UI与UX番茄酱模因

ux和uiAt face value, this meme appears to be a quick and easy tool for educating the general public about what the differences are between UI and UX. You might look at the attractive glass bottle labeled “UI” and understand that UI might have to do more …

Linux中的wheel用户组是什么?

在Linux中wheel组就类似于一个管理员的组。 通常在Linux下,即使我们有系统管理员root的权限,也不推荐用root用户登录。一般情况下用普通用户登录就可以了,在需要root权限执行一些操作时,再su登录成为root用户。但是,任…

ElementUI 组件库 md-loader 的解析和优化

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,已进行三个月了,大家一起交流学习,共同进步。背景相信很多同学在学习 webpack 的时候,对 loader 的概念应该有所了解&…

csdn 用户 蚂蚁翘大象_用户界面设计师房间里的大象

csdn 用户 蚂蚁翘大象Once upon a time, an educated eye detected a new trend in UI designs, particularly, in Dribbble. It was a conceptual proposition, not an actual design for a customer or an app. Trying to explain the characteristics of this new trend, a …

面试官问发布订阅模式是在问什么?

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,已进行了三个多月,大家一起交流学习,共同进步。本文来自 simonezhou 小姐姐投稿的第八期笔记。面试官常问发布订阅、观察者模式&#…