原文链接:http://tecdat.cn/?p=17592

原文出处:拓端数据部落公众号

最近,我们使用隐马尔可夫模型开发了一种解决方案,并被要求解释这个方案。

HMM用于建模数据序列,无论是从连续概率分布还是从离散概率分布得出的。它们与状态空间和高斯混合模型相关,因为它们旨在估计引起观测的状态。状态是未知或“隐藏”的,并且HMM试图估计状态,类似于无监督聚类过程。

视频:R语言中的隐马尔可夫HMM模型实例

例子

在介绍HMM背后的基本理论之前,这里有一个示例,它将帮助您理解核心概念。有两个骰子和一罐软糖。B掷骰子,如果总数大于4,他会拿几颗软糖再掷一次。如果总数等于2,则他拿几把软糖,然后将骰子交给A。现在该轮到A掷骰子了。如果她的掷骰大于4,她会吃一些软糖,但是她不喜欢黑色的其他颜色(两极分化的看法),因此我们希望B会比A多。他们这样做直到罐子空了。

现在假设A和B在不同的房间里,我们看不到谁在掷骰子。取而代之的是,我们只知道后来吃了多少软糖。我们不知道颜色,仅是从罐子中取出的软糖的最终数量。我们怎么知道谁掷骰子?HMM。

在此示例中,状态是掷骰子的人,A或B。观察结果是该回合中吃了多少软糖。如果该值小于4,骰子的掷骰和通过骰子的条件就是转移概率。由于我们组成了这个示例,我们可以准确地计算出转移概率,即1/12。没有条件说转移概率必须相同,例如A掷骰子2时可以将骰子移交给他,例如,概率为1/36。

模拟

首先,我们将模拟该示例。B平均要吃12颗软糖,而A则需要4颗。

