【机器学习自学笔记8】隐马尔可夫模型(HMM)

隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。

隐马尔可夫模型的结构

HMM 模型是一种生成式模型。

HMM 模型中有 2 个相关序列,分别是状态序列和观测序列,HMM 模型具有以下规则:

  • 观测序列是可以直接观测的,状态序列是不可观测的
  • 状态序列在 t 时刻的值只与 t-1 时刻的值有关
  • 观测序列在 t 时刻的值只与 t 时刻状态序列的值有关

设状态序列
X = { X 1 , X 2 , … , X n } X = \{X_1,X_2,\dots,X_n\} X={X1,X2,,Xn}
观测序列
O = { O 1 , O 2 , … , O n } O=\{O_1,O_2,\dots,O_n\} O={O1,O2,,On}
则 HMM 模型的结构如下图所示:
image-20210125161351112

隐马尔科夫模型的假设

根据上述结构和规则,我们可以得出如下假设:

  • 马尔可夫性假设:t 时刻的状态出现的概率只与 t-1 时刻的状态有关
    P { X t ∣ X 1 , X 2 , … , X t − 1 } = P { X t ∣ X t − 1 } P\{X_t|X_1,X_2,\dots,X_{t-1}\}=P\{X_t|X_{t-1}\} P{XtX1,X2,,Xt1}=P{XtXt1}

  • 齐次性假设:时间平移不变性
    P { X t ∣ X t − 1 } = P { X s ∣ X s − 1 } , i f X t = X s a n d X t − 1 = X s − 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{XtXt1}=P{XsXs1},ifXt=XsandXt1=Xs1

  • 观测独立性假设:某个时刻 t 的观测值只依赖于该时刻的状态值
    P { O t ∣ X 1 , X 2 , … , X t − 1 , O 1 , O 2 , … , O t − 1 } = P { O t ∣ X t } 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{OtX1,X2,,Xt1,O1,O2,,Ot1}=P{OtXt}

根据上述假设,得 HMM 的联合概率密度:
P { O 1 , O 2 , … , O T , X 1 , X 2 , … , X T } P\{O_1,O_2,\dots,O_T,X_1,X_2,\dots,X_T\} P{O1,O2,,OT,X1,X2,,XT}

= P { X 1 } P { O 1 ∣ X 1 } ∏ t = 2 T P { X t ∣ X t − 1 } P { O t ∣ X t } =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{O1X1}t=2TP{XtXt1}P{OtXt}

隐马尔科夫模型的组成

观察 HMM 的联合概率密度,发现其分为三部分:

  • 初始状态概率
    P { X 1 } P\{X_1\} P{X1}

  • 状态转移概率
    P { X t ∣ X t − 1 } P\{X_t|X_{t-1}\} P{XtXt1}

  • 观测输出概率 (发射概率)
    P { O t ∣ X t } P\{O_t|X_t\} P{OtXt}

在状态值和观测值取值为离散值的情况下,这三种概率可以表示为矩阵。

假定状态值可能的取值为
x 1 , x 2 , … , x M x_1,x_2,\dots,x_M x1,x2,,xM
观测值可能的取值为
o 1 , o 2 , … , o N o_1,o_2,\dots,o_N o1,o2,,oN
则可得:

  • 初始概率矩阵 π \pi π
    π i = P { x i } , i = 1 , 2 , … , M \pi_i=P\{x_i\},i=1,2,\dots,M πi=P{xi},i=1,2,,M

  • 转移概率矩阵 A
    A i j = P { x j ∣ x i } , i , j = 1 , 2 , … , M A_{ij}=P\{x_j|x_i\},i,j=1,2,\dots,M Aij=P{xjxi},i,j=1,2,,M

  • 发射概率矩阵 B
    B i j = P { o j ∣ x i } , 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{ojxi},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 = { q 1 , q 2 , … , q N } Q=\{q_1,q_2,\dots,q_N\} Q={q1,q2,,qN}
观测值集合
V = { v 1 , v 2 , … , v M } V=\{v_1,v_2,\dots,v_M\} V={v1,v2,,vM}

观测结果序列
O = ( o 0 , o 1 , … , o T ) 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 表示 q i q_i qi 的初始概率。
A = [ a i j ] A=\begin{bmatrix} a_{ij} \end{bmatrix} A=[aij]
其中 a i j a_{ij} aij 表示 q i q_i qi q j q_j qj 的转移概率。
B = [ b i j ] B=\begin{bmatrix} b_{ij} \end{bmatrix} B=[bij]
其中 b i j b_{ij} bij 表示 q i q_i qi v j v_j vj 的发射概率。

