大内密探HMM(转)

源地址:http://blog.csdn.net/ppn029012/article/details/8923501

1. 赌场风云(背景介绍)

最近一个赌场的老板发现生意不畅,于是派出手下去赌场张望。经探子回报,有位大叔在赌场中总能赢到钱,玩得一手好骰子,几乎是战无不胜。而且每次玩骰子的时候周围都有几个保镖站在身边,让人不明就里,只能看到每次开局,骰子飞出,沉稳落地。老板根据多年的经验,推测这位不善之客使用的正是江湖失传多年的"偷换骰子大法”(编者注:偷换骰子大法,用兜里自带的骰子偷偷换掉均匀的骰子)。老板是个冷静的人,看这位大叔也不是善者,不想轻易得罪他,又不想让他坏了规矩。正愁上心头,这时候进来一位名叫HMM帅哥,告诉老板他有一个很好的解决方案。

不用近其身,只要在远处装个摄像头,把每局的骰子的点数都记录下来。

然后HMM帅哥将会运用其强大的数学内力,用这些数据推导出

1. 该大叔是不是在出千?

2. 如果是在出千,那么他用了几个作弊的骰子? 还有当前是不是在用作弊的骰子。

3. 这几个作弊骰子出现各点的概率是多少?

天呐,老板一听,这位叫HMM的甚至都不用近身,就能算出是不是在作弊,甚至都能算出别人作弊的骰子是什么样的。那么,只要再当他作弊时,派人围捕他,当场验证骰子就能让他哑口无言。

2. HMM是何许人也?

在让HMM开展调查活动之前,该赌场老板也对HMM作了一番调查。

HMM(Hidden Markov Model), 也称隐性马尔可夫模型,是一个概率模型,用来描述一个系统隐性状态的转移和隐性状态的表现概率。

系统的隐性状态指的就是一些外界不便观察(或观察不到)的状态, 比如在当前的例子里面, 系统的状态指的是大叔使用骰子的状态,即

{正常骰子, 作弊骰子1, 作弊骰子2,...}

隐性状态的表现也就是, 可以观察到的,由隐性状态产生的外在表现特点。这里就是说, 骰子掷出的点数.

{1,2,3,4,5,6}

HMM模型将会描述,系统隐性状态的转移概率。也就是大叔切换骰子的概率,下图是一个例子,这时候大叔切换骰子的可能性被描述得淋漓尽致。

很幸运的,这么复杂的概率转移图,竟然能用简单的矩阵表达, 其中a_{ij}代表的是从i状态到j状态发生的概率

