隐马尔可夫模型

隐马尔可夫模型

一、马尔可夫链(Markov Chain)

马尔可夫链,又称离散时间马尔可夫链(对于连续时间马尔可夫链称之为马尔可夫过程)。是一个随机过程(研究不确定性下的运动的方法),例如著名的布朗运动的研究方法就是一个随机过程方法。

它具有马尔可夫性质:下一步状态之和当前状态有关,与当前状态之前所有的状态无关

即: P [ S t + 1 ∣ S t ] = P [ S t + 1 ∣ S t , S t − 1 , . . . , S 1 ] P[S_{t+1}|S_t] = P[S_{t+1}|S_t,S_{t-1},...,S_1] P[St+1St]=P[St+1St,St1,...,S1]

引用“车卡门”的《马尔可夫链(Markov Chain)是什么鬼》中的例子进行解释

我们村智商为0的王二狗,人傻不拉几的,见人就傻笑,每天中午12点的标配,仨状态:吃,玩,睡。这就是传说中的状态分布。

在这里插入图片描述

你想知道他n天后中午12点的状态么?是在吃,还是在玩,还是在睡?这些状态发生的概率分别都是多少?

假设1:王二狗每个状态的转移都是有概率的,则概率转移矩阵 A A A如下:
在这里插入图片描述

假设2:王二狗初始状态概率分布 π π π
在这里插入图片描述

总结:马尔可夫链就是一个随机过程,它将来的分布只取决于现在,跟过去无关

二、隐马尔可夫模型

《统计学习方法》一书中如此定义:
隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测从而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列;每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可以看作是一个时刻。

关键词:时序、隐藏的马尔可夫链、状态随机序列、观测随机序列

引用《统计学习方法》P195页中例子进行解释

(盒子和球模型)假设有4个盒子,每个盒子里都装有红、白两种颜色的球,盒子里的红、白球数由表10.1列出。

盒子
1234
红球数5368
白球数5742
按照下面的方法抽球,产生一个球的颜色的观测序列:
  • 开始,从4个盒子里以等概率随机选取1个盒子,从这个盒子里随机抽出1个球,记录其颜色后,放回;
  • 然后,从当前盒子随机转移到下一个盒子,规则是:如果当前盒子是盒子1,那么下一个盒子一定是盒子2;如果当前是盒子2或3,那么分别以概率0.4和0.6转移到左边或右边的盒子;如果当前是盒子4,那么各以0.5的概率停留在盒子4或转移到盒子3;
  • 确定转移的盒子后,再从这个盒子里随机抽出1个球,记录其颜色,放回;
  • 如此下去,重复进行5次,得到一个球的颜色的观测序列:
    O = ( 红 , 红 , 白 , 白 , 红 ) O=(红,红,白,白,红) O=()

显然,这个过程是有着时间顺序的。其次,在最后的球的颜色观测序列中,不包含马尔可夫链的参数,所以是马尔可夫链是隐含的。最后,这个例子中有两个随机序列:

  1. 盒子的序列(状态序列)
  2. 球的颜色的观测序列(观测序列)

盒子序列属于隐含的马尔可夫链,所以是隐藏的,只有后者是可观测的。

隐马尔可夫模型形式定义如下:

  • Q Q Q:所有可能的状态的集合 Q = { 盒 子 1 , 盒 子 2 , 盒 子 3 , 盒 子 4 } , N = 4 Q=\{盒子1,盒子2,盒子3,盒子4\},N=4 Q={1234}N=4
  • V V V:所有可能的观测的集合 V = { 红 , 白 } , M = 2 V=\{红,白\},M=2 V={}M=2
  • I I I:长度为 T T T的状态序列 I = ( i 1 , i 2 , . . . , i T ) , T = 5 , i T ∈ Q I=(i_1,i_2,...,i_T), T=5,i_T∈Q I=(i1,i2,...,iT),T=5iTQ
  • O O O:状态对应的观测序列 O = ( o 1 , o 2 , . . . , o T ) , T = 5 , o T ∈ V O=(o_1,o_2,...,o_T),T=5,o_T∈V O=(o1,o2,...,oT),T=5,oTV
  • π π π: 初始概率分布 π = ( 0.25 , 0.25 , 0.25 , 0.25 ) T π=(0.25,0.25,0.25,0.25)^T π=(0.25,0.25,0.25,0.25)T
  • A A A:状态转移矩阵(规则)
    [ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] \left[ \begin{matrix} 0 & 1 & 0 & 0 \\ 0.4 & 0 & 0.6 &0\\ 0 & 0.4 & 0 &0.6\\ 0 & 0 & 0.5 &0.5 \end{matrix} \right] 00.400100.4000.600.5000.60.5
  • B B B:观测概率矩阵(每一个盒子里面观测到红球或白球的概率分布)
    [ 0.5 0.5 0.3 0.7 0.6 0.4 0.8 0.2 ] \left[ \begin{matrix} 0.5 & 0.5 \\ 0.3 & 0.7\\ 0.6 & 0.4 \\ 0.8 & 0.2 \end{matrix} \right] 0.50.30.60.80.50.70.40.2

