《模式识别与机器学习》
课程实验报告
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模型。
2
3. 给定一个观察到的序列O,及参数λ,求出最有可能产生这种序列的状态序列S。这个问题的一种有效解决算法是Viterbi算法,也是一种动态的规划方法,用来找出最可能的状态路径。Viterbi算法的具体原理及过程在此不再絜述。
4实验过程
一、定义HMM模型中的各参数,得到一个HMM模型。
在本实验中,定义该HMM模型为以下实例。假设程序员Tom每天的活动会被其所在项目组是否忙碌所影响。在本例中,项目组忙碌情况为潜变量,包括忙(Busy),闲(free)二种状态;Tom每天的活动是观测变量,包括编程(programming),运动(Sports),休息(Relax),读书(Reading),旅行(Travelling)。
潜变量对应状态如表1所示:
忙 1 闲 2 表1
可观测变量状态对应如表2所示:
编程 1 运动 2 休息 3 表2
读书 4 旅行 5 此HMM模型中的参数的初始值分别定义如下: π=?0.50.5?
?0.60.7?A=??; ?0.40.3??0.6?0.1?B=?0.1?0.1??0.1
0.2?0.2??0.4?; 0.1??0.1?3
赋得初始值后,利用matlab中的某函数,随机根据(A,B,π)的值,生成一个data集合,即可根据已有的markov模型来生成一个数据集。
在这个数据集中,将会80%的数据用来训练生成一个HMM的参数,另外20%将会用来作为测试集来测试这一模型的准确性。具体的程序运行及实现过程详见代码说明及注释。
程序运行后,可见代码运行产生的数据集data的部分数值显示如图1所示(也可在命令窗口中通过指令显示变量数值,这里我们直接在workspace中查看):
图1
二、根据所得的数据集作为输入,对HMM模型进行训练,产生一组新的参数。如实验原理部分所述,该部分所采用EM作为训练参数产生的方法。在程序中,设置迭代次数为50次。经过50次迭代后,程序运行结果如图2所示: 迭代数次后得到的训练模型中的对数似然值:
图2
得到的训练模型中的初始概率矩阵的值如图3所示:
4