隐马尔可夫模型(HMM) - 1 - 基本概念

声明:

         1,本篇为个人对《2012.李航.统计学习方法.pdf》的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址)。

         2,由于本人在学习初始时有很多数学知识都已忘记,所以为了弄懂其中的内容查阅了很多资料,所以里面应该会有引用其他帖子的小部分内容,如果原作者看到可以私信我,我会将您的帖子的地址付到下面。

         3,如果有内容错误或不准确欢迎大家指正。

         4,如果能帮到你,那真是太好了。

 

基本概念

         惯例性,在刚看到“隐马尔可夫模型”这个名字时我的第一反应是:这什么鬼?于是在看书上的定义时一万个不明白....

         所以,为了能清楚的描述“隐马尔可夫模型”,我们还是从例子开始。

例子

         

         如上图所示,有4个盒子,每个盒子里都装有红白两种颜色的球,每个盒子中球的个数见上图。

         然后,按照下面的规则抽5次球:

                   第一次:从4个盒子里等概论随机选取1个盒子,然后从这个盒子里随机抽出1个球,记录其颜色后放回;

                   剩下4次:

                            若上一次是从盒子1中抽球,那这次一定是盒子2;

                            若上一次是盒子2或3,那这次则分别以0.4和0.6的概率选择左边或右边的盒子;

                            若上一次是盒子4,那这次各以0.5的概率选择是停留在盒子4还是转移到盒子3。

                            确定转译的盒子后,再从这个盒子里随机抽出一个球,记录其颜色后放回。

         就这样,得到一个球的颜色序列:

                   {红,红,白,白,红}

         在这个过程中,观察者只能观测到球颜色的序列,观测不到球是从哪个盒子取出的,即:观测不到盒子的序列。

        

         好了,题目描述完了,下面我们来汇总下上面的信息:

         第一步汇总:什么是“隐马尔可夫模型”

         1,在这个例子中有两个随机序列:

                   盒子的序列(之后称之为:状态序列)

                   球颜色的观测序列(之后称之为:观测序列)

         2,状态序列的每个状态值仅取决于前面有限个状态(见上面的“抽5次球的规则描述”),这种状态序列就是马尔可夫链。

         3,状态序列是隐藏的,观测序列是可观测的。

         于是乎,像这种由一个隐藏的马尔可夫链随机生成的不可观测的状态序列,再由各个状态生成一个观测而产生观测随机序列的过程,就是隐马尔可夫模型

                   PS:如果你了解EM算法的话,会发现“状态序列是隐藏的,观测序列是可观测的”这个条件和EM算法面临问题的条件有些像,即,“只知道结果,却不知道每个结果从哪个过程中得出”。于是这里要说一句:“隐马尔科夫模型”只是模型,它不是算法,这个不要弄混了,而可应用到这个模型的算法之一就是EM算法。

         第二步汇总:隐马尔可夫模型三要素

         由题目知:

         1,盒子对应的状态,即状态集合是:

                   Q= {盒子1,盒子2,盒子3,盒子4}

                   PS1:这里是状态集合,上面提到是状态序列

                            状态集合表述的是“所有可能的状态的集合”;

                            状态序列表述的是“实际操作中产生的状态序列”

                            注意不要弄混。

                   PS2:在定义中,状态集合中的各个元素用qn表示,即:Q = {q1, q2, ..., qN}

         2,状态序列因无法观测,所以不可知,但在定义中我们还是给出其表示方法,即:

                   I= (i1, i2, ..., iT)

         3,球颜色对应的观测,即观测集合是:

                   V= {红,白}

                   PS1:这里是观测集合,上面提到是观测序列

                            观测集合表述的是“所有可能的观测的集合”;

                            观测序列表述的是“实际操作中产生的观测序列”

                            注意不要弄混。

                   PS2:在定义中,观测集合中的各个元素用vn表示,即:V = {v1, v2, ..., vN}

         4,观测序列是:

                   O= {红,红,白,白,红}

                   在定义中,观测序列中的各个元素用oT表示,即:O = {o1, o2, ..., oT}

         5,状态序列和观测序列的长度T=5,这个长度的产生是因为一共进行了5次抽样,然后第一次抽样我们称之为时刻1,第二次称之为时刻2,以此类推。

         6,初始概率分布为:

                   π = (0.25,0.25, 0.25, 0.25)

                   在定义中,初始概率分布中的各个元素用πi表示,即:π=(πi),其中π=P(i1 = qi), i = 1, 2, ..., N,表示时刻t=1处于状态qi的概率。

         7,状态转移概率分布的矩阵为:

                  

                   PS:A = [aij]N*N,其中aij= P(it+1 = qj | it = qi), i = 1, 2,..., N; j = 1, 2, ..., N,表示在时刻t处于状态qi条件下,时刻t+1转译到状态qj的概率。如:a12(第一行第二列) = 1,表示:时刻t选择的盒子1(q1)时,时刻t+1选择盒子2(q2)的概率是1。

         8,观测概率分布矩阵为:

                  

                   PS:B = [bj(k)]N*N,其中,bj(k)= P(ot+1 = vk | it = qj), k = 1, 2,..., M; j = 1, 2, ..., N,表示在时刻t处于状态qj的条件下生成观测vk的概率。如B2(1) = 0.3,表示:时刻t处于状态盒子2(q2)时选择红球(v1)的的概率是0.3。

         有没有发现,由初始状态项链π、状态转移概率矩阵A和观测概率矩阵B就可以得出所有的可能情况,即:

                   状态转移概率矩阵A与初始状态概率向量π确定了隐藏的马尔科夫链,生成不可观测的状态序列;

                   观测概率矩阵B确定了如何从状态生成观测,与状态序列综合确定了如何产生概率序列。

         于是,综上所述。

         隐马尔可夫模型是由初始状态项链π、状态转移概率矩阵A和观测概率矩阵B决定。π和A决定状态序列,B决定观测序列

         因此A、B和π就是隐马尔可夫模型的三要素,而隐马尔可夫模型λ就可以用如下三元符号表示,即

                   λ = (A, B,π)

         下面汇总定义。

定义

         马尔科夫链是一种状态序列,这种状态序列的每个状态值仅取决于前面有限个状态。

         隐马尔可夫模型描述由一个隐藏的马尔可夫链随机生成的不可观测的状态序列,再由各个状态生成一个观测而产生观测随机序列的过程。

         隐马尔可夫模型λ就可以用如下三元符号表示,即

                   λ = (A, B,π)

         A,B,π是隐马尔可夫模型的三要素。

         PS:A, B,π等的含义这里就不再重复了,若有遗忘就看看上面的例子

观测序列的生成过程

         根据隐马尔可夫模型的定义,可以将一个长度为T的观测序列O = (o1, o2, ..., oT)的生成过程描述如下:

         算法(观测序列的生成)

                   输入:隐马尔可夫模型λ =(A, B,π),观测序列长度T;

                   输出:观测序列 O =(o1, o2, ..., oT)。

                   过程

                           

 

三个基本问题

         隐马尔可夫模型有3个基本问题:

                   1,概率计算问题。

                            给定模型λ= (A, B,π)和观测序列 O =(o1, o2, ..., oT),计算模型λ下观测序列O出现的概率P(O|λ)。

                   2,学习问题。

                            一直观测序列O =(o1, o2, ..., oT),估计模型λ= (A, B,π)的参数,使得在该模型下观测序列概率P(O|λ)最大。即,用极大似然估计的方法估计参数。

                   3,预测问题,也称为解码(decoding)问题。

                            已知模型λ= (A, B,π)和观测序列O = (o1,o2, ..., oT),求给定观测序列条件P(O|λ)最大的状态序列I = (i1, i2, ..., iT)。即,给定观测序列,求最优可能的对应的状态序列。

         这三个问题我会在“隐马尔可夫模型(HMM) - 2”、“隐马尔可夫模型(HMM) - 3”和“隐马尔可夫模型(HMM) - 4”中分别讲解。

  • 28
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
HMM是一种常见的统计模型,用于描述随机生成的序列。Viterbi算法是一种在HMM中进行解码的动态规划算法,用于寻找最可能的隐藏状态序列。下面是HMM的MATLAB实现,包括Viterbi算法。 首先,我们需要定义一个HMM模型。我们假设这个模型有3个隐藏状态和2个可见状态。我们使用矩A表示隐藏状态之间的转移概率,矩B表示每个隐藏状态生成每个可见状态的概率,向量pi表示初始隐藏状态的概率分布。 ```matlab % 定义HMM模型参数 A = [0.5 0.2 0.3; 0.3 0.5 0.2; 0.2 0.3 0.5]; B = [0.5 0.5; 0.4 0.6; 0.7 0.3]; pi = [0.2 0.4 0.4]; ``` 接下来,我们需要生成一个可见序列。我们使用HMM模型中的随机过程生成一个长度为10的可见序列。 ```matlab % 生成可见序列 T = 10; q = zeros(1, T); o = zeros(1, T); q(1) = randsrc(1, 1, [1:3; pi]); o(1) = randsrc(1, 1, [1:2; B(q(1), :)]); for t = 2:T q(t) = randsrc(1, 1, [1:3; A(q(t-1), :)]); o(t) = randsrc(1, 1, [1:2; B(q(t), :)]); end ``` 接下来,我们使用Viterbi算法解码这个可见序列,得到最可能的隐藏状态序列。我们定义一个矩V表示每个时间步的最大概率,以及一个矩path表示每个时间步的最大概率对应的前一个状态。 ```matlab % Viterbi算法解码 V = zeros(3, T); path = zeros(3, T); V(:, 1) = pi' .* B(:, o(1)); for t = 2:T for j = 1:3 [V(j, t), path(j, t)] = max(V(:, t-1) .* A(:, j)); V(j, t) = V(j, t) * B(j, o(t)); end end ``` 最后,我们找到最可能的隐藏状态序列。我们首先找到最后一个时间步的最大概率对应的隐藏状态,然后从后往前依次寻找每个时间步的最大概率对应的隐藏状态,最终得到整个隐藏状态序列。 ```matlab % 找到最可能的隐藏状态序列 [~, q(T)] = max(V(:, T)); for t = T-1:-1:1 q(t) = path(q(t+1), t+1); end ``` 完整代码如下: ```matlab % 定义HMM模型参数 A = [0.5 0.2 0.3; 0.3 0.5 0.2; 0.2 0.3 0.5]; B = [0.5 0.5; 0.4 0.6; 0.7 0.3]; pi = [0.2 0.4 0.4]; % 生成可见序列 T = 10; q = zeros(1, T); o = zeros(1, T); q(1) = randsrc(1, 1, [1:3; pi]); o(1) = randsrc(1, 1, [1:2; B(q(1), :)]); for t = 2:T q(t) = randsrc(1, 1, [1:3; A(q(t-1), :)]); o(t) = randsrc(1, 1, [1:2; B(q(t), :)]); end % Viterbi算法解码 V = zeros(3, T); path = zeros(3, T); V(:, 1) = pi' .* B(:, o(1)); for t = 2:T for j = 1:3 [V(j, t), path(j, t)] = max(V(:, t-1) .* A(:, j)); V(j, t) = V(j, t) * B(j, o(t)); end end % 找到最可能的隐藏状态序列 [~, q(T)] = max(V(:, T)); for t = T-1:-1:1 q(t) = path(q(t+1), t+1); end ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值