隐马尔可夫模型由初始概率分布 π π π状态转移概率分布 A A A以及观测概率分布 B B B确定,即:
λ = ( A , B , π ) λ=(A,B,π) λ=(A,B,π)
从定义可知,隐马尔可夫模型作了两个基本假设:

  1. 齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻t的转台只依赖与前一时刻的状态,与其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关:
    P ( i t ∣ i t − 1 , o t − 1 , . . . , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) P(i_t|i_{t-1},o_{t-1},...,i_1,o_1) = P(i_t|i_{t-1}) P(itit1,ot1,...,i1,o1)=P(itit1)
  2. 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关:
    P ( o t ∣ i T , o T , i T − 1 , o T − 1 , . . . , i t + 1 , o t + 1 , i t , i t − 1 , o t − 1 , . . . , i 1 , o 1 ) = P ( o t ∣ i t ) P(o_t|i_T,o_T,i_{T-1},o_{T-1},...,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},...,i_1,o_1) = P(o_t|i_t) P(otiT,oT,iT1,oT1,...,it+1,ot+1,it,it1,ot1,...,i1,o1)=P(otit)

三、具体实例

假设我有一个伦敦的朋友,她每天跟我打电话告诉我她当天做了什么。她说她只对三种活动感兴趣:公园散步,购物以及打扫房间
下雨了她很少散步,大多是去购物或者打扫房间。
如果是晴天,她大多是进行户外活动,例如散步购物,比较少待在家里打扫。
则对应的观测概率矩阵 B B B为:

B散步购物打扫
下雨0.10.40.5
晴天0.60.30.1

我不会去了解伦敦的天气情况,但是我大概知道伦敦天气的总体趋势π(夏天晴天比较多,冬天雨天比较多):

π下雨晴天
初始0.60.4

并且我知道天气的状态转移概率 A A A:

A下雨晴天
下雨0.70.3
晴天0.60.4

于是我可以根据对她行为的观测,建立隐马尔可夫模型 λ = ( A , B , π ) λ=(A,B,π) λ=(A,B,π)来对伦敦的天气进行猜测。

四、隐马尔可夫模型的3个基本问题

  1. 概率计算问题。给定:模型: λ = ( A , B , π ) λ = (A,B,π) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ λ λ下观测序列 O O O出现的概率 P ( O ∣ λ ) P(O|λ) P(Oλ)
  2. 学习问题。已知观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),估计模型 λ = ( A , B , π ) λ = (A,B,π) λ=(A,B,π)参数,使得在该模型下观测序列概率 P ( O ∣ λ ) P(O|λ) P(Oλ)最大。即用极大似然估计的方法估计参数。
  3. 预测问题,也称为解码(decoding) 问题。已知模型 λ = ( A , B , π ) λ = (A,B,π) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),求对给定观测序列条件概率 P ( I ∣ O ) P(I|O) P(IO)最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT)。即给定观测序列,求最有可能的对应的状态序列。

继续举例子:(T=3)

  1. 已知整个模型,我朋友告诉我,连续三天,她下班后做的事情分别是:散步,购物,打扫。那么,根据模型,计算产生这些行为的概率是多少。
  2. 最复杂的,我朋友只告诉我这三天她分别做了这三件事,而其他什么信息我都没有。她要我建立一个模型,晴雨转换概率,第一天天气情况的概率分布,根据天气情况她选择做某事的概率分布。
  3. 同样知晓这个模型,同样是这三件事,我朋友要我猜,这三天她下班后北京的天气是怎么样的。这三天怎么样的天气才最有可能让她做这样的事情。

对于以上的问题,“巨人们”已经给我们找出了解决的办法:

  • 第一个问题(概率计算问题):直接计算法(穷举),前向算法,后向算法
  • 第二个问题(学习问题):
  • 第三个问题(预测问题):

4.1、直接计算法

  1. 已知模型 λ = ( A , B , π ) λ = (A,B,π) λ=(A,B,π)和观测序列 O = ( 购 物 , 散 步 , 打 扫 ) O=(购物,散步,打扫) O=(),求该观测序列出现的概率 ( T = 3 ) (T=3) T=3
  2. π π π A A A求所有的长度为 ( T = 3 ) (T=3) T=3的状态序列 I 状 态 序 列 I_{状态序列} I,例:
状态序列概率P(I|λ)
1[雨,雨,晴]0.6×0.7×0.3=0.126
2[雨,雨,雨]0.6×0.7×0.7=0.294
3[雨,晴,晴]0.6×0.3×0.4=0.072
4[雨,晴,雨]0.6×0.3×0.6=0.108
5[晴,雨,雨]0.4×0.6×0.7=0.168
6[晴,雨,晴]0.4×0.6×0.3=0.072
7[晴,晴,雨]0.4×0.4×0.6=0.096
8[晴,晴,晴]0.4×0.4×0.4=0.064
检验将各个概率相加1
  1. 由于观测序列已知,结合观测矩阵 B B B求各个状态下该观测序列的概率,例:
