zoukankan      html  css  js  c++  java
  • 炎热天气看书还是钓鱼?隐马尔科夫模型教你预测!

    高温天气与行为概率

      夏季是一年最热的时候,气温普遍偏高,一般把日最高气温达到35℃以上的天气叫作高温天气,但是一般情况下高温天气分为两类。 
      (1)干热型高温。一般是指气温较高、太阳辐射强而且空气的湿度较小的高温天气。 
      (2)闷热型高温。一般是指水汽丰富,但是气温相对而言并不算太高,给人感受闷热。 
      小张在不同类型下的高温天气下会有不同的行为,但是归纳起来为主要为散步、垂钓、看书三类,分别在干热型高温和闷热型高温下对应行为的概率见下表。 
    【图1】

      假设干热型高温和闷热型高温之间会进行相互转变,每天可能都会发生改变,但都是二者之一,相互转变的概率见表。 
    【图2】

      除此之外,还已知每年进入夏季的高温天气时,干热型高温的概率是0.6,闷热型高温的概率是0.4。 
      因此,总结上述内容可以整理为下图。 
    【图3】

      根据上述已知信息,则小张最近三天做的事情分别是:散步、垂钓、看书的概率是多少?

    原理分析

      隐马尔科夫模型(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无关系,一个马尔科夫过程的示例如下,即在不同时刻的状态及状态之间的转移概率。 
    【图4】
      隐马尔科夫模型适合用于有未知条件的问题,它将隐藏的状态映射到N个可能的变量中,因此在某个时间t时,隐藏的状态则会有N种可能,依次类推,以1为时间单位,则在t+1时隐藏状态也会有N中可能性,在t+1时刻的状态与时间t的状态是密切相关,因此从时间t到时间t+1,隐藏状态有N2种可能性。即图7-3中的状态信息是N种可能变量,因此隐马尔科夫模型实际是包含两重随机过程,一方面状态之间的转移是一个随机过程;另一方面状态和可能的变量也是一个随机过程,它的过程如下。 
    【图5】
      上图中,将状态S替换为了函数X,函数X表示在t时刻最大可能的状态,因此这里也不难看出隐马尔科夫模型的“隐”所表达的含义。在隐马尔科夫模型中,有五个非常重要的参数。结合医生给疑似感冒病人看病的过程解释该参数,中医一般通过“望闻问切”的方法给病人看病,病人只有“正常”和“感冒”两种可能,但是无法直接给出疑似病人“正常”或“感冒”,需要对疑似病人进行观察,目的是推断疑似感冒病人是否真实感冒,见下表。 
    【图6】

      隐马尔科夫模型作为一种有监督的模型,需要通过语料库对模型进行训练,而训练过程中主要的任务是获得上述五个参数的值,求解相应的问题。使用隐马尔科夫模型可以求解三类常见的数学问题。 
      (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节中介绍的维特比算法选择最可能的概率路径。 
      隐马尔科夫模型还被应用到语言识别领域,科大讯飞曾利用隐马尔科夫模型进行语音训练,取得了较好的效果。除此之外,该模型还在生物基因领域也有深入应用,主要对基因序列的分析和预测,此外还有自然语言处理领域。在中文中也可以采用隐马尔科夫模型进行中文分词、词性分析等,并可进行机器翻译,如果利用隐马尔科夫模型进行中文分词,则隐马尔科夫模型训练的五个参数见下表。 
    【图7】
      中文分词实际是求给定汉字的序列,求汉字隐藏的状态,即单字成词、词头、词中、词尾,通过这些状态将汉字组成词,达到分词的目的。求可能的状态可以利用维特比算法进行求解。 
      总之,有关数据序列及数据概率的问题,都可以利用隐马尔科夫模型的思想进行分析,甚至求解获得解决方案。 
      本文选自《大数据时代的算法:机器学习、人工智能及其典型实例》,点此链接可在博文视点官网查看此书。 
                         图片描述

    想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                           图片描述

  • 相关阅读:
    oracle中Blob和Clob类型的区别
    为什么要分库分表
    Enable file editing in Visual Studio's debug mode
    SQL Server Dead Lock Log
    Debug .NET Framework Source
    SQL Server text field里面有换行符的时候copy到excel数据会散乱
    诊断和修复Web测试记录器(Web Test Recorder)问题
    Can't load Microsoft.ReportViewer.ProcessingObjectModel.dll
    'telnet' is not recognized as an internal or external command
    Linq to XML
  • 原文地址:https://www.cnblogs.com/broadview/p/6405480.html
Copyright © 2011-2022 走看看