隐马尔可夫模型
隐马尔可夫模型(HMM)是一种统计模型
先来看一个维基百科提供的例子:
https://en.wikipedia.org/wiki/Hidden_Markov_model
假设你有一个住得很远的朋友,他每天跟你打电话告诉你他那天做了什么。你的朋友仅仅对三种活动感兴趣:公园散步,购物以及清理房间。他选择做什么事情只凭天气。你对于他所住的地方的天气情况并不了解,但是你知道总的趋势。在他告诉你每天所做的事情基础上,你想要猜测他所在地的天气情况。
你知道这个地区的总的天气趋势,并且平时知道你朋友会做的事情.也就是说这个隐马尔可夫模型的参数是已知的
我们的观察集合是:
V={散步,购物,收拾};
所有的可能的观察数:
M=3;
观察者只能看到朋友的行为序列,却不能看到朋友所在地区的天气。
我们的状态集合是:
Q={雨天,晴天};
所有的可能的状态数:
N=2
初始状态分布为:
状态转移概率分布矩阵A:
观测状态概率矩阵B:
现在,重点是要了解并解决HMM 的三个问题:
问题1,已知整个模型, 朋友告诉我,连续三天,他下班后做的事情分别是:散步,购物,收拾。那么,根据模型,计算产生这些行为的概率是多少。
问题2,同样知晓这个模型,同样是这三件事, 朋友要我猜,这三天他下班后北京的天气是怎么样的。这三天怎么样的天气才最有可能让他做这样的事情。
问题3,最复杂的, 朋友只告诉我这三天他分别做了这三件事,而其他什么信息我都没有。他要我建立一个模型,晴雨转换概率,第一天天气情况的概率分布,根据天气情况他选择做某事的概率分布。
具体如何解决这三大问题。需要数学基础,概率基础。
问题1的解决1:遍历算法。
要计算产生这一系列行为的概率,那我们把每一种天气情况下产生这些行为都罗列出来,那每种情况的和就是这个概率。
有3天,每天有2种可能的天气情况,则总共有
种情况
举例其中一种情况 :
P(下雨,下雨,下雨,散步,购物,收拾)= P(第一天下雨)P(第一天下雨去散步)P(第二天接着下雨)P(下雨去购物)P(第三天还下雨)P(下雨回家收拾)=0.6X0.1X0.7X0.4X0.7X0.5=0.00588
当然,这里面的 P(第二天接着下雨)当然是已知第一天下雨的情况下,第二天下雨的概率,为0.7.
将八种情况相加可得,三天的行为为{散步,购物,收拾}的可能性为0.033612. 看似简单易计算,但是一旦观察序列变长,计算量就会非常庞大
1)先计算 t=1时刻,发生‘’散步‘’一行为的概率:
1.1)如果下雨,则为
1.2)如果晴天:
2)t=2 时刻,发生“购物”的概率,当然,这个概率可以从 t=1 时刻计算而来:
2.1)如果t=2下雨,则
2.2)如果 t=2晴天,则
P(第一天散步,第二天购物,第二天晴天)=0.0486 (同理可得)
3)t=2 时刻:
3.1)如果 t=3,下雨,则
3.2)如果t=3,晴天,则
P(第一天散步,第二天购物,第三天收拾,第三天晴天)= 0.004572
那么 P(第一天散步,第二天购物,第三天收拾),这一概率则是第三天,下雨和晴天两种情况的概率和:
0.02904+0.004572=0.033612
以上例子可以看出,向前算法计算了每个时间点时,每个状态的发生观测序列的概率,看似繁杂,但在 T 变大时,复杂度会大大降低。
问题1的解决3:向后算法
可以用递归的方式求得后向概率
及观测概率
(1)初始化后向概率:
(2)递推:
其中第一项则是转移概率,第二天下雨转到第三天下雨的概率为0.7;第二项则是观测概率,第三天下雨的状况下,在家收拾的概率为0.5;第三项就是我们定义的向后变量
同理,可得
(3)终止:
三种算法的答案是一致的