状态序列观测序列O=(购物,散步,打扫)的对应概率
1[雨,雨,晴]0.4×0.1×0.1=0.004
2[雨,雨,雨]0.4×0.1×0.5=0.02
3[雨,晴,晴]0.4×0.6×0.1=0.024
4[雨,晴,雨]0.4×0.6×0.5=0.12
5[晴,雨,雨]0.3×0.1×0.5=0.015
6[晴,雨,晴]0.3×0.1×0.1=0.003
7[晴,晴,雨]0.3×0.6×0.5=0.09
8[晴,晴,晴]0.3×0.6×0.1=0.018
检验将各个概率相加0.294
  1. 将观测序列 O O O与对应的状态序列 I I I出现的概率相乘,可以得出 O 和 I O和I OI的联合分布,即: P ( O , I ∣ λ ) = P ( O ∣ I , λ ) P ( I ∣ λ ) P(O,I|λ)=P(O|I,λ)P(I|λ) P(O,Iλ)=P(OI,λ)P(Iλ)
  2. 最后,对所有的 P ( O , I ∣ λ ) P(O,I|λ) P(O,Iλ)求和,即可以得到观测序列 O O O的概率 P ( O ∣ λ ) P(O|λ) P(Oλ)

但是,这种方法的计算时间复杂度为 O ( T N T ) O(TN^T) O(TNT)级别,所以实际不可行。

4.2、前向算法

已知模型 λ = ( A , B , π ) λ=(A,B,π) λ=(A,B,π)和观测序列 O = ( 购 物 , 散 步 , 打 扫 ) O=(购物,散步,打扫) O=(),求该观测序列出现的概率 ( T = 3 ) (T=3) T=3。前向算法把问题拆开为T个步骤,一步一步算出每一个观测所对应的概率。用上面的例子来进行说明:

按照观测序列,第一天我观测到了我朋友进行的是购物活动,那么我基于 π π π B B B可以得到
a 1 ( i = 雨 ) = P ( o 1 = 购 物 , i 1 = 雨 ∣ λ ) = 0.6 × 0.4 = 0.24 a 1 ( i = 晴 ) = P ( o 1 = 购 物 , i 1 = 晴 ∣ λ ) = 0.4 × 0.3 = 0.12 a_1(i=雨)=P(o_1=购物,i_1=雨|λ)=0.6×0.4=0.24\\ a_1(i=晴)=P(o_1=购物,i_1=晴|λ)=0.4×0.3=0.12 a1(i=)=P(o1=i1=λ)=0.6×0.4=0.24a1(i=)=P(o1=i1=λ)=0.4×0.3=0.12

这个概率称为:在模型 λ λ λ,且状态 i 1 i_1 i1的条件下,观测到 o 1 o_1 o1的概率,也叫做前向概率: a 1 ( i ) a_1(i) a1(i)
更一般的,对于T次观测,前向概率的定义为:
前 向 概 率 : a t ( i ) = P ( o 1 , o 2 , . . . , o t , i t = q i ∣ λ ) ( i : 第 i 个 状 态 ) 前向概率:a_t(i)=P(o_1,o_2,...,o_t,i_t=q_i|λ) (i:第i个状态) at(i)=P(o1,o2,...,ot,it=qiλ)ii

第二天,我观测到了我朋友进行的是散步,那么我基于第一天的观测和 B B B可以得到
a 2 ( i = 雨 ) = [ ∑ i = 1 2 a 1 ( i ) a i 1 ] b 1 ( o 2 = 散 步 ) a 2 ( i = 晴 ) = [ ∑ i = 1 2 a 1 ( i ) a i 2 ] b 2 ( o 2 = 散 步 ) a_2(i=雨)=[\sum_{i=1}^2a_1(i)a_{i1}]b_1(o_2=散步)\\ a_2(i=晴)=[\sum_{i=1}^2a_1(i)a_{i2}]b_2(o_2=散步) a2(i=)=[i=12a1(i)ai1]b1(o2=)a2(i=)=[i=12a1(i)ai2]b2(o2=)
以此类推,
第三天我观测到打扫可以得到
a 3 ( i = 雨 ) = [ ∑ i = 1 2 a 2 ( i ) a i 1 ] b 1 ( o 3 = 打 扫 ) a 3 ( i = 晴 ) = [ ∑ i = 1 2 a 2 ( i ) a i 2 ] b 2 ( o 3 = 打 扫 ) a_3(i=雨)=[\sum_{i=1}^2a_2(i)a_{i1}]b_1(o_3=打扫)\\ a_3(i=晴)=[\sum_{i=1}^2a_2(i)a_{i2}]b_2(o_3=打扫) a3(i=)=[i=12a2(i)ai1]b1(o3=)a3(i=)=[i=12a2(i)ai2]b2(o3=)
最后,该观测序列 O = ( 购 物 , 散 步 , 打 扫 ) O=(购物,散步,打扫) O=()发生的概率为:
P ( O ∣ λ ) = ∑ i = 1 2 a 3 ( i ) P(O|λ)= \sum_{i=1}^2a_3(i) P(Oλ)=i=12a3(i)

4.3、后向算法

顾名思义,向前算法是在时间 t=1的时候,一步一步往前计算。而相反的,向后算法则是倒退着,从最后一个状态开始,慢慢往后推。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值