专栏名称: 小蚊子数据分析
数据分析知识、培训、招聘分享。
目录
相关文章推荐
环球物理  ·  【思维导图】中考物理全复习思维导图 ·  18 小时前  
环球物理  ·  【物理动图】初中物理动图合集 ·  昨天  
环球物理  ·  【初中物理】解题技巧+方法总结,非常实用 ·  2 天前  
中科院物理所  ·  原子时的前世今生 ·  3 天前  
51好读  ›  专栏  ›  小蚊子数据分析

异地的女神发朋友圈了,秒算当地天气嘘寒问暖!

小蚊子数据分析  · 公众号  ·  · 2018-04-28 11:31

正文

HMM(Hidden Markov Model)隐马尔科夫模型,是一个非常实用的模型。要理解什么是隐马尔可夫模型,首先要理解什么是马尔科夫模型。 马尔科夫模型很简单,它的描述是这样子的:


假设一个序列中的某个值,只和它前面的 n 个值有关,与其他值无关。


其实很容易理解,例如天气,今天的天气,只和昨天的天气有关,与前天的天气无关,那么这就是一个马尔科夫过程,n 等于 1。


例如:晴天 -> 雨天 的概率是 0.4,雨天 -> 晴天 的概率是 0.3,连续三天的天气: [ 晴天, 雨天, 雨天 ] 就是一个马尔科夫过程,这个过程出现的概率是 晴天出现的概率 * 晴天 -> 雨天 的概率 * 雨天 -> 雨天 的概率


那么什么是隐马尔科夫过程呢?所谓隐马尔科夫过程,里面除了包含一个马尔科夫过程,还包含了一个显示层,马尔可夫过程中出现的值,按照固定概率地决定了显示层出现的值,如下图所示:


公园散步 外出购物 打扫房间

^                      ^                   ^

|                       |                    |

晴天 –> 雨天 –> 雨天


例如:天气的状态是一个马尔科夫过程,那么某个人的日常活动,就是一个显示层,如果天气是晴天,就出去公园散步(50%的概率)或者外出购物(40%的概率),很少去打扫房间的卫生(10%)。如果天气是雨天,就留在家里打扫卫生(50%)或者外出购物(40%),很少出去公园散步(10%), 这个就是隐马尔科夫模型了。


讲解隐马尔科夫原理原理的文章已经很多,这里就不讨论原理,咱们主要看看这个模型如何使用。


案例一:


一个异地的朋友,每天会根据天气 { 下雨, 天晴 },决定当天的活动 { 公园散步, 外出购物, 清理房间 } 。连续三天,她发的朋友圈内容如下:


天气好好,出去公园散步了

缺吃缺喝,去超市购物咯

房间好乱,要清理房间了!


那么,能否根据这些状态,判断出当地三天的天气情况呢?答案是可以的, 隐马尔科夫模型就可以解决这个问题, 我们来看看怎么做。


要解决这个问题,我们先要收集一些数据:


一、确定隐含状态和初始概率


所谓的隐含状态,就是未知的状态,也就是要求解的状态。在这个问题中,就是天气,从题目中可以知道,天气总共有两种状态,不是下雨,就是天晴。


states = { 下雨, 天晴 }


所谓的初始概率,就是隐含状态中,每个状态出现的概率。这里的隐含状态是天气,那么我们可以根据该地区历史的天气情况,分别统计出一年中,下雨的天数是多少,天晴的天数是多少,除以一年365(或者366)天,即可得到下雨的概率和天晴的概率是多少了,假设如下:


startprob = { 0.3, 0.7 }


二、确定隐含状态的转移概率


转移概率是指隐含状态之间转移的概率。这里的隐含状态只有两个——下雨和天晴,那么转移概率有:


下雨 -> 天晴    概率:0.3

天晴 -> 下雨    概率:0.4


只有这两种吗?肯定不止,还有以下两种情况:


下雨 -> 下雨 概率:0.7

天晴 -> 天晴 概率:0.6


这个数据也可以根据去年的所有天气中,前一天和后一天的状态转换,把它们计算出来。


一般我们使用一个矩阵来表达,所以也叫隐含状态的概率转移矩阵:


下雨    天晴

下雨      0.7      0.3

天晴      0.4      0.6


————

本文由 大数据分析实战 撰写,大家可 用手长按识别下方二维码 关注微信订阅号“ 数据分析实战


三、确定显示状态


所谓的显示状态,就是已知的状态,也就是我们看到的状态,这里有三个,分别是 公园散步、外出购物、清理房间


obs =  { 公园散步, 外出购物, 清理房间 }


四、确定输出概率矩阵


所谓输出概率矩阵,是指已知某个隐含状态的前提下,出现某个显示状态的概率。例如天晴去公园散步的概率是 0.6,去购物的概率是0.3,打扫房间的概率是0.1。


我们知道,如果隐含状态有2个,显示状态有3个,那么总共有2*3=6个输出概率,一般也是使用矩阵来表示。根据去年的历史天气记录,以及朋友朋友圈的状态,即可统计出输出概率矩阵如下所示:


公园散步    外出购物    清理房间

下雨           0.1            0.4            0.5

天晴           0.6            0.3            0.1


知道了上面这四大条件后,我们就可以来计算隐含状态,也就是出现显示状态是 [ 公园散步, 外出购物, 清理房间 ] ,最可能的隐含状态是什么?


因为我们不讲解原理,直接上代码,使用Python来计算,如下图所示:



执行代码,即可得到:








请到「今天看啥」查看全文