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和输出概率EMATLAB中,使用转移概率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
网友评论