HMM隐形马尔可夫模型实验报告(可打印修改)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4 实验过程
一、定义 HMM 模型中的各参数,得到一个 HMM 模型。 在本实验中,定义该 HMM 模型为以下实例。假设程序员 Tom 每天的活动会
被其所在项目组是否忙碌所影响。在本例中,项目组忙碌情况为潜变量,包括 忙(Busy),闲(free)二种状态;Tom 每天的活动是观测变量,包括编程 (programming),运动(Sports),休息(Relax),读书(Reading),旅行 (Travelling)。
《模式识别与机器学习》 课程实验报告
1 实验内容
1. Design an HMM model, and generate sequential data (training and test) with the model. 2. Learning model parameters on the training data. 3. Test the model learned on the test data:Estimate the most probable values for the latent variables.
1. 给定观察得到的序列 O,如何调整参数 λ,使 P(O|λ)最大。即通过给定 O,不断估算一个适合的参数 λ=(A,B,π),使发生这个 O 的概率 P(O|λ) 最大。这个问题的一种有效解决算法是 Baum-Welch 算法,即 EM 算法的一 种特殊形式。且通过对 BW 算法的分析可以看出,该算法以前后向算法为基 础。前后向算法用于计算在某一时刻 t,潜变量处于某一状态的概率。EM 算法的具体过程在此不再赘述。
潜变量对应状态如表 1 所示: 忙闲
1
2
表1
可观测变量状态对应如表 2 所示:
编程 运动 休息 读书
旅行
1
2
3
4
5
表2
此 HMM 模型中的参数的初始值分别定义如下:
π= 0.5 0.5
0.6 0.7 A= 0.4 0.3 ;
3
0.6
0.1
B=
0.1
0.1
0.1
0.2
0.2
0.4
;
0.1
0.1
赋得初始值后,利用 matlab 中的某函数,随机根据(A,B,π)的值,生成
2 实验环境
Window7, matlab 7.11.0
3 实验原理
HMM 即隐性马尔可夫模型,此模型可认为是状态空间模型的一个特殊情 况。当令状态空间模型中的潜变量为离散的时,我们即得到了隐性马尔可夫模 型。
3.1 模型状态
在一个典型的 HMM 模型中,通常有两个状态集合来描述该模型状态: 1. 隐含状态,通常用 S 表示。 这些状态之间满足马尔可夫性质,是马尔可夫模型中实际所隐含的状态。 这些状态通常无法通过直接观测而得到。(例如 S1、S2、S3 等等)。 2. 可观测状态,通常用 O 表示。
图6
三、根据 Viterbi 算法,用训练产生的模型,估算出该模型下测试数据的最大 可能的潜变量序列。 程序运行后产生的序列如下图 7 所示:
图7 5
5 实验结果
本实验的实验结果已在实验过程中给出。
6 实验总结及存在的问题
6.1 实验总结: 1. 给定参数,完成对 HMM 模型的构建,并基于该模型生成数据集,用于训 练与测试(80%用作训练数据,20%用作测试数据)。 2. 以上一步所产生的数据集的部分数据作为训练集,对 HMM 模型进行训练, 生成训练参数。 3. 基于训练模型,计算测试数据集的似然对数值. 4. 给定模型参数及测试观测序列,估计潜变量最大可能序列。
(也可在命令窗口中通过指令显示变量数值,这里我们直接在 workspace 中查
看):
图1
二、根据所得的数据集作为输入,对 HMM 模型进行训练,产生一组新的参数。 如实验原理部分所述,该部分所采用 EM 作为训练参数产生的方法。在程序中, 设置迭代次数为 50 次。经过 50 次迭代后,程序运行结果如图 2 所示: 迭代数次后得到的训练模型中的对数似然值:
2. 给定观测序列 O=O1O2O3…Ot 和模型参数 λ=(A,B,π),怎样有效计算某一
2
观测序列的概率,进而可对该 HMM 做出相关评估。例如,已有一些模型参 数各异的 HMM,给定观测序列 O=O1O2O3…Ot,我们想知道哪个 HMM 模型最 可能生成该观测序列。通常我们利用前后向算法分别计算每个 HMM 产生给 定观测序列 O 的概率,然后从中选出最优的 HMM 模型。 3. 给定一个观察到的序列 O,及参数 λ,求出最有可能产生这种序列的状态 序列 S。这个问题的一种有效解决算法是 Viterbi 算法,也是一种动态的规 划方法,用来找出最可能的状态路径。Viterbi 算法的具体原理及过程在此 不再絜述。
图2
得到的训练模型中的初始概率矩ห้องสมุดไป่ตู้的值如图 3 所示:
4
图3
得到训练模型中的转移矩阵的值如图 4 所示:
图4
得到的训练模型中的发射矩阵的值如图 5 所示:
图5
三、利用前后向算法,通过计算测试数据的似然数值,对训练所得的模型进行测 试。 程序运行后产生的似然对数值为 loglik,结果如下图 6 所示:
6
一个 data 集合,即可根据已有的 markov 模型来生成一个数据集。
在这个数据集中,将会 80%的数据用来训练生成一个 HMM 的参数,另外 20%将
会用来作为测试集来测试这一模型的准确性。具体的程序运行及实现过程详见
代码说明及注释。
程序运行后,可见代码运行产生的数据集 data 的部分数值显示如图 1 所示
6.2 存在的问题: 1. 由于选取的训练集及算法本身存在的各种问题,从程序的运行结果可以 看出,EM 算法在若干次迭代后其最大似然对数值不再发生大的变化,而 且,训练参数的结果并不十分令人满意。训练产生的发射矩阵的后三列 的数值竟然为 0。 2. 实验中所用选取的模型的状态数偏少,尤其是隐含变量的状态数较少, 一定程序上影响了实验中训练参数的准确性。 3. 在利用 viterbi 算法估计模型的最大似然值时,因为潜变量的状态偏少, 影响了潜变量的估计效果。 4. 实验结果很不稳定,多次运行所得的结果可能相差很大。
在模型中与隐含状态相关联,可通过直接观测而得到。(例如 O1、O2、O3 等等)。可观测状态的数目不一定要和隐含状态的数目一致。
3.2 模型参数
一个典型的 HMM 模型包含以下参数: 1. 初始状态概率矩阵 π。
表示隐含状态在初始时刻 t=1 时刻的概率矩阵,(例如 t=1 时,P(S1) =p1、P(S2)=P2、P(S3)=p3,则初始状态概率矩阵 π=[ p1 p2 p3 ]). 2. 隐含状态转移概率矩阵 A。 描述了 HMM 模型中各个状态之间的转移概率,N 代表隐含状态数目。 其中 Aij = P( Sj | Si ),1≤i,,j≤N。表示在 t 时刻、状态为 Si 的条件下,在 t+1 时刻状态是 Sj 的概率。 3. 观测状态发射概率矩阵 B。 表示在 t 时刻、隐含状态是 Sj 条件下,观察状态为 Oi 的概率。令 N 代 表隐含状态数目,M 代表可观测状态数目,则: Bij = P( Oi |Sj ), 1≤i≤M,1≤j≤N.
一般来说,可以用 λ=(A,B,π)三元组来表示一个隐性马尔可夫模型。给定 了这三个参数,我们便得到了一个 HMM 模型。在实验过程中,我们在 matlab 环 境下指定各组参数,得到一个 HMM 后,便可以利用这个模型生成一定量的数据 作为训练集与测试集。
3.3 相关算法
根据实验内容,可以得知这个实验中主要涉及到利用 HMM 解决的三类问题: