【机器学习自学笔记8】隐马尔可夫模型(HMM)
隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。隐马尔可夫模型的结构HMM 模型是一种生成式模型。HMM 模型中有 2 个相关序列,分别是状态序列和观测序列,HMM 模型具有以下规则:观测序列是可以直接观测的,状态序列是不可观测的状
隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。
隐马尔可夫模型的结构
HMM 模型是一种生成式模型。
HMM 模型中有 2 个相关序列,分别是状态序列和观测序列,HMM 模型具有以下规则:
- 观测序列是可以直接观测的,状态序列是不可观测的
- 状态序列在 t 时刻的值只与 t-1 时刻的值有关
- 观测序列在 t 时刻的值只与 t 时刻状态序列的值有关
设状态序列
X={X1,X2,…,Xn} X = \{X_1,X_2,\dots,X_n\} X={X1,X2,…,Xn}
观测序列
O={O1,O2,…,On} O=\{O_1,O_2,\dots,O_n\} O={O1,O2,…,On}
则 HMM 模型的结构如下图所示:
隐马尔科夫模型的假设
根据上述结构和规则,我们可以得出如下假设:
-
马尔可夫性假设:t 时刻的状态出现的概率只与 t-1 时刻的状态有关
P{Xt∣X1,X2,…,Xt−1}=P{Xt∣Xt−1} P\{X_t|X_1,X_2,\dots,X_{t-1}\}=P\{X_t|X_{t-1}\} P{Xt∣X1,X2,…,Xt−1}=P{Xt∣Xt−1} -
齐次性假设:时间平移不变性
P{Xt∣Xt−1}=P{Xs∣Xs−1},ifXt=XsandXt−1=Xs−1 P\{X_t|X_{t-1}\}=P\{X_s|X_{s-1}\},if\quad X_t=X_s\quad and\quad X_{t-1}=X_{s-1} P{Xt∣Xt−1}=P{Xs∣Xs−1},ifXt=XsandXt−1=Xs−1 -
观测独立性假设:某个时刻 t 的观测值只依赖于该时刻的状态值
P{Ot∣X1,X2,…,Xt−1,O1,O2,…,Ot−1}=P{Ot∣Xt} P\{O_t|X_1,X_2,\dots,X_{t-1},O_1,O_2,\dots,O_{t-1}\}=P\{O_t|X_t\} P{Ot∣X1,X2,…,Xt−1,O1,O2,…,Ot−1}=P{Ot∣Xt}
根据上述假设,得 HMM 的联合概率密度:
P{O1,O2,…,OT,X1,X2,…,XT} P\{O_1,O_2,\dots,O_T,X_1,X_2,\dots,X_T\} P{O1,O2,…,OT,X1,X2,…,XT}
=P{X1}P{O1∣X1}∏t=2TP{Xt∣Xt−1}P{Ot∣Xt} =P\{X_1\}P\{O_1|X_1\}\prod_{t=2}^{T}P\{X_t|X_{t-1}\}P\{O_t|X_t\} =P{X1}P{O1∣X1}t=2∏TP{Xt∣Xt−1}P{Ot∣Xt}
隐马尔科夫模型的组成
观察 HMM 的联合概率密度,发现其分为三部分:
-
初始状态概率
P{X1} P\{X_1\} P{X1} -
状态转移概率
P{Xt∣Xt−1} P\{X_t|X_{t-1}\} P{Xt∣Xt−1} -
观测输出概率 (发射概率)
P{Ot∣Xt} P\{O_t|X_t\} P{Ot∣Xt}
在状态值和观测值取值为离散值的情况下,这三种概率可以表示为矩阵。
假定状态值可能的取值为
x1,x2,…,xM x_1,x_2,\dots,x_M x1,x2,…,xM
观测值可能的取值为
o1,o2,…,oN o_1,o_2,\dots,o_N o1,o2,…,oN
则可得:
-
初始概率矩阵 π\piπ
πi=P{xi},i=1,2,…,M \pi_i=P\{x_i\},i=1,2,\dots,M πi=P{xi},i=1,2,…,M -
转移概率矩阵 A
Aij=P{xj∣xi},i,j=1,2,…,M A_{ij}=P\{x_j|x_i\},i,j=1,2,\dots,M Aij=P{xj∣xi},i,j=1,2,…,M -
发射概率矩阵 B
Bij=P{oj∣xi},i=1,2,…,M,j=1,2,…,N B_{ij}=P\{o_j|x_i\},i=1,2,\dots,M,j=1,2,\dots,N Bij=P{oj∣xi},i=1,2,…,M,j=1,2,…,N
最终 HMM 可表示为
λ=(π,A,B) \lambda=(\pi,A,B) λ=(π,A,B)
维特比算法
问题
对于
λ=(π,A,B) \lambda=(\pi,A,B) λ=(π,A,B)
隐状态集合
Q={q1,q2,…,qN} Q=\{q_1,q_2,\dots,q_N\} Q={q1,q2,…,qN}
观测值集合
V={v1,v2,…,vM} V=\{v_1,v_2,\dots,v_M\} V={v1,v2,…,vM}
观测结果序列
O=(o0,o1,…,oT) O=(o_0,o_1,\dots,o_T) O=(o0,o1,…,oT)
假设
π=[πi] \pi=\begin{bmatrix} \pi_i \end{bmatrix} π=[πi]
其中 πi\pi_iπi 表示 qiq_iqi 的初始概率。
A=[aij] A=\begin{bmatrix} a_{ij} \end{bmatrix} A=[aij]
其中 aija_{ij}aij 表示 qiq_iqi 向 qjq_jqj 的转移概率。
B=[bij] B=\begin{bmatrix} b_{ij} \end{bmatrix} B=[bij]
其中 bijb_{ij}bij 表示 qiq_iqi 向 vjv_jvj 的发射概率。
求出当前观测结果 O 最有可能的隐状态序列
I=(i0,i1,…,it) I=(i_0,i_1,\dots,i_t) I=(i0,i1,…,it)
解法
定义
设
δt(i)=maxi1,i2,…,it−1P{it=i,it−1,…,i1,ot,…,o1∣λ} \delta_t(i)=\max_{i_1,i_2,\dots,i_{t-1}}P\{i_t=i,i_{t-1},\dots,i_1,o_t,\dots,o_1|\lambda\} δt(i)=i1,i2,…,it−1maxP{it=i,it−1,…,i1,ot,…,o1∣λ}
表示时刻 t 状态为 i 的所有单个路径中概率最大值,则可得
δt+1(i)=maxi1,i2,it−1P{it+1=i,it,…,i1,ot+1,…,o1∣λ} \delta_{t+1}(i)=\max_{i_1,i_2,i_{t-1}}P\{i_{t+1}=i,i_t,\dots,i_1,o_{t+1},\dots,o_1|\lambda\} δt+1(i)=i1,i2,it−1maxP{it+1=i,it,…,i1,ot+1,…,o1∣λ}
=max1≤j≤N[δt(j)aji]bi(ot+1) =\max_{1\le j\le N}[\delta_t(j)a_{ji}]b_i(o_{t+1}) =1≤j≤Nmax[δt(j)aji]bi(ot+1)
设
Ψt(i)=argmaxi≤j≤N[δt−1(j)aji] \Psi_t(i)=arg\max_{i\le j\le N}[\delta_{t-1}(j)a_{ji}] Ψt(i)=argi≤j≤Nmax[δt−1(j)aji]
表示时刻 t 状态为 i 的所有单个路径中概率最大的路径的第 t-1 个结点。
例子
医生通过观察病人的状态判断病人是否生病。
设病人有状态有 {生病,健康},医生观测结果有 {头晕,不头晕}。
假设病人第一天生病,健康的概率各为 0.5;
若前一天生病,则第二天生病的概率为 0.6,健康的概率为 0.4;
若前一天健康,则第二天健康的概率为 0.8,生病的概率为 0.2;
若生病,则观测到头晕的概率为 0.7,不头晕的概率为 0.3;
若健康,则观测到头晕的概率为 0.1,不头晕的概率为 0.9;
医生观测三天,病人的观测值序列为 {不头晕,头晕,不头晕};
推测病人这三天是否生病。
构造出初始矩阵,转移概率矩阵,发射概率矩阵如下:
π=(0.50.5) \pi=\begin{pmatrix} 0.5\\ 0.5 \end{pmatrix} π=(0.50.5)
A=(0.60.40.20.8) A=\begin{pmatrix} 0.6&0.4\\ 0.2&0.8\\ \end{pmatrix} A=(0.60.20.40.8)
B=(0.70.30.10.9) B=\begin{pmatrix} 0.7&0.3\\ 0.1&0.9\\ \end{pmatrix} B=(0.70.10.30.9)
初始化
δ1(i)=πibi(o1) \delta_1(i)=\pi_ib_i(o_1) δ1(i)=πibi(o1)
即
δ1(1)=π1b1(o1=不头晕)=π1b12=0.15 \delta_1(1)=\pi_1b_1(o_1=不头晕)=\pi_1b_{12}=0.15 δ1(1)=π1b1(o1=不头晕)=π1b12=0.15
δ1(2)=π2b2(o1=不头晕)=π2b22=0.45 \delta_1(2)=\pi_2b_2(o_1=不头晕)=\pi_2b_{22}=0.45 δ1(2)=π2b2(o1=不头晕)=π2b22=0.45
上述两个值分别为第一天生病且观测到不头晕,与第一天不生病且观测到不头晕的概率。
Ψ1(1)=Ψ1(2)=0 \Psi_1(1)=\Psi_1(2)=0 Ψ1(1)=Ψ1(2)=0
迭代
第一次迭代,求第二时刻
δ2(j)=max1≤i≤2[δ1(i)aij]bj(o2) \delta_2(j)=\max_{1\le i\le2}[\delta_1(i)a_{ij}]b_j(o_2) δ2(j)=1≤i≤2max[δ1(i)aij]bj(o2)
即
δ1(1)a11=0.15⋅0.6=0.09 \delta_1(1)a_{11}=0.15\cdot0.6=0.09 δ1(1)a11=0.15⋅0.6=0.09
δ1(2)a21=0.45⋅0.2=0.09 \delta_1(2)a_{21}=0.45\cdot0.2=0.09 δ1(2)a21=0.45⋅0.2=0.09
δ2(1)=max1≤i≤2[δ1(i)ai1]b1(o2=头晕) \delta_2(1)=\max_{1\le i\le2}[\delta_1(i)a_{i1}]b_1(o_2=头晕) δ2(1)=1≤i≤2max[δ1(i)ai1]b1(o2=头晕)
=0.09⋅0.7=0.063 =0.09\cdot0.7=0.063 =0.09⋅0.7=0.063
Ψ2(1)=argmax1≤i≤2[δ1(i)ai2]=1 \Psi_2(1)=arg\max_{1\le i\le2}[\delta_1(i)a_{i2}]=1 Ψ2(1)=arg1≤i≤2max[δ1(i)ai2]=1
δ1(1)a12=0.15⋅0.4=0.06 \delta_1(1)a_{12}=0.15\cdot0.4=0.06 δ1(1)a12=0.15⋅0.4=0.06
δ1(2)a22=0.45⋅0.8=0.36 \delta_1(2)a_{22}=0.45\cdot0.8=0.36 δ1(2)a22=0.45⋅0.8=0.36
δ2(2)=max1≤i≤2[δ1(i)ai2]b2(o2=头晕) \delta_2(2)=\max_{1\le i\le2}[\delta_1(i)a_{i2}]b_2(o2=头晕) δ2(2)=1≤i≤2max[δ1(i)ai2]b2(o2=头晕)
=0.36⋅0.1=0.036 =0.36\cdot0.1=0.036 =0.36⋅0.1=0.036
Ψ2(2)=argmax1≤i≤2[δ1(i)ai2]=2 \Psi_2(2)=arg\max_{1\le i\le2}[\delta_1(i)a_{i2}]=2 Ψ2(2)=arg1≤i≤2max[δ1(i)ai2]=2
第二次迭代,求第三时刻
δ2(1)a11=0.063⋅0.6=0.0378 \delta_2(1)a_{11}=0.063\cdot0.6=0.0378 δ2(1)a11=0.063⋅0.6=0.0378
δ2(2)a21=0.036⋅0.2=0.0072 \delta_2(2)a_{21}=0.036\cdot0.2=0.0072 δ2(2)a21=0.036⋅0.2=0.0072
δ3(1)=max1≤i≤2[δ2(i)ai1]b1(o3=不头晕) \delta_3(1)=\max_{1\le i\le2}[\delta_2(i)a_{i1}]b_1(o_3=不头晕) δ3(1)=1≤i≤2max[δ2(i)ai1]b1(o3=不头晕)
=0.0378⋅0.3=0.01134 =0.0378\cdot0.3=0.01134 =0.0378⋅0.3=0.01134
Ψ3(1)=1 \Psi_3(1)=1 Ψ3(1)=1
δ2(1)a12=0.063⋅0.4=0.0252 \delta_2(1)a_{12}=0.063\cdot0.4=0.0252 δ2(1)a12=0.063⋅0.4=0.0252
δ2(2)a22=0.036⋅0.8=0.0288 \delta_2(2)a_{22}=0.036\cdot0.8=0.0288 δ2(2)a22=0.036⋅0.8=0.0288
δ3(2)=max1≤i≤2[δ2(i)ai2]b2(o3=不头晕) \delta_3(2)=\max_{1\le i\le2}[\delta_2(i)a_{i2}]b_2(o_3=不头晕) δ3(2)=1≤i≤2max[δ2(i)ai2]b2(o3=不头晕)
=0.0288⋅0.9=0.02592 =0.0288\cdot0.9=0.02592 =0.0288⋅0.9=0.02592
Ψ3(2)=2 \Psi_3(2)=2 Ψ3(2)=2
回溯
q3^=argmax0≤i≤2[δ3(i)]=2 \hat{q_3}=arg\max_{0\le i\le2}[\delta_3(i)]=2 q3^=arg0≤i≤2max[δ3(i)]=2
qt^=Ψt+1(qt+1^) \hat{q_t}=\Psi_{t+1}(\hat{q_{t+1}}) qt^=Ψt+1(qt+1^)
即
q2^=Ψ3(q3^)=Ψ3(2)=2 \hat{q_2}=\Psi_3(\hat{q_3})=\Psi_3(2)=2 q2^=Ψ3(q3^)=Ψ3(2)=2
q1^=Ψ2(q2^)=Ψ2(2)=2 \hat{q_1}=\Psi_2(\hat{q_2})=\Psi_2(2)=2 q1^=Ψ2(q2^)=Ψ2(2)=2
解得隐状态序列为
Q^=(2,2,2) \hat{Q}=(2,2,2) Q^=(2,2,2)
即 (健康,健康,健康)
lta_2(i)a_{i2}]b_2(o_3=不头晕)
$$
=0.0288⋅0.9=0.02592 =0.0288\cdot0.9=0.02592 =0.0288⋅0.9=0.02592
Ψ3(2)=2 \Psi_3(2)=2 Ψ3(2)=2
回溯
q3^=argmax0≤i≤2[δ3(i)]=2 \hat{q_3}=arg\max_{0\le i\le2}[\delta_3(i)]=2 q3^=arg0≤i≤2max[δ3(i)]=2
qt^=Ψt+1(qt+1^) \hat{q_t}=\Psi_{t+1}(\hat{q_{t+1}}) qt^=Ψt+1(qt+1^)
即
q2^=Ψ3(q3^)=Ψ3(2)=2 \hat{q_2}=\Psi_3(\hat{q_3})=\Psi_3(2)=2 q2^=Ψ3(q3^)=Ψ3(2)=2
q1^=Ψ2(q2^)=Ψ2(2)=2 \hat{q_1}=\Psi_2(\hat{q_2})=\Psi_2(2)=2 q1^=Ψ2(q2^)=Ψ2(2)=2
解得隐状态序列为
Q^=(2,2,2) \hat{Q}=(2,2,2) Q^=(2,2,2)
即 (健康,健康,健康)
更多推荐



所有评论(0)