咸鱼了一个多月,黑色五月过得异常难受,找实习好烦,心态一直调整不好。
然后。。突然就想起了隐马尔可夫,我每天的心理状态是别人无法观测到的,每一天的状态组在一起就是一个状态序列,而我的行为活动是其他人可见的,每一天的行为组合在一起就是观测序列,当知道我月初的各种状态的概率分布,也知道了我这个人每种状态转移的概率分布和在某种状态下做出某种行为活动的概率分布时,是不是就能通过我这一个月每天的行为活动组成的序列来判断我每天的状态呢。emmm,隐马尔可夫带你成为一个能看懂人心的“神棍”。
基本假设
首先为了计算简单,要提出两点假设:
第一、齐次马尔可夫性假设
假设隐藏的马尔可夫链在任意时刻t的状态只依赖于其前一时刻t−1的状态,与其他时刻的状态及观测无关,也与时刻t无关。
即P(it|it−1,ot−1,...,i1,o1)=P(it|it−1) t=1,2,...,T
第二、观测独立性假设
假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。
即P(ot|iT,oT,iT−1,oT−1,...,it,ot,...,i1,o1)=P(ot|it)
这两个假设一个是状态转移的关系,另一个是状态生成观测的关系。
模型参数(A,B,π)
隐马尔可夫模型是一个关于时序的概率模型,它由初始状态概率向量π,状态转移概率矩阵A和观测概率分布B来确定。模型用λ表示,λ=(A,B,π)可以用来预测给定的观测序列对应的状态序列。
状态
用it表示t时刻的状态,i1是第一天的状态(也就是初始状态)。
用q表示所有可能的状态,集合表示为Q={q1,q2,...,qN},N即有N种状态。
P(it=qj)表示第t天(t时刻)的状态是qj的概率,j取1,2,...,N
比如花丸的所有可能状态包括{烦躁,消极,平静,积极}
观测
用ot表示t时刻的观测(行为活动)。
用v表示所有可能的观测(行为活动),集合表示为V={v1,v2,...,vM},M即有M种观测。
P(ot=vs|it=qj)表示在第t天(t时刻)状态是qj的条件下,第t天(t时刻)观测到的活动是vs的概率,s取1,2,...,M
比如花丸的所有可能活动包括{玩游戏,写博客,看书,看电影,无所事事}
状态转移概率矩阵A:
A=[ajk]N×N,即一个N×N的矩阵,N即有N种状态。
其中ajk=P(it+1=qk|it=qj),即在第t天(t时刻)的状态是qj的条件下在第t+1天(t+1时刻)转移到状态qk的概率。
如下图的状态转移
A=⎡⎣⎢⎢⎢a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢00.6000.900.500.10.400.7000.50.3⎤⎦⎥⎥⎥
我们可以发现每一行之和为1,这是从某一状态转移为其他所有可能状态的概率之和。
观测概率矩阵B:
B=[bj(s)]N×M,即一个N×M的矩阵,N即有N种状态,M即有M种观测。
其中bj(s)=P(ot=vs|it=qj),即在第t天(t时刻)处于状态qj的条件下生成观测vs的概率。
如下图状态生成观测,每种状态生成所有观测的概率之和为1(用同色的线表示在同一行)
A=⎡⎣⎢⎢⎢⎢b1(1)b2(1)b3(1)b4(1)b1(2)b2(2)b3(2)b4(2)b1(3)b2(3)b3(3)b4(3)b1(4)b2(4)b3(4)b4(4)b1(5)b2(5)b3(5)b4(5)⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢0.30.60.30.050.40.150.10.020.20.20.10.080.060.020.250.40.040.030.250.45⎤⎦⎥⎥⎥
初始状态概率向量π:
π=(π1,π2,...,πi),πi=P(i1=qj),i1表示初始状态。
初始状态分布:π1=P(i1=烦躁)=0.6,π2=P(i1=消极)=0.25
π3=P(i1=平静)=0.1,π4=P(i1=积极)=0.05
因此π=(0.6,0.25,0.1,0.05)
有了隐马尔可夫模型λ=(π,A,B)我们也可以生成一个观测序列。
输入是隐马尔可夫模型λ=(π,A,B)和观测序列的长度T,输出是
观测序列O=(o1,o2,...,oT)
三个基本问题
①概率计算问题
给定模型λ=(π,A,B)和观测序列O=(o1,o2,...,oT),计算在模型λ条件下观测序列O出现的概率P(O|λ)。
前向−反向算法
②学习问题(训练问题)
已知观测序列O=(o1,o2,...,oT),去估计模型λ=(π,A,B)的参数,使得在该模型条件下,观测序列概率P(O|λ)最大。
鲍姆−韦尔奇算法(EM过程)
③预测问题(解码问题)
已知模型λ=(π,A,B)和观测序列O=(o1,o2,...,oT),求给定观测序列条件下概率P(I|O)最大的状态序列I=(i1,i2,...,iT)。
维特比算法