HMM
1. 什么样的问题需要HMM模型
使用HMM模型时的问题一般有这两个特征:
1)问题是基于序列的,比如时间序列,或者状态序列。
2)问题中有两类数据,一类序列数据是可以观测到的,即观测序列;而另一类数据是不能观察到的,即隐藏状态序列,简称状态序列。
2. 马尔科夫模型的两个假设
1)独立输出假设:每个时刻的输出只与当前状态有关
2)马尔科夫假设:输出与前一个时刻和当前时刻有关
3. HMM定义:
Q:所有可能的隐藏状态集合
V: 所有可能的观测状态的集合
N是可能的隐藏状态数,M是所有的可能的观察状态数,对于从盒子中取出小球来说,N是盒子的个数,M是小球的颜色种类数目
A :状态转移矩阵:实际上每个状态指的是每个时刻,也就是从哪个盒子,因为每个时刻对应 取一个盒子
B:观测状态矩阵:B是输出符号的概率分布, 表示在状态 j 时输出状态为 的概率
:初始时刻状态分布:表示时刻 1 选择某个状态的概率,比如初始时刻从第一个盒子拿球的概率 p1,从第二个盒子拿球的概率 p2, 从第三个盒子拿球的概率 p3;
一个HMM模型,由初始隐藏状态分布 ,状态转移矩阵 ,观测状态矩阵 决定
三个概率矩阵:
1. 状态转移概率矩阵
2. 发射概率矩阵(观测状态矩阵)
3. 初始状态分布
两个序列:
1. 观察序列
2. 状态序列
3. 马尔可夫模型在应用过程中有 3 个基本问题
1. 概率计算问题。给定模型 λ=(A,B,π) 和观测序列 O={o1,o2,⋯,oT},计算在模型 λ 下观测序列 O 出现的概率 P(O|λ)。
2. 学习问题。已知观测序列 O={o1,o2,⋯,oT},估计模型 λ=(A,B,π) 参数,使得在该模型下观测序列概率 P(X|λ) 最大。即用极大似然估计的方法估计参数。
3. 预测问题,也称为解码(decoding)问题。已知模型 λ=(A,B,π) 和观测序列 O={o1,o2,⋯,oT},求对给定观测序列条件概率 P(I|O) 最大的状态序列 I={i1,i2,⋯,iT}。即给定观测序列,求最有可能的对应的状态序列。这个问题的求解需要用到基于动态规划的维特比算法。
4. 盒子与球的实例
假设有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:
所以观测状态矩阵 B:
N*M 3*2开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。以这个概率抽一次球后,将球放回。然后从当前盒子转移到下一个盒子进行抽球。
所以初始状态分布:
规则是:如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。如此下去,直到重复三次,得到一个球的颜色的观测序列: O={红,白,红}
所以状态转移矩阵A:
N*N那么现在的问题就是已知观测序列为:O={红,白,红} 求得到这个观测序列的概率值
5. 前向算法:
当然第一反应可以暴力求解,但是时间复杂度太高,所以有前向后向算法,
前向算法本质上属于动态规划的算法,也就是我们要通过找到局部状态递推的公式,这样一步步的从子问题的最优解拓展到整个问题的最优解。
在前向算法中,通过定义“前向概率”来定义动态规划的这个局部状态。
前向概率 :
给定模型,时刻 ,处在状态(哪个盒子),且部分观察序列为 的概率
定义时刻 时候隐藏状态 ,观测序列为,的概率
若 已知,)
(迭代计算)
6. 维特比算法
的含义是,给定模型,在时刻处于状态,观察到的最佳状态转换序列为的概率
若 已知,如何计算:?
1)计算实例:
代码实现:
参考:
李航《统计机器学习》