隐马尔可夫模型(HMM)-(维比特算法)

温故知新

每次学会的知识过了几天就忘了,这样不行,每看一篇论文都要学会总结!!!比看更重要

例子

隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别,地图匹配,这里主要介绍隐马尔可夫模型和维比特算法
假设我有三种类型的骰子:

  1. 正四面体的骰子,我们将其简称为 D4,可以随机投出 1,2,3,4 中的任意一个数字。
  2. 正六面体的骰子,也就是立方体的骰子,我们将其简称为 D6,可以随机投出 1,2,3,4,5,6 中的任意一个数字。
  3. 正八面体的骰子,我们将其简称为 D8,可以随机投出 1,2,3,4,5,6,7,8 中的任意一个数字

假设我们开始掷骰子,我们先从三个骰子里挑一个,挑到每一个骰子的概率都是1/3。然后我们掷骰子,得到一个数字,1,2,3,4,5,6,7,8中的一个。不停的重复上述过程,我们会得到一串数字,每个数字都是1,2,3,4,5,6,7,8中的一个。例如我们可能得到这么一串数字(掷骰子10次):1 6 3 5 2 7 3 5 2 4
在这里插入图片描述

隐马尔可夫模型
  1. 上面提到的骰子序列,我们称之为隐藏序列;
  2. 上面提到的数字序列,我们称之为观测序列;
  3. 上面提到的骰子的投掷概率,我们称之为观测概率;
  4. 上面提到的骰子的选择概率,我们称之为转换概率(发射概率);
  5. 观测概率和转换概率我们将其称之为模型参数。
    在这里插入图片描述

从该例出发一共有三种情况:

  1. decoding 知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道每次掷出来的都是哪种骰子(隐含状态链)
  2. evaluation 还是知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道掷出这个结果的概率。
  3. learning知道骰子有几种(隐含状态数量),不知道每种骰子是什么(转换概率),观测到很多次掷骰子的结果(可见状态链),我想反推出每种骰子是什么(转换概率)。
维比特算法

一个简单的动态规划问题
首先,如果我们只掷一次骰子:
在这里插入图片描述
看到结果为1.对应的最大概率骰子序列就是D4,因为D4产生1的概率是1/4,高于1/6和1/8.

把这个情况拓展,我们掷两次骰子:
在这里插入图片描述
结果为1,6.这时问题变得复杂起来,我们要计算三个值,分别是第二个骰子是D6,D4,D8的最大概率。显然,要取到最大概率,第一个骰子必须为D4。这时,第二个骰子取到D6的最大概率是在这里插入图片描述
同样的,我们可以计算第二个骰子是D4或D8时的最大概率。我们发现,第二个骰子取到D6的概率最大。而使这个概率最大时,第一个骰子为D4。所以最大概率骰子序列就是D4 D6。
在这里插入图片描述
继续拓展,我们掷三次骰子:同样,我们计算第三个骰子分别是D6,D4,D8的最大概率。我们再次发现,要取到最大概率,第二个骰子必须为D6。这时,第三个骰子取到D4的最大概率是
在这里插入图片描述
同上,我们可以计算第三个骰子是D6或D8时的最大概率。我们发现,第三个骰子取到D4的概率最大。而使这个概率最大时,第二个骰子为D6,第一个骰子为D4。所以最大概率骰子序列就是D4 D6 D4。

算法步骤
  1. 初始化第一个观测点的所有可能状态(对应于骰子问题,状态就指选用哪个骰子)概率。
  2. 从前往后遍历每一个状态,对于每一个状态,用以下方法计算当前观测点的所有可能状态的概率:遍历当前观测可能对应的所有状态;对每个状态,遍历所有上一状态,通过公式 P(当前状态) = P(上一状态) * P(上一状态转移到当前状态) * P(当前状态观测) 来计算当前状态的概率。
  3. 当所有观测点都遍历完之后,查找概率值最大的那个状态,然后查找这个概率值对应的上一状态,就这样一路往回找,所找到的序列(倒序的)就是最大概率的隐藏序列。

在这里插入图片描述
(全是抄袭,没有原创)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值