HMM隐形马尔可夫模型实验报告(可打印修改)

HMM隐形马尔可夫模型实验报告(可打印修改)
HMM隐形马尔可夫模型实验报告(可打印修改)

《模式识别与机器学习》

课程实验报告

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.

2实验环境

Window7, matlab 7.11.0

3实验原理

HMM即隐性马尔可夫模型,此模型可认为是状态空间模型的一个特殊情况。当令状态空间模型中的潜变量为离散的时,我们即得到了隐性马尔可夫模型。

3.1模型状态

在一个典型的HMM模型中,通常有两个状态集合来描述该模型状态:

1. 隐含状态,通常用S表示。

这些状态之间满足马尔可夫性质,是马尔可夫模型中实际所隐含的状态。这些状态通常无法通过直接观测而得到。(例如S1、S2、S3等等)。

2. 可观测状态,通常用O表示。

在模型中与隐含状态相关联,可通过直接观测而得到。(例如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解决的三类问题:

1.给定观察得到的序列O,如何调整参数λ,使P(O|λ)最大。即通过给定

O,不断估算一个适合的参数λ=(A,B,π),使发生这个O的概率P(O|λ)最大。这个问题的一种有效解决算法是Baum-Welch算法,即EM算法的一种特殊形式。且通过对BW算法的分析可以看出,该算法以前后向算法为基础。前后向算法用于计算在某一时刻t,潜变量处于某一状态的概率。EM 算法的具体过程在此不再赘述。

2.给定观测序列O=O1O2O3…Ot和模型参数λ=(A,B,π),怎样有效计算某一

观测序列的概率,进而可对该HMM 做出相关评估。例如,已有一些模型参数各异的HMM ,给定观测序列O=O1O2O3…Ot ,我们想知道哪个HMM 模型最可能生成该观测序列。通常我们利用前后向算法分别计算每个HMM 产生给定观测序列O 的概率,然后从中选出最优的HMM 模型。

3.给定一个观察到的序列O ,及参数λ,求出最有可能产生这种序列的状态序列S 。这个问题的一种有效解决算法是Viterbi 算法,也是一种动态的规划方法,用来找出最可能的状态路径。Viterbi 算法的具体原理及过程在此不再絜述。

4实验过程

一、定义HMM 模型中的各参数,得到一个HMM 模型。

在本实验中,定义该HMM 模型为以下实例。假设程序员Tom 每天的活动会被其所在项目组是否忙碌所影响。在本例中,项目组忙碌情况为潜变量,包括忙(Busy ),闲(free )二种状态;Tom 每天的活动是观测变量,包括编程(programming ),运动(Sports ),休息(Relax ),读书(Reading ),旅行(Travelling )。

潜变量对应状态如表1所示:忙

闲12

表1

可观测变量状态对应如表2所示:编程

运动休息读书旅行123

45

表2此HMM 模型中的参数的初始值分别定义如下:

π=[]

5.05.0A=;

??

????3.04.07.06.0

B=;??????

????????1.01.04.02.01.01.01

.01.02.06.0赋得初始值后,利用matlab 中的某函数,随机根据(A,B,π)的值,生成一个data 集合,即可根据已有的markov 模型来生成一个数据集。

在这个数据集中,将会80%的数据用来训练生成一个HMM 的参数,另外20%将会用来作为测试集来测试这一模型的准确性。具体的程序运行及实现过程详见代码说明及注释。

程序运行后,可见代码运行产生的数据集data 的部分数值显示如图1所示(也可在命令窗口中通过指令显示变量数值,这里我们直接在workspace 中查看)

:

图1

二、根据所得的数据集作为输入,对HMM 模型进行训练,产生一组新的参数。如实验原理部分所述,该部分所采用EM 作为训练参数产生的方法。在程序中,设置迭代次数为50次。经过50次迭代后,程序运行结果如图2所示:

迭代数次后得到的训练模型中的对数似然值:

图2

得到的训练模型中的初始概率矩阵的值如图3所示:

图3

得到训练模型中的转移矩阵的值如图4所示:

图4

得到的训练模型中的发射矩阵的值如图5所示:

图5

三、利用前后向算法,通过计算测试数据的似然数值,对训练所得的模型进行测试。

程序运行后产生的似然对数值为loglik,结果如下图6所示:

图6

三、根据Viterbi算法,用训练产生的模型,估算出该模型下测试数据的最大可能的潜变量序列。

程序运行后产生的序列如下图7所示:

图7

5实验结果

本实验的实验结果已在实验过程中给出。

6实验总结及存在的问题

6.1实验总结:

1.给定参数,完成对HMM模型的构建,并基于该模型生成数据集,用于训

练与测试(80%用作训练数据,20%用作测试数据)。

2.以上一步所产生的数据集的部分数据作为训练集,对HMM模型进行训练,

生成训练参数。

3.基于训练模型,计算测试数据集的似然对数值.

4.给定模型参数及测试观测序列,估计潜变量最大可能序列。

6.2存在的问题:

1.由于选取的训练集及算法本身存在的各种问题,从程序的运行结果可以

看出,EM算法在若干次迭代后其最大似然对数值不再发生大的变化,而

且,训练参数的结果并不十分令人满意。训练产生的发射矩阵的后三列

的数值竟然为0。

2.实验中所用选取的模型的状态数偏少,尤其是隐含变量的状态数较少,

一定程序上影响了实验中训练参数的准确性。

3.在利用viterbi算法估计模型的最大似然值时,因为潜变量的状态偏少,

影响了潜变量的估计效果。

4.实验结果很不稳定,多次运行所得的结果可能相差很大。

相关主题
相关文档
最新文档