HHM(Hidden Markov Model)-隐式马尔科夫模型

隐式马尔科夫模型是通过对观察序列的观测推导出隐藏状态。举例说明,由于本人是在十一小长假写下该篇文章,因此就拿小长假的出行计划介绍该算法,通常本人会根据特定的天气采取不同的出行计划,如下图所示。在这7天的小长假中,2天阴天(1天打扫房间,1天逛商场),3天晴天(2天打篮球,1天逛商场),2天雨天(2天全部打扫房间),假设现在我们无法获取天气情况(可以理解成你被关进了小黑屋),但是你可以获取到我的行为数据,现在让你根据行为数据推导出天气情况,这个过程就是马尔可夫模型,其中行为数据就是观察序列,天气就是隐藏状态,这个推导过程是根据历史的数据,通过统计的方式计算出各种概率,通过概率的方式根据观察序列推导隐藏状态。

整个隐式马尔科夫模型的框架如下图所示,通过对观察序列(时间序列)的观察,推导出隐藏状态。这里需要注意一点,观察序列一定是受到隐藏状态的影响(箭头从隐藏状态指向了观察序列),也就是要有一定的因(隐藏状态)果(观察序列)关系,需要注意的是这种因果关系要有一定的时效性,不能说今天的天气影响到我后天的行为,所以当使用马尔可夫模型时,一定要注意这一点。

算法讲解:

上文提到HMM是通过概率统计来进行推导的,整个推导过程可以用五个元素来描述,即2个状态集合和3个概率矩阵:

1. 隐藏状态S:

之所以叫隐藏状态,是因为无法直接观测到,只能通过历史发生后才能知道,就好比上面的天气情况,这里的天气是无法直接观测到的(假设关进小黑屋)。

S{阴天,晴天,雨天}

2. 可观测状态O:

在模型中与隐藏状态相关联,与隐藏状态的关系是因果关系,可以通过观测而得到。

O{打扫房间,打篮球,逛商场}

3. 隐藏状态初始概率矩阵兀:

通过对历史数据的分析,可以统计出每个隐藏状态的概率,就比如上面的十一小长假(2天阴天/7,3天晴天/7,2天雨天/7):

4. 隐藏状态转移概率矩阵A:

这里统计的是隐藏状态之间的转移概率,即一个状态转移到其他状态的概率,假设下一个状态只和上一个状态相关,就是一阶马尔科夫链,和前n个状态相关,就是n阶马尔科夫链,HMM通常假设是一阶马尔可夫链。由于我们只有三个隐藏状态,因此是一个3X3的二维矩阵:

十一假期天气分布:

转移概率统计:

5. 发射概率B:

这里统计的是观测值在所有隐藏状态下的概率,是将观察序列与隐藏状态进行关联统计,相当于统计因果关系概率,即在某个状态下,所表现出来的观测值的概率,只与当前时刻的状态有关,与其他时候的状态和观测值无关。

发射概率的公式以及统计如下,在某个隐藏状态Sj下,所有观测序列的概率之和等于1,qt来自隐藏状态的值,vk来自观察序列。

当然,也有的开发团队会利用贝叶斯理论,乘上先验概率:

根据上面统计的结果,可以利用viterbi算法求出针对观测序列(obs)所对应的最可能的隐藏状态(states),框架如下图所示。

需要注意的是,需要将上面的概率进行ln处理,这样可以将概率相乘转成概率相加。

viterbi算法简单来说就是求出最短路径,这个最短路径代表了最大概率(概率公式如下),通过最短路径(最大概率)求出观察序列所对应的隐藏状态,该算法是将初始概率,转移概率和发射概率相结合算出的最大概率,具体算法如下代码所示。

概率公式:

框架:

viterbi代码示例:

obs:观测序列

states:隐藏状态

start_p: 隐藏状态初始概率

trans_p:隐藏状态转移概率

emit_p: 发射概率

PrevStatus:上一时刻可能的隐藏状态

def viterbi(obs, states, start_p, trans_p, emit_p):V = [{}]  path = {}for y in states:  V[0][y] = start_p[y] + emit_p[y].get(obs[0], MIN_FLOAT)path[y] = [y]for t in xrange(1, len(obs)):V.append({})newpath = {}for y in states:em_p = emit_p[y].get(obs[t], MIN_FLOAT)(prob, state) = max([(V[t - 1][y0] + trans_p[y0].get(y, MIN_FLOAT) + em_p, y0) for y0 in PrevStatus[y]])V[t][y] = probnewpath[y] = path[state] + [y]path = newpath(prob, state) = max((V[len(obs) - 1][y], y) for y in 'ES')return (prob, path[state])

测试代码:

from hmmlearn import hmm
import numpy as np
states = ["Rainy", "Sunny", "Cloudy"]
n_states = len(states)
observations = ["basketball", "shop", "clean"]
n_observations = len(observations)
start_probability = np.array([0.28, 0.44, 0.28])
transition_probability = np.array([[0, 1, 0 ],[0, 0.5,0.5],[1, 0, 0]])
emission_probability = np.array([[0, 0, 1],[0.67, 0.33, 0],[0, 0.5, 0.5]])
model = hmm.MultinomialHMM(n_components=n_states)
model.n_features = len(observations)
model.startprob_= start_probability
model.transmat_ = transition_probability
model.emissionprob_ = emission_probability#给出一个可见序列,0=basketball, 1=shop, 2= clean#logprob#该参数反映模型拟合的好坏,数值越大越好jack_Actions = np.array([[2, 0, 1, 1, 2, 0]]).T
logprob, weathers = model.decode(jack_Actions , algorithm="viterbi")
print("Jack Actions:", ", ".join(map(lambda x: observations[x[0]], jack_Actions)))
print("weathers:", ", ".join(map(lambda x: states[x], weathers)))

