文章目录
一、隐马尔可夫模型
隐马尔可夫模型(Hidden Markov Model,HMM)描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。
名词解释:
-
马尔科夫链
马尔可夫链的提出来自俄国数学家安德雷·马尔可夫,指具有马尔可夫性质且存在于离散的指数集和状态空间内的随机过程。 -
马尔科夫模型
一种统计模型,广泛应用在语音识别,手语作为特征类型相似的语言,亦可采用此方法进行研究。 -
隐马尔可夫模型
由马尔可夫链生成随机不可观测的随机状态序列,再由各个状态生成可观测的随机序列。
听得云里雾里,没关系,wiki实例说明:
Alice 和Bob是好朋友,但是他们离得比较远,每天都是通过电话了解对方那天作了什么.Bob仅仅对三种活动感兴趣:公园散步,购物以及清理房间。他选择做什么事情只凭当天天气,Alice对于Bob所住的地方的天气情况并不了解,但是知道总的趋势。在Bob告诉Alice每天所做的事情基础上,Alice想要猜测Bob所在地的天气情况。
Alice认为天气的运行就像一个马尔可夫链。 其有两个状态 “雨”和”晴”,但是无法直接观察它们,也就是说,它们对于Alice是隐藏的。每天,Bob有一定的概率进行下列活动:”散步”, “购物”,或 “清理”。因为Bob会告诉Alice他的活动,所以这些活动就是Alice的观察数据。这整个系统就是一个隐马尔可夫模型HMM。
Alice关心Bob每天干了什么事情(观测序列)「散步,购物,大扫除」,想要通过Bob干的事情去推断出Bob处地的天气变化(隐藏序列)「晴天,雨天」:
Alice和Bob通了三天电话后发现第一天Bob去散步了,第二天他去购物了,第三天他清理房间了。Alice现在有两个问题:
- 这个观察序列“散步、购物、清理”的总的概率是多少?(注:这个问题对应于HMM的基本问题之一:已知HMM模型λ及观察序列O,如何计算P(O|λ)?)
- 最能解释这个观察序列的状态序列(晴/雨)又是什么?(注:这个问题对应HMM基本问题之二:给定观察序列O=O1,O2,…OT以及模型λ,如何选择一个对应的状态序列S = q1,q2,…qT,使得S能够最为合理的解释观察序列O?)
- 至于HMM的基本问题之三:如何调整模型参数, 使得P(O|λ)最大?这个问题事实上就是给出很多个观察序列值,来训练以上几个参数的问题。
结论:
隐藏序列:表示无法直接观测到的状态,就上述例子而言就是对方的天气状态;
观测序列:可以直接观测到的状态,就上述例子而言就是获取到的B执行的事情;
初始状态概率矩阵:表示B第一次告诉A的时候,得到的隐藏状态集合中每个状态发生的概率;
状态转移矩阵:表示从一个状态到另一个状态变化的概率,如在上述例子中,从雨天到晴天的概率为0.3;
发射状态矩阵:表示B在相应隐藏状态(天气)下,去执行得到观测状态(执行的动作)的概率,如在雨天,B去散步的概率为0.1;
综上五个要素:
- 两个序列:隐藏序列和观测序列
- 三个矩阵:初始状态矩阵,发射状态矩阵以及状态转移矩阵
计算方法:
- 直接法
- 前向法
- 后向法
- 维特比算法
二、python实例
-
手写马尔科夫算法函数
参考1:把隐马尔可夫模型彻底说清楚
参考2:标注——隐马尔科夫模型(HMM)以及Python实现
学习:李航《统计学习方法》第十章——用Python实现隐马尔科夫模型 -
另外是安装
hmmlearn
库pip install hmmlearn
原理部分参考: