Introduction

通常,我们对发生在时间域上的事件希望可以找到合适的模式来描述。考虑下面一个简单的例子,比如有人利用海草来预测天气,民谣告诉我们说,湿漉漉的海草意味着会下雨,而干燥的海草意味着会天晴,而如果海草不是很湿也不是很干燥,比如潮湿的状态,那么我们恐怕很难断定天气会怎样,可能下雨也可能天晴,我们或许可以根据昨天的天气来进行判断,根据昨天的天气和今天海草的状态,或许可以有一个更好的预测。

上面介绍的预测系统,就是我们接下来要探讨的模型的一个典型例子。在这个教程中,我们主要探讨以下几个问题:

1: 首先我们要介绍在时间域上形成概率模式的系统,比如上面提到的天气预测。

2: 然后我们会看到,在这个系统里,我们观察到的并不是我们想要预测的,我们想要预测

的模式是隐藏的,比如上面的天气预测,我们观察到的是海草的状态,但是我们要预测的是天气。

3: 最后我们会看看这个系统能够解决的一些问题,比如上面的天气预测,如何根据海草一个

礼拜的状态来判断这个礼拜的天气,如何根据海草一段时间的状态确定现在所处的季节等。

Generating Patterns

考虑一组交通灯,通常情况下,交通灯的顺序可以表示为:红灯-绿灯-黄灯然后又转回红灯,交通灯的状态可以用状态机来表示,我们可以注意到,每个状态只与之前的状态决定,就是说如果当前状态是红灯,那么下一个状态一定是绿灯,这种系统称为确定性系统,因为状态之间的转换是确定的。

再来看看另外一个例子,就是之前提到的天气预测,我们假设有三种天气:晴天,雨天和多云。一般来说,我们都知道,这三种天气之间没有确定的转换关系,晴天之后可能是雨天,也可能是多云,这种系统就是不确定性系统,因为状态之间的转换是不确定的。很明显,如果不做任何假设,我们无法建立一个有效地模型去模拟这类系统。

一个可能的解决方案就是就是加入某些假设,将不确定性系统当成确定性系统来对待,我们假设系统的当前状态取决于系统的前一状态,这个假设称为马尔科夫假设,这个假设使得问题大大简化了,但是当然代价就是丢失了很多信息。虽然这个假设很多时候和实际不符,但是这个假设却能有效地解决很多实际问题,即使它建立的模型做出的预测不是完全正确的。

Markov Process

在一个马尔科夫过程中,一个状态转移到下一个状态的概率,取决于之前的n个状态,这个过程称为n阶模型,n表示影响状态转换的其它状态的个数。最简单的马尔科夫过程是一阶过程模型,意味着当前状态只取决于前面的一个状态。

注意到,对于有M个状态的一阶马尔科夫过程,存在M2个转换关系,因为任何状态之间的转换都是可能的,每一个转换都有一个概率,称为转换概率,所有这些转换概率可以构成一个矩阵,称为转换概率矩阵,而非常关键的一点假设是这些转换概率是不会随着时间变化的。如下的转换矩阵显示了几种天气之间的转换概率。

从转换矩阵可知,如果昨天是晴天,那么今天是晴天的概率是0.5,而今天是多云的概率是0.375,注意每一行的概率之和应该都为1. 我们需要对这样一个系统定义一个初始状态,我们用一个向量π来表示这个系统的初始状态,如下所示:

从系统的初始状态可以看出,今天为晴天的概率是1。

现在,我们定义了一个一阶的马尔科夫过程,它包括

1: 状态:三个状态——晴天,雨天,多云。

2: 初始向量:用来描述系统所含初始状态的概率。

3: 状态转换矩阵:描述每个状态之间相互转换的概率。

Limitations of a Markov Process

前面我们介绍了马尔科夫过程,并且了解了马尔科夫过程的几个要素:比如初始状态,转换矩阵等等。利用马尔科夫过程,可以对一些连续发生的事件做预测。但是有的时候,有些模式利用马尔科夫过程不能有效地进行描述,比如前面的天气预测系统,为了预测今天的天气,我们需要知道昨天的天气以及转换矩阵,但是有的时候我们不知道昨天的天气,只能知道海草的状态,民谣告诉我们,海草的状态和天气是紧密相关的。这种情况下,我们有两类状态,一类是可观察的(海草的状态),另一类是隐藏的(当天的天气),我们希望可以设计一个模型,能够基于海草的状态和马尔科夫假设来预测天气,而不需要知道之前的天气情况。

我们仍然以天气预测系统为例,假设有三种天气(即三个隐藏变量)需要预测(晴天,雨天,多云),而可观察的变量:即海草的状态有四种(dry, dryish, damp,soggy),我们可以发现,可观察变量的个数与隐藏变量的个数是不一样的,而可观察变量的转换过程与隐藏变量的转换过程存在一定的联系,我们利用隐马尔科夫模型

来模拟这类系统,在隐马尔科夫模型中,有一个隐马尔科夫过程,而可观察变量与隐藏变量是有联系的。

Hidden Markov Models

下图显示了天气预测系统中,可观察变量(海草的状态)与隐藏变量(天气情况)之间的转换关系,隐藏变量之间的转换是由一个简单的一阶马尔科夫过程来描述。

图中,可观察变量与隐藏变量之间的连线表示当隐马尔科夫过程处于某一特定状态时,生成某一对应可观察变量的概率。一个可观察变量可能由任何一个隐藏变量

生成,所以生成该可观察变量的概率之和应该为1。即Pr(Obs|Sun)+Pr(Obs|Rain)+Pr(Obs|Cloud)=1。

除了定义马尔科夫过程的概率,我们还定义了隐藏变量与可观察变量之间的转换关系,用一个矩阵表示,称为confusion矩阵,如下图所示:

我们可以看到,其每一行的和为1。

Summary

我们已经看到,隐马尔科夫模型包含以下几个要素:

隐藏状态:系统真正需要预测的状态,可以用一个马尔科夫过程描述。

可观察状态:系统显露出来的状态。

初始向量:用来描述系统中隐含模型在某一特定初始隐藏状态的概率。

状态转换矩阵:描述每个状态之间相互转换的概率。

confusion 矩阵:包含系统隐含模型在隐藏状态下生成可观察状态的概率。

所以简单来说,一个隐马尔科夫模型是一个标准的马尔科夫过程,加上一系列可观察的状态,以及可观察状态与隐藏状态的联系(用概率表示)。

参考来源:

http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html

机器学习 Hidden Markov Models 1的更多相关文章

  1. 机器学习 Hidden Markov Models 2

    Hidden Markov Models 下面我们给出Hidden Markov Models(HMM)的定义,一个HMM包含以下几个要素: ∏=(πi)表示初始状态的向量.A={aij}状态转换矩阵 ...

  2. 机器学习 Hidden Markov Models 3

    Viterbi Algorithm 前面我们提到过,HMM的第二类问题是利用HMM模型和可观察序列寻找最有可能生成该观察序列的隐藏变量的序列.简单来说,第一类问题是通过模型计算生成观察序列的概率,而第 ...

  3. 隐马尔科夫模型(Hidden Markov Models)

    链接汇总 http://www.csie.ntnu.edu.tw/~u91029/HiddenMarkovModel.html 演算法笔记 http://read.pudn.com/downloads ...

  4. PRML读书会第十三章 Sequential Data(Hidden Markov Models,HMM)

    主讲人 张巍 (新浪微博: @张巍_ISCAS) 软件所-张巍<zh3f@qq.com> 19:01:27 我们开始吧,十三章是关于序列数据,现实中很多数据是有前后关系的,例如语音或者DN ...

  5. 隐马尔科夫模型(Hidden Markov Models) 系列之三

    转自:http://blog.csdn.net/eaglex/article/details/6418219 隐马尔科夫模型(Hidden Markov Models) 定义 隐马尔科夫模型可以用一个 ...

  6. [Bayesian] “我是bayesian我怕谁”系列 - Markov and Hidden Markov Models

    循序渐进的学习步骤是: Markov Chain --> Hidden Markov Chain --> Kalman Filter --> Particle Filter Mark ...

  7. Hidden Markov Models笔记

    Andrew Ng CS229 讲义: https://pan.baidu.com/s/12zMYBY1NLzkluHNeMNO6MQ HMM模型常用于NLP.语音等领域. 马尔科夫模型(Markov ...

  8. 隐马尔科夫模型(Hidden Markov Models) 系列之五

    转自:http://blog.csdn.net/eaglex/article/details/6458541 维特比算法(Viterbi Algorithm) 找到可能性最大的隐藏序列 通常我们都有一 ...

  9. 隐马尔科夫模型(Hidden Markov Models) 系列之四

    转自:http://blog.csdn.net/eaglex/article/details/6430389 前向算法(Forward Algorithm) 一.如果计算一个可观察序列的概率?   1 ...

随机推荐

  1. centos7 安装teamviewer 报错libQt5WebKitWidgets.so.5()(64bit)

    https://blog.csdn.net/kenny_lz/article/details/78884603

  2. IOC基本理解

    什么是IOC? IOC全称为控制反转(Inversion Of Control),别名依赖注入(Dependency Injection). 控制反转即指我们获取依赖的方式发生了反转. 假设存在如下情 ...

  3. 51 NOD 1406 and query

    我们知道一个数S会对所有它的子集S'产生1的贡献,但是我们直接枚举子集是 3^(log2 1000000)的,会炸掉:如果直接把每个有1的位变成0往下推也会凉掉,因为这样会有很多重复的. 但是我们发现 ...

  4. springBoot 跨域处理

    首先喝水不忘挖井人,博客参考:https://www.cnblogs.com/nananana/p/8492185.html 方式一:新增一个configration类 或 在Application中 ...

  5. Mac--安装kubernetes并运行echoserver

    安装minikube curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.15.0/minikube-darwi ...

  6. 空暇时候思考2(&#39;\0&#39;等价于数字0还是字符0)

    /********************************************************************** * * Copyright (c)2015,WK Stu ...

  7. 转: CentOS 6 使用 yum 安装MongoDB及服务器端配置

    转: http://www.cnblogs.com/shanyou/archive/2012/07/14/2591838.html CentOS 6 使用 yum 安装MongoDB及服务器端配置   ...

  8. SQL ORDER BY 关键字

    SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集进行排序. SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序. ORDER BY ...

  9. HDU 1003 Max Sum (动规)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  10. Linux C++的多线程编程(转)

    1. 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(proces ...