首页 > 代码库 > 炎热天气看书还是钓鱼?隐马尔科夫模型教你预测!
炎热天气看书还是钓鱼?隐马尔科夫模型教你预测!
高温天气与行为概率
夏季是一年最热的时候,气温普遍偏高,一般把日最高气温达到35℃以上的天气叫作高温天气,但是一般情况下高温天气分为两类。
(1)干热型高温。一般是指气温较高、太阳辐射强而且空气的湿度较小的高温天气。
(2)闷热型高温。一般是指水汽丰富,但是气温相对而言并不算太高,给人感受闷热。
小张在不同类型下的高温天气下会有不同的行为,但是归纳起来为主要为散步、垂钓、看书三类,分别在干热型高温和闷热型高温下对应行为的概率见下表。
假设干热型高温和闷热型高温之间会进行相互转变,每天可能都会发生改变,但都是二者之一,相互转变的概率见表。
除此之外,还已知每年进入夏季的高温天气时,干热型高温的概率是0.6,闷热型高温的概率是0.4。
因此,总结上述内容可以整理为下图。
根据上述已知信息,则小张最近三天做的事情分别是:散步、垂钓、看书的概率是多少?
原理分析
隐马尔科夫模型(Hide Markov Model)是一种概率统计模型,实质是一种隐藏状态马尔科夫模型,在一般的马尔科夫模型中,状态对于观察者是显示可见的,但是在隐马尔科夫模型中,状态被隐藏不被观察者显示可见,但是与状态相关的某些变量则是已知可获取的。
在了解隐马尔科夫模型之前,需要提前了解马尔科夫过程,可以将马尔科夫过程视为一个自动机,各个状态之间的转换存在一定的概率。若某个系统中存在N个状态,在某个时间点t时刻都处于N个状态中的一个状态,将这N个状态的集合视为{S1,S2,S3,…,SN},利用Q表示在时间1,2,3,…,t时的状态{Q1,Q2,Q3,…,Qt},使用马尔科夫模型,则需要理解马尔科夫模型在使用之前的两点假设。
(1)当前状态的可能性只可能与前一个状态有关,与其他时刻无直接关系。
(2)状态的转移概率与时间无直接关系,时间只是一个状态表现系数。
基于假设1,需要一个初始概率分布PI,其中PI(SN)表示在最初时刻(t=1)时当前状态为SN的概率,这种概率与时间t无关系,一个马尔科夫过程的示例如下,即在不同时刻的状态及状态之间的转移概率。
隐马尔科夫模型适合用于有未知条件的问题,它将隐藏的状态映射到N个可能的变量中,因此在某个时间t时,隐藏的状态则会有N种可能,依次类推,以1为时间单位,则在t+1时隐藏状态也会有N中可能性,在t+1时刻的状态与时间t的状态是密切相关,因此从时间t到时间t+1,隐藏状态有N2种可能性。即图7-3中的状态信息是N种可能变量,因此隐马尔科夫模型实际是包含两重随机过程,一方面状态之间的转移是一个随机过程;另一方面状态和可能的变量也是一个随机过程,它的过程如下。
上图中,将状态S替换为了函数X,函数X表示在t时刻最大可能的状态,因此这里也不难看出隐马尔科夫模型的“隐”所表达的含义。在隐马尔科夫模型中,有五个非常重要的参数。结合医生给疑似感冒病人看病的过程解释该参数,中医一般通过“望闻问切”的方法给病人看病,病人只有“正常”和“感冒”两种可能,但是无法直接给出疑似病人“正常”或“感冒”,需要对疑似病人进行观察,目的是推断疑似感冒病人是否真实感冒,见下表。
隐马尔科夫模型作为一种有监督的模型,需要通过语料库对模型进行训练,而训练过程中主要的任务是获得上述五个参数的值,求解相应的问题。使用隐马尔科夫模型可以求解三类常见的数学问题。
(1)已知模型的五个参数,求解某一特定序列的输出概率。此类问题一般用于预测可能所属的序列概率,在获得五个参数之后,可以采用forward算法进行后续求解。
(2)已知模型的五个参数,求解某一特定序列的隐藏状态序列。主要用于分析观察序列可能对应的隐藏状态。例如,利用观察状态“流鼻涕、打喷嚏、咳嗽”去分析疑似病人属于隐藏“正常”或“感冒”的概率。一般采用维特比算法进行后续求解。
(3)已知模型的最终输出序列,求解可能的状态转移概率,一般采用Baum-Welch算法及Reversed Viterbi算法进行后续求解。
高温天气与行为概率
根据上面“高温天气的类型与行为活动之间关系”图的内容,且已知小张最近三天做的事情分别是散步、垂钓、看书,最直观的解法是利用穷举的方式,将所有的高温天气类型在每天进行穷举,第一天只有两种类型,第一天与第二天的高温天气类型有四种,连续三天的高温天气类型序列则有八种, 计算每种情况下的散步、垂钓、看书的概率,此种方法虽然便于理解,但是随着计算的观察序列不断增加,计算耗费的性能则会指数级上升。
因此,为简化计算性能可以利用向前算法进行推算。计算步骤如下所示。
(1)计算第一天时小张进行散步的概率。
如果是干热型高温,则
P(散步,干热型高温)=P(第一天干热型高温)×P(散步|干热型高温)
=0.6×0.31
=0.186
同理,如果是闷热型高温,则
P(散步,闷热型高温)=P(第一天闷热型高温)×P(散步|闷热型高温)
=0.4×0.46
=0.184
(2)计算第二天小张进行垂钓的概率。
根据马尔科夫的性质,计算第二天的概率,则是依赖于第一天的结果,因此在基于第一天的基础上,分别计算在两种高温天气的类型下,小张进行垂钓的概率。
如果是干热型高温,则
P(第一天散步,第二天垂钓,第二天干热型高温)=[P(第一天散步,干热型高温)×P(第二天干热型高温|第一天干热型高温)+P(第一天散步,闷热型高温)×P(第二天干热型高温|第一天闷热型高温)]×P(第二天垂钓|第二天干热型高温)
= (0.186×0.7+0.184×0.6)×0.24
= 0.057744
如果是闷热型高温,则
P(第一天散步,第二天垂钓,第二天闷热型高温)= [P(第一天散步,闷热型高温)×P(第二天闷热型高温|第一天闷热型高温)+P(第一天散步,干热型高温)×P(第二天闷热型高温|第一天干热型高温)]×P(第二天垂钓|第二天闷热型高温)
= (0.184×0.6+0.186×0.3)×0.33
= 0.054846
(3)计算第三天小张看书的概率。
如果是干热型高温,则:
P(第一天散步,第二天垂钓,第三天看书,第三天干热型高温)=[(第一天散步,第二天垂钓,第二天干热型高温)×P(第三天干热型高温| 第二天干热型高温)+P(第一天散步,第二天垂钓,第二天闷热型高温)×P(第三天干热型高温| 第二天闷热型高温)]×P(第三天看书| 第三天干热型高温)
= (0.057744×0.7+0.054846×0.6)×0.45
= 0.03299778
如果是闷热型高温,则:
P(第一天散步,第二天垂钓,第三天看书,第三天闷热型高温)=[(第一天散步,第二天垂钓,第二天闷热型高温)×P(第三天闷热型高温| 第二天闷热型高温)+P(第一天散步,第二天垂钓,第二天干热型高温)×P(第三天闷热型高温| 第二天干热型高温)] ×P(第三天看书| 第三天闷热型高温)
= (0.054846×0.6+ 0.057744×0.3)×0.21
= 0.010548468
则P(第一天散步,第二天垂钓,第三天看书)的概率,则为第三天干热型高温和闷热型高温之和,即 P(第一天散步,第二天垂钓,第三天看书)=P(第一天散步,第二天垂钓,第三天看书,第三天闷热型高温)+P(第一天散步,第二天垂钓,第三天看书,第三天干热型高温)=0.0435
上述过程利用向前算法可能序列的概率预测,是隐马尔科夫模型的典型应用之一,是将未发生的事情进行概率性预测,倘若将问题改为已发生的事件“求最近三天小张进行的活动是散步、垂钓、看书,则最近三天可能的高温天气类型”,则需要利用本书3.4节中介绍的维特比算法选择最可能的概率路径。
隐马尔科夫模型还被应用到语言识别领域,科大讯飞曾利用隐马尔科夫模型进行语音训练,取得了较好的效果。除此之外,该模型还在生物基因领域也有深入应用,主要对基因序列的分析和预测,此外还有自然语言处理领域。在中文中也可以采用隐马尔科夫模型进行中文分词、词性分析等,并可进行机器翻译,如果利用隐马尔科夫模型进行中文分词,则隐马尔科夫模型训练的五个参数见下表。
中文分词实际是求给定汉字的序列,求汉字隐藏的状态,即单字成词、词头、词中、词尾,通过这些状态将汉字组成词,达到分词的目的。求可能的状态可以利用维特比算法进行求解。
总之,有关数据序列及数据概率的问题,都可以利用隐马尔科夫模型的思想进行分析,甚至求解获得解决方案。
本文选自《大数据时代的算法:机器学习、人工智能及其典型实例》,点此链接可在博文视点官网查看此书。
想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
本文出自 “博文视点官方博客” 博客,请务必保留此出处http://bvbroadview.blog.51cto.com/3227029/1898447
炎热天气看书还是钓鱼?隐马尔科夫模型教你预测!