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. ORA-01940: cannot drop a user that is currently connected 问题解析

    https://www.linuxidc.com/Linux/2012-12/76448.htm

  2. ngxtop

    http://www.cnblogs.com/felixzh/p/8709201.html

  3. 在C#中使用Json.Net进行序列化和反序列化及定制化

    序列化(Serialize)是将对象转换成字节流,并将其用于存储或传输的过程,主要用途是保存对象的状态,以便在需要时重新创建该对象:反序列化(Deserialize)则是将上面的字节流转换为相应对象的 ...

  4. luogu P2912 [USACO08OCT]牧场散步Pasture Walking

    题目描述 The N cows (2 <= N <= 1,000) conveniently numbered 1..N are grazing among the N pastures ...

  5. Java Enum枚举的用法(转)

    说明:Java的枚举比dotnet的枚举好用,至少支持的方式有很多. 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以 ...

  6. 远程唤醒UP Board

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文使用Markdown写成,为获得更好的阅读体验和正常的图片.链接,请访问我的博客: http://www.cnblogs.co ...

  7. Android——ListView优化

    1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分 ...

  8. DASH----Desktop and mobile Architecture for System Hardware----桌面和移动系统硬件架构(DASH)计划

    http://baike.baidu.com/subview/813787/11301142.htm http://sites.amd.com/cn/business/it-solutions/man ...

  9. 依据iPhone6设计稿动态计算rem值

    rem 单位在做移动端的h5开发的时候是最常常使用的单位. 为解决自适应的问题.我们须要动态的给文档的更节点加入font-size 值.使用mediaquery 能够解决问题,可是每个文件都引用一大串 ...

  10. Qt linux文件同步写入

    因为linux 系统机制问题,文件的创建和写入并不会直接写入硬盘.而是先写入缓存,当系统要关闭或须要时才写入硬盘.为防止突然掉电,应将缓存中的文件及时同步到硬盘上去. linux 下的sync 命令具 ...