求出当前观测结果 O 最有可能的隐状态序列
I = ( i 0 , i 1 , … , i t ) I=(i_0,i_1,\dots,i_t) I=(i0,i1,,it)

解法

定义


δ t ( i ) = max ⁡ i 1 , i 2 , … , i t − 1 P { i t = i , i t − 1 , … , i 1 , o t , … , o 1 ∣ λ } \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,,it1maxP{it=i,it1,,i1,ot,,o1λ}
表示时刻 t 状态为 i 的所有单个路径中概率最大值,则可得
δ t + 1 ( i ) = max ⁡ i 1 , i 2 , i t − 1 P { i t + 1 = i , i t , … , i 1 , o t + 1 , … , o 1 ∣ λ } \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,it1maxP{it+1=i,it,,i1,ot+1,,o1λ}

= max ⁡ 1 ≤ j ≤ N [ δ t ( j ) a j i ] b i ( o t + 1 ) =\max_{1\le j\le N}[\delta_t(j)a_{ji}]b_i(o_{t+1}) =1jNmax[δt(j)aji]bi(ot+1)


Ψ t ( i ) = a r g max ⁡ i ≤ j ≤ N [ δ t − 1 ( j ) a j i ] \Psi_t(i)=arg\max_{i\le j\le N}[\delta_{t-1}(j)a_{ji}] Ψt(i)=argijNmax[δt1(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.5 0.5 ) \pi=\begin{pmatrix} 0.5\\ 0.5 \end{pmatrix} π=(0.50.5)

A = ( 0.6 0.4 0.2 0.8 ) A=\begin{pmatrix} 0.6&0.4\\ 0.2&0.8\\ \end{pmatrix} A=(0.60.20.40.8)

B = ( 0.7 0.3 0.1 0.9 ) B=\begin{pmatrix} 0.7&0.3\\ 0.1&0.9\\ \end{pmatrix} B=(0.70.10.30.9)

初始化

δ 1 ( i ) = π i b i ( o 1 ) \delta_1(i)=\pi_ib_i(o_1) δ1(i)=πibi(o1)


δ 1 ( 1 ) = π 1 b 1 ( o 1 = 不 头 晕 ) = π 1 b 12 = 0.15 \delta_1(1)=\pi_1b_1(o_1=不头晕)=\pi_1b_{12}=0.15 δ1(1)=π1b1(o1=)=π1b12=0.15

δ 1 ( 2 ) = π 2 b 2 ( o 1 = 不 头 晕 ) = π 2 b 22 = 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 ) = max ⁡ 1 ≤ i ≤ 2 [ δ 1 ( i ) a i j ] b j ( o 2 ) \delta_2(j)=\max_{1\le i\le2}[\delta_1(i)a_{ij}]b_j(o_2) δ2(j)=1i2max[δ1(i)aij]bj(o2)


δ 1 ( 1 ) a 11 = 0.15 ⋅ 0.6 = 0.09 \delta_1(1)a_{11}=0.15\cdot0.6=0.09 δ1(1)a11=0.150.6=0.09

δ 1 ( 2 ) a 21 = 0.45 ⋅ 0.2 = 0.09 \delta_1(2)a_{21}=0.45\cdot0.2=0.09 δ1(2)a21=0.450.2=0.09

δ 2 ( 1 ) = max ⁡ 1 ≤ i ≤ 2 [ δ 1 ( i ) a i 1 ] b 1 ( o 2 = 头 晕 ) \delta_2(1)=\max_{1\le i\le2}[\delta_1(i)a_{i1}]b_1(o_2=头晕) δ2(1)=1i2max[δ1(i)ai1]b1(o2=)

= 0.09 ⋅ 0.7 = 0.063 =0.09\cdot0.7=0.063 =0.090.7=0.063

Ψ 2 ( 1 ) = a r g max ⁡ 1 ≤ i ≤ 2 [ δ 1 ( i ) a i 2 ] = 1 \Psi_2(1)=arg\max_{1\le i\le2}[\delta_1(i)a_{i2}]=1 Ψ2(1)=arg1i2max[δ1(i)ai2]=1

δ 1 ( 1 ) a 12 = 0.15 ⋅ 0.4 = 0.06 \delta_1(1)a_{12}=0.15\cdot0.4=0.06 δ1(1)a12=0.150.4=0.06

δ 1 ( 2 ) a 22 = 0.45 ⋅ 0.8 = 0.36 \delta_1(2)a_{22}=0.45\cdot0.8=0.36 δ1(2)a22=0.450.8=0.36

δ 2 ( 2 ) = max ⁡ 1 ≤ i ≤ 2 [ δ 1 ( i ) a i 2 ] b 2 ( o 2 = 头 晕 ) \delta_2(2)=\max_{1\le i\le2}[\delta_1(i)a_{i2}]b_2(o2=头晕) δ2(2)=1i2max[δ1(i)ai2]b2(o2=)

= 0.36 ⋅ 0.1 = 0.036 =0.36\cdot0.1=0.036 =0.360.1=0.036

Ψ 2 ( 2 ) = a r g max ⁡ 1 ≤ i ≤ 2 [ δ 1 ( i ) a i 2 ] = 2 \Psi_2(2)=arg\max_{1\le i\le2}[\delta_1(i)a_{i2}]=2 Ψ2(2)=arg1i2max[δ1(i)ai2]=2

第二次迭代,求第三时刻

δ 2 ( 1 ) a 11 = 0.063 ⋅ 0.6 = 0.0378 \delta_2(1)a_{11}=0.063\cdot0.6=0.0378 δ2(1)a11=0.0630.6=0.0378

δ 2 ( 2 ) a 21 = 0.036 ⋅ 0.2 = 0.0072 \delta_2(2)a_{21}=0.036\cdot0.2=0.0072 δ2(2)a21=0.0360.2=0.0072

δ 3 ( 1 ) = max ⁡ 1 ≤ i ≤ 2 [ δ 2 ( i ) a i 1 ] b 1 ( o 3 = 不 头 晕 ) \delta_3(1)=\max_{1\le i\le2}[\delta_2(i)a_{i1}]b_1(o_3=不头晕) δ3(1)=1i2max[δ2(i)ai1]b1(o3=)

= 0.0378 ⋅ 0.3 = 0.01134 =0.0378\cdot0.3=0.01134 =0.03780.3=0.01134

Ψ 3 ( 1 ) = 1 \Psi_3(1)=1 Ψ3(1)=1

δ 2 ( 1 ) a 12 = 0.063 ⋅ 0.4 = 0.0252 \delta_2(1)a_{12}=0.063\cdot0.4=0.0252 δ2(1)a12=0.0630.4=0.0252

δ 2 ( 2 ) a 22 = 0.036 ⋅ 0.8 = 0.0288 \delta_2(2)a_{22}=0.036\cdot0.8=0.0288 δ2(2)a22=0.0360.8=0.0288

δ 3 ( 2 ) = max ⁡ 1 ≤ i ≤ 2 [ δ 2 ( i ) a i 2 ] b 2 ( o 3 = 不 头 晕 ) \delta_3(2)=\max_{1\le i\le2}[\delta_2(i)a_{i2}]b_2(o_3=不头晕) δ3(2)=1i2max[δ2(i)ai2]b2(o3=)

= 0.0288 ⋅ 0.9 = 0.02592 =0.0288\cdot0.9=0.02592 =0.02880.9=0.02592

Ψ 3 ( 2 ) = 2 \Psi_3(2)=2 Ψ3(2)=2

回溯

q 3 ^ = a r g max ⁡ 0 ≤ i ≤ 2 [ δ 3 ( i ) ] = 2 \hat{q_3}=arg\max_{0\le i\le2}[\delta_3(i)]=2 q3^=arg0i2max[δ3(i)]=2

q t ^ = Ψ t + 1 ( q t + 1 ^ ) \hat{q_t}=\Psi_{t+1}(\hat{q_{t+1}}) qt^=Ψt+1(qt+1^)


q 2 ^ = Ψ 3 ( q 3 ^ ) = Ψ 3 ( 2 ) = 2 \hat{q_2}=\Psi_3(\hat{q_3})=\Psi_3(2)=2 q2^=Ψ3(q3^)=Ψ3(2)=2

q 1 ^ = Ψ 2 ( q 2 ^ ) = Ψ 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.02880.9=0.02592

Ψ 3 ( 2 ) = 2 \Psi_3(2)=2 Ψ3(2)=2

回溯

q 3 ^ = a r g max ⁡ 0 ≤ i ≤ 2 [ δ 3 ( i ) ] = 2 \hat{q_3}=arg\max_{0\le i\le2}[\delta_3(i)]=2 q3^=arg0i2max[δ3(i)]=2

q t ^ = Ψ t + 1 ( q t + 1 ^ ) \hat{q_t}=\Psi_{t+1}(\hat{q_{t+1}}) qt^=Ψt+1(qt+1^)


q 2 ^ = Ψ 3 ( q 3 ^ ) = Ψ 3 ( 2 ) = 2 \hat{q_2}=\Psi_3(\hat{q_3})=\Psi_3(2)=2 q2^=Ψ3(q3^)=Ψ3(2)=2

q 1 ^ = Ψ 2 ( q 2 ^ ) = Ψ 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)
即 (健康,健康,健康)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值