1. 隐马尔科夫模型的三个基本问题
1. 概率计算问题,已知模型和观测序列,计算在当前模型下观测序列出现的概率。
2. 学习问题。已知观测序列,来估计模型的参数(转移概率等等),使得在该模型下已知的观测序列出现的概率最大(极大似然)
3. 预测(解码)问题,已知模型和观测序列,求最有可能对应的状态序列。
2. 求解概率计算问题
如果已经知道模型的话,那么状态转移概率矩阵,初始状态概率向量,观测概率矩阵都已知。
首先考虑暴力的直接计算法。
直接计算法:(不现实)
就是直接按照概率公式。
1.求出所有的可能出现的状态序列,
2.对于每种可能出现的状态序列,计算已知的观测序列出现的概率(乘上对应的观测概率矩阵)
3.将全部的概率相加,就是已知的观测序列出现的概率。
前向算法:
前向概率:到一个时刻t,时刻t时状态为q(而非观测),观测序列为(o1,o2.....ot)的概率。
前向算法:
1. 计算初值:根据初始状态概率向量,和观测概率矩阵,计算出每一种状态对应的t=1的前向概率。
2. 递推:计算每一种状态转移到当前状态i的概率和,再乘上观测概率。
3. 终止:概率计算为:对T时刻的每一种状态i的前向概率求和。
后向算法:
基本和前向算法很类似。
具体而言,定义t时刻状态为q,但已知观测序列为(ot+1,ot+2.....oT)
后向算法:
1. 初始T时刻的所有状态i的后向概率为1。(因为后向概率就是这么定义的。“在时刻t的状态为i的条件下”)
2. 前推,前一时刻,对于所有t+1时刻状态j * 转移概率i->j * 观测概率观测到Oj 求和
3. 终止。
利用前向和后向概率,我们可以求什么(应用)
1. 时刻t,处于状态qi的概率:参见统计机器学习P179(前向*后向)/(对于所有状态求和前向*后向)
2.时刻t处于状态qi,且时刻t+1,处于状态qj的概率:
3. 观测O下状态i出现的期望值
4.观测O下由状态i转移的期望值
5. 观测O下由状态i转移到状态j的期望值
3.学习算法(已知观测序列,求模型参数,即构建模型)
1.监督学习方法:训练数据中包含观测序列和对应的状态序列
极大似然估计法。
1.估计转移概率:用频数做比,i->j / i->所有状态
2. 估计观测概率:频数做比 ,状态j观测为k/状态j观测为任意状态
3. 初始状态概率:S个样本中初始状态为i的概率
2. 非监督学习方法:Baum-Welch算法
只给出S个观测序列,而没有给出对应的状态序列。
使用EM算法。
(略)
3. 预测算法:(根据模型和观测序列,得到最优的状态序列)
就像是训练出模型之后,输入样本(观测序列),得到输出(状态序列)
1. 近似算法
在每个时刻t选择在该时刻最有可能出现大的状态i,从而得到一个状态序列作为预测的结果。
(这里用到之前计算的某一时刻状态i的概率,在前向和后向算法那里)
计算某一时刻t下,所有状态i的概率,取其中的最大值。
计算所有时刻,形成一个序列。
2. 维特比算法
使用动态规划解马尔可夫模型预测问题。(求概率最大的路径,这时一条路径对应一个状态序列)
根据动态规划原理,如果最优路径(状态序列),在时刻t通过节点(状态)i,那么之后的部分路径也一定是最优的。
即子路径最优原则。
略
参见统计机器学习中的例子。很详细。