HHM(Hidden Markov Model)-隐式马尔科夫模型
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)-隐式马尔科夫模型相关推荐
- 隐式马尔科夫模型(HMM)
一.简介 1.隐马尔可夫模型(HiddenMarkovmodel/HMM)是一种结构最简单的动态贝叶斯网的生成模型,它也是一种著名的有向图模型.它是一种对数据序列(训练数据出现的次序对结果有影响)进行 ...
- Hidden Markov Models Fundamentals 隐性马尔科夫模型 论文心得
对自己研究的帮助 求解因变量,解决非凸问题帮助很大 大概框架 摘要 我们如何将机器学习应用于表示为一系列观察结果的数据?马尔可夫模型是一种关于状态随时间推移的推理形式,隐马尔可夫模型是我们希望从一系列 ...
- NLP 《隐式马尔科夫链》
一:模型介绍和学习 隐式马尔科夫模型,是对马尔科夫链的扩展,是一个双重的随机过程,它包含一个隐藏链层S = {S1, S2, S3, ⋯ , SN}和一个可观测的链层W = {W1, W2, W3, ...
- [转] 爱情的隐式马尔可夫模型(Love in the Hidden Markov Model)
首先感谢原英文作者Tom Yeh的精彩描述,生动地讲述了HMM模型的原理,在此我斗胆用我自己的语言用中文修改描述一次. 感兴趣的可以点击这里下载latex生成的pdf 版本. 男生和女生分别是来自不同 ...
- 使用HMM隐式马尔科夫链实现基于拼音的文本纠错
HMM实现基于拼音的文本纠错 文章将从以下4个小节进行描述: 1.问题描述 2.思路 3.源码 4.应用 1.问题描述 对于歌曲的语音搜索实现方案之一如下. 使用百度语音进行用户语音识别,返回的字符串 ...
- 《Data Algorithm》读书笔记十一— 使用马尔科夫模型的智能邮件营销
<Data Algorithm>读书笔记十一 - 使用马尔科夫模型的智能邮件营销 1. 智能邮件营销 是什么? 根据顾客的交易历史观测(其实就是推测) "下一个智能邮件营销日期& ...
- 概率图模型笔记(二) 隐马尔科夫模型(Hidden Markov Model)
写在前面 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用.最近入坑NLP,看到好多算法都涉 ...
- 隐马尔科夫模型(Hidden Markov Models) 系列之五
隐马尔科夫模型(Hidden Markov Models) 系列之五 介绍(introduction) 生成模式(Generating Patterns) 隐含模式(Hidden Patterns) ...
- 隐马尔科夫模型(Hidden Markov Models) 系列之三
隐马尔科夫模型(Hidden Markov Models) 系列之三 介绍(introduction) 生成模式(Generating Patterns) 隐含模式(Hidden Patterns) ...
最新文章
- ​【特征工程】时序特征挖掘的奇技淫巧
- python androidhelper 语音识字_Android语音播报、后台播报、语音识别
- IOS开发错误library not found for -lXXX
- 生成学习、高斯判别、朴素贝叶斯—斯坦福ML公开课笔记5
- razor 怎样使用session变量_Nginx负载均衡解决session一致性问题
- 基于php构建APi流程,php – 如何构建一个RESTful API?
- 使用kotlin遇到的问题
- linux内核升级写入不了,解决linux内核升级后不能重启系统的故障
- Linux 2.6中基于Sysenter的系统调用机制
- python百题百练 二级题目_计算机二级选择题(公共基础新大纲)
- myid文件缺失导致zookeeper无法启动(myid file is missing)
- deepin系统15.6版本安装执行那个exe文件_深度系统(Deepin Linux)U盘安装教程
- python代码-你见过哪些令你瞠目结舌的 Python 代码技巧?
- Leetcode(337)-打家劫舍III
- 计算机组成原理试题 一,计算机组成原理试题库(含答案)
- 五、pygame做一个简单的五子棋游戏
- Excel 数据处理基础
- Ubuntu更新软件源
- 谷歌colab平台简单使用及读取自己的数据集
- 日本最惨数学天才!37岁裸辞,房子被政府没收,向全村人乞讨,一家五口只能吃野菜.........
热门文章
- excel数据平均分配给多人_excel表格数据分配-用Excel怎么才能将组数据平均分配给几个人...
- 查看电脑最多支持内存
- 智慧城市建设数字化,楼宇对讲炙手可热
- java毕业设计实验填报系统(附源码、数据库)
- 幸福航空落地福州冲出跑道 5乘客受伤多航班延误
- Pycharm找不到科学模式
- C++中1e9(初始化、无穷大)解析
- numpy求矩阵的特征值与特征向量(np.linalg.eig函数详解)
- 计算机三级信息安全技术 | 填空题 16 重点标注版
- 上篇丨摸鱼也能摸出月薪3w?我不过是会做这18个小游戏【附源码】