HHM(Hidden Markov Model)-隐式马尔科夫模型相关推荐

  1. 隐式马尔科夫模型(HMM)

    一.简介 1.隐马尔可夫模型(HiddenMarkovmodel/HMM)是一种结构最简单的动态贝叶斯网的生成模型,它也是一种著名的有向图模型.它是一种对数据序列(训练数据出现的次序对结果有影响)进行 ...

  2. Hidden Markov Models Fundamentals 隐性马尔科夫模型 论文心得

    对自己研究的帮助 求解因变量,解决非凸问题帮助很大 大概框架 摘要 我们如何将机器学习应用于表示为一系列观察结果的数据?马尔可夫模型是一种关于状态随时间推移的推理形式,隐马尔可夫模型是我们希望从一系列 ...

  3. NLP 《隐式马尔科夫链》

    一:模型介绍和学习 隐式马尔科夫模型,是对马尔科夫链的扩展,是一个双重的随机过程,它包含一个隐藏链层S = {S1, S2, S3, ⋯ , SN}和一个可观测的链层W = {W1, W2, W3, ...

  4. [转] 爱情的隐式马尔可夫模型(Love in the Hidden Markov Model)

    首先感谢原英文作者Tom Yeh的精彩描述,生动地讲述了HMM模型的原理,在此我斗胆用我自己的语言用中文修改描述一次. 感兴趣的可以点击这里下载latex生成的pdf 版本. 男生和女生分别是来自不同 ...

  5. 使用HMM隐式马尔科夫链实现基于拼音的文本纠错

    HMM实现基于拼音的文本纠错 文章将从以下4个小节进行描述: 1.问题描述 2.思路 3.源码 4.应用 1.问题描述 对于歌曲的语音搜索实现方案之一如下. 使用百度语音进行用户语音识别,返回的字符串 ...

  6. 《Data Algorithm》读书笔记十一— 使用马尔科夫模型的智能邮件营销

    <Data Algorithm>读书笔记十一 - 使用马尔科夫模型的智能邮件营销 1. 智能邮件营销 是什么? 根据顾客的交易历史观测(其实就是推测) "下一个智能邮件营销日期& ...

  7. 概率图模型笔记(二) 隐马尔科夫模型(Hidden Markov Model)

    写在前面 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用.最近入坑NLP,看到好多算法都涉 ...

  8. 隐马尔科夫模型(Hidden Markov Models) 系列之五

    隐马尔科夫模型(Hidden Markov Models) 系列之五 介绍(introduction) 生成模式(Generating Patterns) 隐含模式(Hidden Patterns) ...

  9. 隐马尔科夫模型(Hidden Markov Models) 系列之三

    隐马尔科夫模型(Hidden Markov Models) 系列之三 介绍(introduction) 生成模式(Generating Patterns) 隐含模式(Hidden Patterns) ...

最新文章

  1. ​【特征工程】时序特征挖掘的奇技淫巧
  2. python androidhelper 语音识字_Android语音播报、后台播报、语音识别
  3. IOS开发错误library not found for -lXXX
  4. 生成学习、高斯判别、朴素贝叶斯—斯坦福ML公开课笔记5
  5. razor 怎样使用session变量_Nginx负载均衡解决session一致性问题
  6. 基于php构建APi流程,php – 如何构建一个RESTful API?
  7. 使用kotlin遇到的问题
  8. linux内核升级写入不了,解决linux内核升级后不能重启系统的故障
  9. Linux 2.6中基于Sysenter的系统调用机制
  10. python百题百练 二级题目_计算机二级选择题(公共基础新大纲)
  11. myid文件缺失导致zookeeper无法启动(myid file is missing)
  12. deepin系统15.6版本安装执行那个exe文件_深度系统(Deepin Linux)U盘安装教程
  13. python代码-你见过哪些令你瞠目结舌的 Python 代码技巧?
  14. Leetcode(337)-打家劫舍III
  15. 计算机组成原理试题 一,计算机组成原理试题库(含答案)
  16. 五、pygame做一个简单的五子棋游戏
  17. Excel 数据处理基础
  18. Ubuntu更新软件源
  19. 谷歌colab平台简单使用及读取自己的数据集
  20. 日本最惨数学天才!37岁裸辞,房子被政府没收,向全村人乞讨,一家五口只能吃野菜.........

热门文章

  1. excel数据平均分配给多人_excel表格数据分配-用Excel怎么才能将组数据平均分配给几个人...
  2. 查看电脑最多支持内存
  3. 智慧城市建设数字化,楼宇对讲炙手可热
  4. java毕业设计实验填报系统(附源码、数据库)
  5. 幸福航空落地福州冲出跑道 5乘客受伤多航班延误
  6. Pycharm找不到科学模式
  7. C++中1e9(初始化、无穷大)解析
  8. numpy求矩阵的特征值与特征向量(np.linalg.eig函数详解)
  9. 计算机三级信息安全技术 | 填空题 16 重点标注版
  10. 上篇丨摸鱼也能摸出月薪3w?我不过是会做这18个小游戏【附源码】