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)。