美文网首页
2021-05-05 HMM(Hidden Markov Mod

2021-05-05 HMM(Hidden Markov Mod

作者: 听风的声音_b8cf | 来源:发表于2021-05-05 21:54 被阅读0次

1、定义

一个隐性HMM包含:

(1)可观察状态(emissions)

(2)可以产生观察状态的隐含状态(states)

(3)隐含状态之间的转移概率(transition probability)

(4)隐含状态产生可观察状态的输出概率(emission probability)

(5)初始状态概率:隐含状态是第一个状态的概率

2、例子:

假设一个HMM包含2个states(S1,S2), 6个emissions(1~6)

(1)红色骰子S1:有6个面,每个面一个数字,1~6.

(2)绿色骰子S2:有12个面,其中5个面标示着2~6,其他面全标1

(3)红色硬币,掷出后,正面的概率是0.9,反面的概率是0.1

(4)绿色硬币,掷出后,正面概率是0.95,反面概率是0.05

该模型产生数字序列的规则如下:

(1)先掷红色骰子,并记录正面出现的数字,即是一个emission

(2)抛红色硬币:如果是正面,就掷红色骰子,并记录数字;如果是反面就掷绿色骰子,并记录数据

(3)在随后的每一步中,抛的硬币的颜色与你在前一步中掷出的骰子的颜色相同。如果硬币正面朝上,掷上一步相同的骰子。如果硬币出现反面,换另一个骰子。

状态转移图,如下图所示:

状态转换图

转移概率T和输出概率E:

转移概率T和输出概率E

MATLAB中,使用转移概率T和输出概率E生成一个随机序列

[seq,states] = hmmgenerate(1000,TRANS,EMIS);

需要安装Statistics and Machine Learning Toolbox

seq: 生成的观察状态

states: 生成seq的隐含状态

hmmgenerate是从S1开始,如果要改变初始状态,参考Changing the Initial State Distribution.

根据观察状态来估计隐含状态

likelystates = hmmviterbi(seq, TRANS, EMIS);

计算估计的精准度:

sum(states==likelystates)/1000

ans =

  0.8200

估计转移概率矩阵和输出概率矩阵

(1)使用hmmestimate

[TRANS_EST, EMIS_EST] = hmmestimate(seq, states)

TRANS_EST =

0.8989    0.1011

0.0585    0.9415

EMIS_EST =

0.1721    0.1721    0.1749    0.1612    0.1803    0.1393

0.5836    0.0741    0.0804    0.0789    0.0726    0.1104

(2)使用hmmtrain

如果不知道states的序列,但是对TRANS和EMIS有一个初始的猜测,也可以估计转移和输出概率

TRANS_GUESS = [.85 .15; .1 .9];

EMIS_GUESS = [.17 .16 .17 .16 .17 .17;.6 .08 .08 .08 .08 08];

[TRANS_EST2, EMIS_EST2] = hmmtrain(seq, TRANS_GUESS, EMIS_GUESS)

TRANS_EST2 =

0.2286    0.7714

0.0032    0.9968

EMIS_EST2 =

0.1436    0.2348    0.1837    0.1963    0.2350    0.0066

0.4355    0.1089    0.1144    0.1082    0.1109    0.1220

相关文章

网友评论

      本文标题:2021-05-05 HMM(Hidden Markov Mod

      本文链接:https://www.haomeiwen.com/subject/didkdltx.html