A 和B是好朋友,但是他们离得比较远,每天都是通过电话了解对方那天作了什么.B仅仅对三种活动感兴趣:公园散步,购物以及清理房间.他选择做什么事情只凭当天天气.A对于B所住的地方的天气情况并不了解,但是知道总的趋势.在B告诉A每天所做的事情基础上,A想要猜测B所在地的天气情况.
  A认为天气的运行就像一个马尔可夫链. 其有两个状态 “雨”和”晴”,但是无法直接观察它们,也就是说,它们对于A是隐藏的.每天,B有一定的概率进行下列活动:”散步”, “购物”, 或 “清理”. 因为B会告诉A他的活动,所以这些活动就是A的观察数据.这整个系统就是一个隐马尔可夫模型HMM.
  A知道这个地区的总的天气趋势,并且平时知道B会做的事情.也就是说这个隐马尔可夫模型的参数是已知的.下面是概率转移矩阵和两种天气下各种活动的概率:

                    雨天    晴天

          雨天     0.7       0.3

          晴天     0.4       0.6

                      散步    购物     清理

          雨天      0.1       0.4       0.5

          晴天      0.6       0.3        0.1

          下面是一段程序来描述各个变量。
   // 状态数目,两个状态:雨或晴
   states = (‘Rainy’, ‘Sunny’)
   // 每个状态下可能的观察值
   observations = (‘walk’, ‘shop’, ‘clean’)            
   //初始状态空间的概率分布
   start_probability = {‘Rainy’: 0.6, ‘Sunny’: 0.4}
   // 与时间无关的状态转移概率矩阵
   transition_probability = {
   ’Rainy’ : {‘Rainy’: 0.7, ‘Sunny’: 0.3},
   ’Sunny’ : {‘Rainy’: 0.4, ‘Sunny’: 0.6},
   }
   //给定状态下,观察值概率分布,发射概率
   emission_probability = {
   ’Rainy’ : {‘walk’: 0.1, ‘shop’: 0.4, ‘clean’: 0.5},
   ’Sunny’ : {‘walk’: 0.6, ‘shop’: 0.3, ‘clean’: 0.1},
   }
  在这些代码中,start_probability代表了A对于B第一次给她打电话时的天气情况的不确定性(A知道的只是那个地方平均起来下雨多些).在这里,这个特定的概率分布并非平衡的,平衡概率应该接近(在给定变迁概率的情况下){‘Rainy’: 0.571, ‘Sunny’: 0.429}。 transition_probability 表示马尔可夫链下的天气变迁情况,在这个例子中,如果今天下雨,那么明天天晴的概率只有30%.代码emission_probability 表示了B每天作某件事的概率.如果下雨,有 50% 的概率他在清理房间;如果天晴,则有60%的概率他在外头散步。
  A和B通了三天电话后发现第一天B去散步了,第二天他去购物了,第三天他清理房间了。A现在有两个问题:这个观察序列“散步、购物、清理”的总的概率是多少?(注:这个问题对应于HMM的基本问题之一:已知HMM模型λ及观察序列O,如何计算P(O|λ)?) 最能解释这个观察序列的状态序列(晴/雨)又是什么?(注:这个问题对应HMM基本问题之二:给定观察序列O=O1,O2,…OT以及模型λ,如何选择一个对应的状态序列S = q1,q2,…qT,使得S能够最为合理的解释观察序列O?)
  至于HMM的基本问题之三:如何调整模型参数, 使得P(O|λ)最大?这个问题事实上就是给出很多个观察序列值,来训练以上几个参数的问题。

------------------------------------------------------------------------------------------------------------------------------------------------------

 若将HMM应用于基于可见图像的人脸表情识别,可以定义:观测特征V(面部几何变化,如嘴角变化、眼角变化,眼眉变化等);隐藏状态(面部表情:happy、disgust、fear、sad、surprise、anger)。

Posted on 2010-11-04 21:06  leivo  阅读(2065)  评论(0编辑  收藏  举报