# 设置
simulate <- function(N, dice.val = 6, jbns, switch.val = 4){#模拟变量#可以只使用一个骰子样本#不同的机制,例如只丢1个骰子,或任何其他概率分布b<- sample(1:dice.val, N, replace = T) + sample(1:dice.val, N, replace = T)a <- sample(1:dice.val, N, replace = T) + sample(1:dice.val, N, replace = T)bob.jbns <- rpois(N, jbns[1])alice.jbns <- rpois(N, jbns[2])# 状态 draws <- data.frame(state = rep(NA, N), obs = rep(NA, N), # 返回结果return(cbind(roll = 1:N, draws))# 模拟场景draws <- simulate(N, jbns = c(12, 4), switch.val = 4)# 观察结果ggplot(draws, aes(x = roll, y = obs)) + geom_line()

如您所见,仅检查一系列计数来确定谁掷骰子是困难的。我们将拟合HMM。由于我们正在处理计数数据,因此观察值是从泊松分布中得出的。

fit.hmm <- function(draws){# HMM mod <- fit(obs ~ 1, data = draws, nstates = 2, family = poisson()# 通过估计后验来预测状态est.states <- posterior(fit.mod)head(est.states)# 结果hmm.post.df <- melt(est.states, measure.vars = # 输出表格print(table(draws[,c("state", "est.state.labels")]))
## iteration 0 logLik: -346.2084
## iteration 5 logLik: -274.2033
## converged at iteration 7 with logLik: -274.2033
##        est.state.labels
## state   alice bob
##   a     49   2
##   b      3  46

模型迅速收敛。使用后验概率,我们估计过程处于哪个状态,即谁拥有骰子,A或B。要具体回答该问题,我们需要更多地了解该过程。在这种情况下,我们知道A只喜欢黑软糖。否则,我们只能说该过程处于状态1或2。下图显示了HMM很好地拟合了数据并估计了隐藏状态。

# 绘图输出g0 <- (ggplot(model.output$draws, aes(x = roll, y = obs)) + geom_line() +theme(axis.ticks = element_blank(), axis.title.y = element_blank())) %>% ggplotGrobg1 <- (ggplot(model.output$draws, aes(x = roll, y = state, fill = state, col = state)) + g0$widths <- g1$widthsreturn(grid.arrange(g0, g1plot.hmm.output(hmm1)

令人印象深刻的是,该模型拟合数据和滤除噪声以估计状态的良好程度。公平地说,可以通过忽略时间分量并使用EM算法来估计状态。但是,由于我们知道数据形成一个序列,因为观察下一次发生的概率取决于前一个即\(P(X_t | X_ {t-1})\),其中\(X_t \ )是软糖的数量。

考虑到我们构造的问题,这可能是一个相对简单的案例。如果转移概率大得多怎么办?

simulate(100, jbns = c(12, 4), switch.val = 7)
## iteration 0 logLik: -354.2707
## iteration 5 logLik: -282.4679
## iteration 10 logLik: -282.3879
## iteration 15 logLik: -282.3764
## iteration 20 logLik: -282.3748
## iteration 25 logLik: -282.3745
## converged at iteration 30 with logLik: -282.3745
##        est.state.labels
## state   alice bob
##   alice    54   2
##   bob       5  39
plot(hmm2)

这有很多噪音数据,但是HMM仍然做得很好。性能的提高部分归因于我们对从罐中取出的软糖数量的选择。分布越明显,模型就越容易拾取转移。公平地讲,我们可以计算中位数,并将所有低于中位数的值都归为一个状态,而将所有高于中位数的值归为另一状态,您可以从结果中看到它们做得很好。这是因为转移概率非常高,并且预计我们会从每个状态观察到相似数量的观察结果。当转移概率不同时,我们会看到HMM表现更好。

如果观察结果来自相同的分布,即A和B吃了相同数量的软糖怎么办?

hmm3 <- fit.hmm(draws)
plot(hmm3)

不太好,但这是可以预期的。如果从中得出观察结果的分布之间没有差异,则可能也只有1个状态。

实际如何估算状态?

首先,状态数量及其分布方式本质上是未知的。利用对系统建模的知识,用户可以选择合理数量的状态。在我们的示例中,我们知道有两种状态使事情变得容易。可能知道确切的状态数,但这并不常见。再次通过系统知识来假设观察结果通常是合理的,这通常是合理的。

从这里开始,使用 Baum-Welch算法 来估计参数,这是EM算法的一种变体,它利用了观测序列和Markov属性。除了估计状态的参数外,还需要估计转移概率。Baum-Welch算法首先对数据进行正向传递,然后进行反向传递。然后更新状态转移概率。然后重复此过程,直到收敛为止。

在现实世界

在现实世界中,HMM通常用于

  • 股票市场预测,无论市场处于牛市还是熊市
  • 估计NLP中的词性
  • 生物测序
  • 序列分类

仅举几例。只要有观察序列,就可以使用HMM,这对于离散情况也适用。


最受欢迎的见解

1.用R语言模拟混合制排队随机服务排队系统

2.R语言中使用排队论预测等待时间

3.R语言中实现马尔可夫链蒙特卡罗MCMC模型

4.R语言中的马尔科夫机制转换(Markov regime switching)模型

5.matlab贝叶斯隐马尔可夫hmm模型

6.用R语言模拟混合制排队随机服务排队系统

7.Python基于粒子群优化的投资组合优化

8.R语言马尔可夫转换模型研究交通伤亡人数事故预测

9.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

拓端tecdat|R语言中的隐马尔可夫HMM模型实例相关推荐

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

    隐马尔科夫(Hidden Markov model)模型是一类基于概率统计的模型,是一种结构最简单的动态贝叶斯网,是一种重要的有向图模型.自上世纪80年代发展起来,在时序数据建模,例如:语音识别.文字 ...

  2. python期望输出隐藏_【归纳综述】马尔可夫、隐马尔可夫 HMM 、条件随机场 CRF 全解析及其python实现...

    PR Structured Ⅲ:马尔可夫.隐马尔可夫 HMM .条件随机场 CRF 全解析及其python实现 Content 归纳性长文,不断更新中...欢迎关注收藏 本章承接概率图知识 马尔可夫不 ...

  3. NLP --- 隐马尔可夫HMM(概念详解、三个基本问题详解)

    本节将进入隐马尔可夫环节,再次提醒不懂马尔科夫过程的同学建议先搞懂什么是马尔科夫过程,什么是马尔科夫链,同时需要懂一点语言模型的知识,下面会用到一点点,本人打算详细总结隐马尔可夫算法思想,因此讲解的会 ...

  4. matlab中的隐马尔可夫模型(HMM)实现

    隐马尔可夫模型(HMM)简介 隐马尔可夫模型(HMM)是一个在你观察到的输出顺序,但不知道状态序列模型产生输出的过程. 去年,我们为一家公司进行了短暂的咨询工作,该公司正在构建一个主要基于隐马尔可夫模 ...

  5. NLP——part of speech (POS)中的隐马尔可夫模型 + Viterbi 算法

    文章目录 POS 隐马尔可夫模型 计算简介 转移概率矩阵(Transition matrix) 观察矩阵(Observation / emission Matrix) 预测 prediction Vi ...

  6. 机器学习中的隐马尔科夫模型(HMM)详解

    前导性推荐阅读资料: 从朴素贝叶斯分类器到贝叶斯网络(上) 从朴素贝叶斯分类器到贝叶斯网络(下) 欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公 ...

  7. 隐马尔可夫(HMM)/感知机/条件随机场(CRF)----词性标注

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 7. 词性标注 7.1 词性标注概述 什么是词性 在语言学上,词性(Par-Of- ...

  8. 隐马尔可夫(HMM)、前/后向算法、Viterbi算法 再次总结

    本总结是是个人为防止遗忘而作,不得转载和商用. 说明:此篇是作者对"隐马尔可夫模型"的第二次总结,因此可以算作对上次总结的查漏补缺以及更进一步的理解,所以很多在第一次总结中已经整理 ...

  9. 隐马尔可夫(HMM)

    一.概述 计算机科学中所谈的"模式"通常指按照一定顺序发生的事件序列,比如机器翻译和自然语言处理中的文字(词)序列,程序设计中的指令序列,模式则体现了序列中事件的相关性. 举一个简 ...

  10. NLP --- 隐马尔可夫HMM(第三个问题详解及HMM的应用)

    前两节我们详细介绍了什么是极大似然估计和EM算法,简单来说就是数据如果是完整的则可以通过均值来估计参数,因为在数据完整的情况下即有发射符号概率也有状态转移概率,通过估计就可以很容易求出隐马尔可夫模型的 ...

最新文章

  1. 注意力机制又一大作!DCANet:学习卷积神经网络的连接注意力
  2. U盘安装CentOS7跳坑记
  3. java任何表达式都可以当作语句_在Java语言中语句用分号终止,并不是所有的表达式都可以构成语句...
  4. 网页设计图片向上浮动_利用js实现图片在浏览器中飘动(浮动窗口自由移动)效果...
  5. java ajax 导出excel文件_springMVC(4)---生成excel文件并导出
  6. 2012年3月编程语言排行榜:JavaScript超越Perl和Python
  7. 6月国产网络游戏审批信息公布 共计86款游戏过审
  8. 数据绑定以及Container.DataItem几种方式与使用方法分析
  9. 计算机与编程基础知识
  10. 【April Fools Day Contest 2014F】【愚人节脑洞 OEIS大法】000001 输出序列某一项
  11. 了解一下,Android 10中的ART虚拟机(2)
  12. 【Js】JavaScript数据类型隐式转换
  13. 《大学生Python学习》社区正式运行,加入我们,每日学习,引燃青春~
  14. 一个大学教授让人发冷汗的讲演(浙大高分子物理郑强教授)
  15. Package | 解决 Could not build wheels for opencv-python which use PEP 517 and cannot be installed
  16. deepin做服务器稳定吗,deepin从兴致勃勃到彻底放弃
  17. 全志科技A40i国产开发板——性能参数综合测试
  18. Java学习 --- 设计模式七大原则的依赖倒转原则
  19. 学习笔记之在eclipse中,使用ADT开发
  20. PAT 1006 换个格式输出整数 (15 分)(Java)

热门文章

  1. importanturlAndutl
  2. 真题很重要,用科学的态度批判性地对待真题同等重要!
  3. 实训汇编语言设计——将bcd码转化为二进制数
  4. batch norm参数
  5. Chatbot - NLP
  6. 关于梯度下降法、牛顿法、高斯-牛顿、LM方法的总结
  7. 同一台电脑管理多个`SSH KEY`
  8. is not a registered tag library. Must be one of:
  9. Linux设备驱动程序学习 高级字符驱动程序操作[阻塞型I/O和非阻塞I/O]【转】
  10. Windows PowerShell初体验——.NET对象支持