当然同时也会有,隐性状态表现转移概率。也就是骰子出现各点的概率分布, (e.g. 作弊骰子1能有90%的机会掷到六,作弊骰子2有85%的机会掷到'小’). 给个图如下,

隐性状态的表现分布概率也可以用矩阵美丽地表示出来,

把这两个东西总结起来,就是整个HMM模型。

这个模型描述了隐性状态的转换的概率,同时也描述了每个状态外在表现的概率的分布。总之,HMM模型就能够描述扔骰子大叔作弊的频率(骰子更换的概率),和大叔用的骰子的概率分布。有了大叔的HMM模型,就能把大叔看透,让他完全在阳光下现形。

3. HMM能干什么!

总结起来HMM能处理三个问题,

3.1 解码(Decoding)

解码就是需要从一连串的骰子中,看出来哪一些骰子是用了作弊的骰子,哪些是用的正常的骰子。

比如上图中,给出一串骰子序列(3,6,1,2..)和大叔的HMM模型, 我们想要计算哪一些骰子的结果(隐性状态表现)可能对是哪种骰子的结果(隐性状态).

3.2学习(Learning)

学习就是,从一连串的骰子中,学习到大叔切换骰子的概率,当然也有这些骰子的点数的分布概率。这是HMM最为恐怖也最为复杂的招数!!

3.3 估计(Evaluation)

估计说的是,在我们已经知道了该大叔的HMM模型的情况下,估测某串骰子出现的可能性概率。比如说,在我们已经知道大叔的HMM模型的情况下,我们就能直接估测到大叔扔到10个6或者8个1的概率。

4. HMM是怎么做到的?

(这章需要概率论,递归,动态规划的知识, 如果不感兴趣可以跳着第5节)

4.1 估计

估计是最容易的一招,在完全知道了大叔的HMM模型的情况下,我们很容易就能对其做出估计。

现在我们有了大叔的状态转移概率矩阵A,B就能够进行估计。比如我们想知道这位大叔下一局连续掷出10个6的概率是多少? 如下

这表示的是,在一开始隐性状态(s0)为1,也就是一开始拿着的是正常的骰子的情况下,这位大叔连续掷出10个6的概率。

现在问题难就难在,我们虽然知道了HMM的转换概率,和观察到的状态V{1:T}, 但是我们却不知道实际的隐性的状态变化。

好吧,我们不知道隐性状态的变化,那好吧,我们就先假设一个隐性状态序列, 假设大叔前5个用的是正常骰子, 后5个用的是作弊骰子1.

好了,那么我们可以计算,在这种隐性序列假设下掷出10个6的概率.

这个概率其实就是,隐性状态表现概率B的乘积.

但是问题又出现了,刚才那个隐性状态序列是我假设的,而实际的序列我不知道,这该怎么办。好办,把所有可能出现的隐状态序列组合全都试一遍就可以了。于是,

R就是所有可能的隐性状态序列的集合。的嗯,现在问题好像解决了,我们已经能够通过尝试所有组合来获得出现的概率值,并且可以通过A,B矩阵来计算出现的总概率。
但是问题又出现了,可能的集合太大了, 比如有三种骰子,有10次选择机会, 那么总共的组合会有3^10次...这个量级O(c^T)太大了,当问题再大一点时候,组合的数目就会大得超出了计算的可能。所以我们需要一种更有效的计算P(V(1:T)概率的方法。
比如说如下图的算法可以将计算P(V1:T)的计算复杂度降低至O(cT).
有了这个方程,我们就能从t=0的情况往前推导,一直推导出P(V1:T)的概率。下面让我们算一算,大叔掷出3,2,1这个骰子序列的可能性有多大(假设初始状态为1, 也就是大叔前一次拿着的是正常的骰子)?

4.2 解码(Decoding)

解码的过程就是在给出一串序列的情况下和已知HMM模型的情况下,找到最可能的隐性状态序列。

用数学公式表示就是, (V是Visible可见序列, w是隐性状态序列, A,B是HMM状态转移概率矩阵)

还记得以下公式,

然后又可以使用估计(4.1)中的前向推导法,计算出最大的P(w(1:T), V(1:T)).

在完成前向推导法之后,再使用后向追踪法(Back Tracking),对求解出能令这个P(w(1:T), V(1:T))最大的隐性序列.这个算法被称为维特比算法(Viterbi Algorithm).

4.2.1 维特比算法找寻最有可能的隐性序列

这是动态规划算法的一种, 解法都是一样的, 找到递归方程后用前向推导求解.然后使用后向追踪法找到使得方程达到最优解的组合. 以下是一个计算骰子序列{1,2,6}最有可能的隐性序列组合.(初始状态为1=正常骰子,)

posted on 2014-09-19 13:44 Stinky tofu 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/loujiayu/p/3981288.html

大内密探HMM(转)相关推荐

  1. 隐马尔可夫--大内密探HMM围捕赌场老千

    1. 赌场风云(背景介绍) 最近一个赌场的老板发现生意不畅,于是派出手下去赌场张望.经探子回报,有位大叔在赌场中总能赢到钱,玩得一手好骰子, 几乎是战无不胜.而且每次玩骰子的时候周围都有几个保镖站在身 ...

  2. 机器学习 --- 4. 大内密探HMM(隐马尔可夫)围捕赌场老千

    1. 赌场风云(背景介绍) 最近一个赌场的老板发现生意不畅,于是派出手下去赌场张望.经探子回报,有位大叔在赌场中总能赢到钱,玩得一手好骰子,几乎是战无不胜.而且每次玩骰子的时候周围都有几个保镖站在身边 ...

  3. HMM-前向后向算法

    作者:金良(golden1314521@gmail.com) csdn博客: http://blog.csdn.net/u012176591 状态转移概率分布矩阵 A=⎡⎣⎢⎢0.40.30.40.1 ...

  4. HMM(隐马尔科夫)用于中文分词

    什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序,意味着具有确定和有 ...

  5. viterbi维特比算法和隐马尔可夫模型(HMM)

    阅读目录 隐马尔可夫模型(HMM) 回到目录 隐马尔可夫模型(HMM) 原文地址:http://www.cnblogs.com/jacklu/p/7753471.html 本文结合了王晓刚老师的ENG ...

  6. HMM——维特比算法(Viterbi algorithm)

    1. 前言 维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给 ...

  7. 隐马尔科夫模型HMM(一)HMM模型

    2019独角兽企业重金招聘Python工程师标准>>> 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理 ...

  8. 60分钟看懂HMM的基本原理

    作者 | 梁云1991 来源 | Python与算法之美 HMM模型,韩梅梅的中文拼音的缩写,所以又叫韩梅梅模型,由于这个模型的作者是韩梅梅的粉丝,所以给这个模型取名为HMM.开玩笑! HMM模型,也 ...

  9. 一站式解决:隐马尔可夫模型(HMM)全过程推导及实现

    作者 | 永远在你身后 转载自知乎用户永远在你身后 [导读]隐马尔可夫模型(Hidden Markov Model,HMM)是关于时许的概率模型,是一个生成模型,描述由一个隐藏的马尔科夫链随机生成不可 ...

最新文章

  1. 2016,成为更好的自己
  2. LeetCode 88. 合并两个有序数组(Merge Sorted Array)
  3. 如何在 ABAP Development Tool 创建新的 ABAP Cloud 项目
  4. cygwin汉化简单操作【ZT】
  5. java 和mysql 时间_java和mysql之间的时间日期类型传递
  6. SAP License 数据安全: SAP 权限的特殊控制方法
  7. 你在微信漂流瓶里遇到过哪些有意思的人和事?
  8. ECC椭圆曲线加密算法原理 | 比特币加密算法
  9. git pull的理解 以及 git conflict的解决
  10. mysql 5.7.14 在 windows 下的配置
  11. Linux CH340驱动安装
  12. Linux内核网络编程
  13. python读取math_python调用通达信公式,python读取通达信公式结果
  14. python的基本函数图像_python绘制基本初等函数图像
  15. Javassist基本用法
  16. 视频教程-【深入理解计算机网络】讲师解读计算机网络原理视频课程(下)-计算机网络
  17. JavaScript - 获取、修改 title 元素的内容
  18. 科学计算机sd mode使用方法,科学计算器使用方法
  19. AndroidStudio有时候调试会一直卡在:starting LLDB server
  20. 工业设备产品建模3d展示三维模型展示

热门文章

  1. MFC界面美化之换肤
  2. 移动端rpx px,rem em区别
  3. BIOS视频中断 10号中断详解
  4. Vue框架+Axios框架
  5. macOS Big Sur 11.3.1 (20E241) 虚拟机 ISO 镜像
  6. 微型计算机不可少,[单选] 微型计算机中必不可少的输入和输出设备是()。
  7. 一个高中生的编程自学经历
  8. android集成sdk 马甲包,Android 马甲包制作流程
  9. jetpack4.5.1使用tensorrt加速模型
  10. 文字编辑软件的颠峰作品——Word发展历史全析