1、第10章 概率图模型p概率图模型p马尔科夫过程p隐马尔科夫模型pViterbi算法10.1 引言n 概率图概率图模型模型是一类用图形模式表达的基于概率关系模型的总称。n 概率图模型既用有向无环图模型表示,条件的依赖方向(如隐马尔科夫链),用无向图模型表示描述变量间的相互依赖(如鉴别模型)。n 概率图模型包括四个要素:语义。图与概率值之间的关联关系;结构。变量间的依赖关系;实现。结点和函数的具体形式,即概率分布类型(多项分布,高斯分布等);参数。概率分布的具体参数,如均值,方差等。10.1 引言n 概率图模型主要包括l 表示理论l 推理理论l 学习理论。n 用概率图模型解决问题,一般包括下面几个
2、内容:l 学习。训练概率模型中的参数(包括结构参数);l 似然计算。给定参数,估计特定观测值的条件概率;l 识别解码。给定参数和观测值,推测隐变量的取值。10.1 引言n常用的学习方法有:l 最大似然估计l 贝叶斯估计n推理问题的一般形式包括l 信度更新l 计算最大可能误差l 最大后验假设。10.2 马尔科夫过程n 马尔科夫过程有如下特性:在已知系统当前状态的条件下,它未来的演变不依赖于过去的演变。也就是说,一个马尔科夫过程可以表示为系统在状态转移过程,第t +1次结果只受第t次结果的影响,即只与当前状态有关,而与过去状态,即系统的初始状态以及此次转移前的所有状态无关。n 对于一阶马尔科夫模型
3、,系统在时刻t+1的状态仅仅依赖于时刻t的状态,而与之前的状态无关。即,如果已知当前时刻的系统状态,那么系统的未来状态独立于过去的状态。n 进一步,假定从 到 的转移概率(Transition Probability)是独立于时间的,即10.2.1 马尔科夫过程1|ijtjti=P qSqS满足0ij11Nijj且10.2 马尔科夫过程10.2.1 马尔科夫过程10.2 马尔科夫过程10.2.1 马尔科夫过程10.2 马尔科夫过程10.2.1 马尔科夫过程天气天气转移矩阵转移矩阵t+1+1t0.20.80.70.310.2 马尔科夫过程10.2.1 马尔科夫过程10.2 马尔科夫过程n 隐马尔
4、科夫模型隐马尔科夫模型(Hidden Markov Model,HMM)是一个统计模型。10.2.2 隐马尔科夫模型假定,人们只能观察到显式的观测向量序列,而无法直接观察到底层的马尔科夫链状态空间,但是观测向量与底层的马尔科夫链状态空间之间是相互关联的,可以通过一定的概率分布表现出来。因此,隐马尔科夫模型是一个双重随机过程:具有一定状态数的隐马尔科夫链和可观测向量的随机函数集。10.2 马尔科夫过程10.2.2 隐马尔科夫模型10.2 马尔科夫过程10.2.2 隐马尔科夫模型10.2 马尔科夫过程10.2.2 隐马尔科夫模型10.2 马尔科夫过程10.2.2 隐马尔科夫模型10.2 马尔科夫过
5、程10.2.2 隐马尔科夫模型10.2 马尔科夫过程10.2.2 隐马尔科夫模型(5)根据前面(1)(4)步计算结果,构造一个HMM天气预报图10.3 Viterbi算法10.3 Viterbi算法10.3 Viterbi算法10.3 Viterbi算法 (3)计算第三天的状态转移概率。10.3 Viterbi算法对于天气状态预测问题,采用Viterbi算法进行计算。Rain:0.010000000000000002,Cloudy:0.0425,Sunny:0.378Rain:0.004725,Cloudy:0.0354375,Sunny:0.0378Rain:0.01107421875,Cl
6、oudy:0.00354375,Sunny:0.0009450000000000001Sunny:0.378,Sunny:0.0378,Rain:0.01107421875运行结果:10.4 综合案例马尔科夫链表示的天气转换图SunnyCloudyRainSunny0.500.3750.125Cloudy0.250.1250.625Rain0.250.3750.37510.4 综合案例10.4 综合案例import numpy as npclass HMM():def _init_(self,observe_list):#初始状态序列 self.pai=0.63,0.17,0.20#状态转移矩
7、阵 self.A=np.array(0.500,0.375,0.125,0.250,0.125,0.625,0.250,0.375,0.375)#发射矩阵 self.B=np.array(0.60,0.20,0.15,0.05,0.25,0.25,0.25,0.25,0.05,0.10,0.35,0.50 )#天气状态 self.weather=Sunny,cloudy,Rain#海藻湿度 self.seaweed=Dry,Dryish,damp,Soggy#观察序列 self.observe_list=observe_listn HMM的前向算法的具体实现代码如下:10.4 综合案例def
8、forward(self):retList=#进行初始化,即第一天的天气状况 theata=self.pai*self.B:,self.observe_list0 max_inx=np.argmax(theata)#第一天的天气状态(序号)print(theata 1:,theata,self.weathermax_inx)retList.append(self.weathermax_inx)lenth=len(self.observe_list)for i in range(1,lenth):#计算后面几天的天气状况 theata=(theata.dot(self.A)#上一个观察状态序列值
9、到各个隐藏状态的概率值。theata=theata*(self.B:,self.observe_listi)#在x轴上求和,即新的在该状态的局部概率。max_inx=np.argmax(theata)#预测的当天天气状态(序号)print(theata 1:,theata,self.weathermax_inx)retList.append(self.weathermax_inx)return retListif _name_=_main_:observe_list=0,1,3#观察序列 a=HMM(observe_list)#创建一个HMM对象 predict_list=a.forward()#前向计算 print(predict_list)10.4 综合案例theata 1:0.378 0.0425 0.01 Sunnytheata 1:0.040425 0.03770312 0.00775625 Sunnytheata 1:0.00157887 0.00569521 0.01576309 RainSunny,Sunny,Rain运行结果: