近似算法
近似算法思想:在每个时刻t选择在该时刻最有可能出现的状态 i t ∗ i_{t}^{*} it∗,从而得到一个状态序列 I ∗ = ( i 1 ∗ , i 2 ∗ , … , i T ∗ ) I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \ldots, i_{T}^{*}\right) I∗=(i1∗,i2∗,…,iT∗),将它作为预测的结果。具体算法如下:
给定隐马尔科夫模型
λ
\lambda
λ和观测序列
O
O
O, 在时刻t处于状态
q
i
q_i
qi的概率
γ
t
(
i
)
\gamma_{t}(i)
γt(i)是
γ
t
(
i
)
=
α
t
(
i
)
β
t
(
i
)
∑
j
=
1
N
α
t
(
j
)
β
t
(
j
)
\gamma_{t}(i)=\frac{\alpha_{t}(i) \beta_{t}(i)}{\sum_{j=1}^{N} \alpha_{t}(j) \beta_{t}(j)}
γt(i)=∑j=1Nαt(j)βt(j)αt(i)βt(i)
在每一时刻t最有可能的状态
i
t
∗
i_{t}^{*}
it∗是
i
t
∗
=
arg
max
1
≤
i
≤
N
[
γ
t
(
i
)
]
,
t
=
1
,
2
,
…
,
T
i_{t}^{*}=\arg \max _{1 \leq i \leq N}\left[\gamma_{t}(i)\right], \quad t=1,2, \ldots, T
it∗=arg1≤i≤Nmax[γt(i)],t=1,2,…,T
从而得到状态序列
I
∗
=
(
i
1
∗
,
i
2
∗
,
…
,
i
T
∗
)
I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \ldots, i_{T}^{*}\right)
I∗=(i1∗,i2∗,…,iT∗)。但是近似算法不能保证计算出来的状态序列是整体最有可能的状态序列。因为它只是计算单个状态的最大可能性,从而有可能预测出相邻状态转化概率为0的序列。
维特比算法
维特比算法实际就是用动态规划解隐马尔科夫模型预测问题。即用动态规划求概率最大路径,这时一条路径对应着一个状态序列。具体算法如下:
定义在时刻t状态为
q
i
q_{i}
qi的所有单个路径
(
i
1
,
i
2
,
…
,
i
t
)
\left(i_{1}, i_{2}, \ldots, i_{t}\right)
(i1,i2,…,it)中概率最大值为:
δ
t
(
i
)
=
max
i
1
,
i
2
,
.
.
,
i
t
−
1
P
(
o
1
,
…
,
o
t
,
i
1
,
…
,
i
t
−
1
,
i
t
=
q
i
)
,
i
=
1
,
2
,
…
,
N
\delta_{t}(i)=\max _{i_{1}, i_{2}, . ., i_{t-1}} P\left(o_{1}, \ldots, o_{t}, i_{1}, \ldots, i_{t-1}, i_{t}=q_{i}\right), \quad i=1,2, \ldots, N
δt(i)=i1,i2,..,it−1maxP(o1,…,ot,i1,…,it−1,it=qi),i=1,2,…,N
由上述定义可知:
δ
1
(
i
)
=
π
i
b
i
o
1
δ
2
(
i
)
=
max
1
≤
j
≤
N
[
δ
1
(
j
)
a
j
i
]
b
i
o
2
δ
3
(
i
)
=
max
1
≤
j
≤
N
[
δ
2
(
j
)
a
j
i
]
b
i
o
3
\begin{aligned} \delta_{1}(i) &=\pi_{i} b_{i o_{1}} \\ \delta_{2}(i) &=\max _{1 \leq j \leq N}\left[\delta_{1}(j) a_{j i}\right] b_{i o_{2}} \\ \delta_{3}(i) &=\max _{1 \leq j \leq N}\left[\delta_{2}(j) a_{j i}\right] b_{i o_{3}} \end{aligned}
δ1(i)δ2(i)δ3(i)=πibio1=1≤j≤Nmax[δ1(j)aji]bio2=1≤j≤Nmax[δ2(j)aji]bio3
以此类推可得如下递推公式:
δ
t
(
i
)
=
max
1
≤
j
≤
N
[
δ
t
−
1
(
j
)
a
j
i
]
b
i
o
t
\delta_{t}(i)=\max _{1 \leq j \leq N}\left[\delta_{t-1}(j) a_{j i}\right] b_{i o_{t}}
δt(i)=1≤j≤Nmax[δt−1(j)aji]biot
定义在时刻t状态为
q
i
q_i
qi的所有单个路径
(
i
1
,
i
2
,
…
,
i
t
−
1
,
i
t
)
\left(i_{1}, i_{2}, \ldots, i_{t}-1, i_{t}\right)
(i1,i2,…,it−1,it)中概率最大的路径的第t-1个结点为
ψ
t
(
i
)
=
arg
max
1
≤
j
≤
N
[
δ
t
−
1
(
j
)
a
j
i
]
\psi_{t}(i)=\arg \max _{1 \leq j \leq N}\left[\delta_{t-1}(j) a_{j i}\right]
ψt(i)=arg1≤j≤Nmax[δt−1(j)aji]
注意这里是结点,其实表达的意义与i相同,就是第i种状态。
因此,取 i T ∗ = arg max i [ δ T ( i ) ] i_{T}^{*}=\arg \max _{i}\left[\delta_{T}(i)\right] iT∗=argmaxi[δT(i)],则 i T − 1 ∗ = ψ T ( i T ∗ ) , i T − 2 ∗ = ψ T − 1 ( i T − 1 ∗ ) , … , i 1 ∗ = ψ 2 ( i 2 ∗ ) i_{T-1}^{*}=\psi_{T}\left(i_{T}^{*}\right), i_{T-2}^{*}=\psi_{T-1}\left(i_{T-1}^{*}\right), \ldots, i_{1}^{*}=\psi_{2}\left(i_{2}^{*}\right) iT−1∗=ψT(iT∗),iT−2∗=ψT−1(iT−1∗),…,i1∗=ψ2(i2∗)。
i T − 1 ∗ = ψ T ( i T ∗ ) i_{T-1}^{*}=\psi_{T}\left(i_{T}^{*}\right) iT−1∗=ψT(iT∗)表示的就是时刻T状态为概率最大的状态情况下,所有单个路径中概率最大的路径的第T-1个结点。也就是在后一个结点取概率最大时,前一个概率最大的结点是哪个。
《统计学习方法》例10.3
假设有3个盒子,每个盒子里面都装有红白两种颜色的球,盒子里的红白球数如下表所示:
盒子
1
2
3
红球数
5
4
7
白球数
5
6
3
\begin{array}{|c|c|c|c|} \hline \text { 盒子 } & 1 & 2 & 3 \\ \hline \text { 红球数 } & 5 & 4 & 7 \\ \hline \text { 白球数 } & 5 & 6 & 3 \\ \hline \end{array}
盒子 红球数 白球数 155246373
按照下面的方法抽球,产生一个球的颜色的观测序列:首先以0.2、0.4、0.4的概率从1、2、3号盒子中选取一个盒子,从这个盒子里随机抽出1个球,记录其颜色后放回,接着按一下概率选取下一个盒子
1
2
3
1
0.5
0.2
0.3
2
0.3
0.5
0.2
3
0.2
0.3
0.5
\begin{array}{|c|c|c|c|} \hline & \mathbf{1} & \mathbf{2} & \mathbf{3} \\ \hline 1 & 0.5 & 0.2 & 0.3 \\ \hline 2 & 0.3 & 0.5 & 0.2 \\ \hline 3 & 0.2 & 0.3 & 0.5 \\ \hline \end{array}
12310.50.30.220.20.50.330.30.20.5
确定转移的盒子后,再从盒子里面随机抽取1个球,记录其颜色后放回,如此下去,重复3次,最终得到观测序列O={红,白,红}。记选取的盒子序列为状态序列,试求最优状态序列,即最优路径
I
∗
=
(
i
1
∗
,
i
2
∗
,
i
3
∗
)
I^{*}=\left(i_{1}^{*}, i_{2}^{*}, i_{3}^{*}\right)
I∗=(i1∗,i2∗,i3∗)。
解:
该例子是一个典型的隐马尔可夫模型,盒子代表了隐变量状态序列。由题意可得隐马尔可夫模型的参数(三要素)为:
A
=
[
0.5
0.2
0.3
0.3
0.5
0.2
0.2
0.3
0.5
]
B
=
[
0.5
0.5
0.4
0.6
0.7
0.3
]
π
=
(
0.2
,
0.4
,
0.4
)
T
A=\left[\begin{array}{lll} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5 \end{array}\right] \quad B=\left[\begin{array}{ll} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \end{array}\right] \quad \pi=(0.2,0.4,0.4)^{\mathrm{T}}
A=⎣⎡0.50.30.20.20.50.30.30.20.5⎦⎤B=⎣⎡0.50.40.70.50.60.3⎦⎤π=(0.2,0.4,0.4)T
其中B的第1、2列分别代表观测到红、白两球的概率。
按照维特比算法我们可以进行如下计算
δ
1
(
1
)
=
π
1
b
1
o
1
=
0.2
×
0.5
=
0.1
,
ψ
1
(
1
)
=
0
δ
1
(
2
)
=
π
2
b
2
o
1
=
0.4
×
0.4
=
0.16
,
ψ
1
(
2
)
=
0
δ
1
(
3
)
=
π
3
b
3
o
1
=
0.4
×
0.7
=
0.28
,
ψ
1
(
3
)
=
0
\begin{array}{ll} \delta_{1}(1)=\pi_{1} b_{1 o_{1}}=0.2 \times 0.5=0.1 , & \psi_{1}(1)=0 \\ \delta_{1}(2)=\pi_{2} b_{2 o_{1}}=0.4 \times 0.4=0.16 , & \psi_{1}(2)=0 \\ \delta_{1}(3)=\pi_{3} b_{3 o_{1}}=0.4 \times 0.7=0.28 , & \psi_{1}(3)=0 \end{array}
δ1(1)=π1b1o1=0.2×0.5=0.1,δ1(2)=π2b2o1=0.4×0.4=0.16,δ1(3)=π3b3o1=0.4×0.7=0.28,ψ1(1)=0ψ1(2)=0ψ1(3)=0
然后我们计算时刻t=2的路径概率最大值
δ
2
(
1
)
=
max
1
≤
j
≤
3
[
δ
1
(
j
)
a
j
1
]
b
1
o
2
=
max
{
0.1
×
0.5
=
0.05
0.16
×
0.3
=
0.048
0.28
×
0.2
=
0.056
}
×
0.5
=
0.028
δ
2
(
2
)
=
max
1
≤
j
≤
3
[
δ
1
(
j
)
a
j
2
]
b
2
o
2
=
max
{
0.1
×
0.2
=
0.02
0.16
×
0.5
=
0.08
0.28
×
0.3
=
0.084
}
×
0.6
=
0.0504
δ
2
(
3
)
=
max
1
≤
j
≤
3
[
δ
1
(
j
)
a
j
3
]
b
3
o
2
=
max
{
0.1
×
0.3
=
0.03
0.16
×
0.2
=
0.032
0.28
×
0
−
0.14
}
×
0.3
=
0.042
\begin{aligned} &\delta_{2}(1)=\max _{1 \leq j \leq 3}\left[\delta_{1}(j) a_{j 1}\right] b_{1 o_{2}}=\max \left\{\begin{array}{c} 0.1 \times 0.5=0.05 \\ 0.16 \times 0.3=0.048 \\ 0.28 \times 0.2=0.056 \end{array}\right\} \times 0.5=0.028 \\ &\delta_{2}(2)=\max _{1 \leq j \leq 3}\left[\delta_{1}(j) a_{j 2}\right] b_{2 o_{2}}=\max \left\{\begin{array}{c} 0.1 \times 0.2=0.02 \\ 0.16 \times 0.5=0.08 \\ 0.28 \times 0.3=0.084 \end{array}\right\} \times 0.6=0.0504 \\ &\delta_{2}(3)=\max _{1 \leq j \leq 3}\left[\delta_{1}(j) a_{j 3}\right] b_{3 o_{2}}=\max \left\{\begin{array}{c} 0.1 \times 0.3=0.03 \\ 0.16 \times 0.2=0.032 \\ 0.28 \times 0-0.14 \end{array}\right\} \times 0.3=0.042 \end{aligned}
δ2(1)=1≤j≤3max[δ1(j)aj1]b1o2=max⎩⎨⎧0.1×0.5=0.050.16×0.3=0.0480.28×0.2=0.056⎭⎬⎫×0.5=0.028δ2(2)=1≤j≤3max[δ1(j)aj2]b2o2=max⎩⎨⎧0.1×0.2=0.020.16×0.5=0.080.28×0.3=0.084⎭⎬⎫×0.6=0.0504δ2(3)=1≤j≤3max[δ1(j)aj3]b3o2=max⎩⎨⎧0.1×0.3=0.030.16×0.2=0.0320.28×0−0.14⎭⎬⎫×0.3=0.042
可以看出,都是由时刻t=2时,都是从上一时刻t=1时处于状态3(也就是盒子3)出发的路径最大。
ψ
2
(
1
)
=
arg
max
1
≤
j
≤
3
[
δ
1
(
j
)
a
j
1
]
=
3
ψ
2
(
2
)
=
arg
max
1
≤
j
≤
3
[
δ
1
(
j
)
a
j
2
]
=
3
ψ
2
(
3
)
=
arg
max
1
≤
j
≤
3
[
δ
1
(
j
)
a
j
3
]
=
3
\begin{aligned} &\psi_{2}(1)=\arg \max _{1 \leq j \leq 3}\left[\delta_{1}(j) a_{j 1}\right]=3 \\ &\psi_{2}(2)=\arg \max _{1 \leq j \leq 3}\left[\delta_{1}(j) a_{j 2}\right]=3 \\ &\psi_{2}(3)=\arg \max _{1 \leq j \leq 3}\left[\delta_{1}(j) a_{j 3}\right]=3 \end{aligned}
ψ2(1)=arg1≤j≤3max[δ1(j)aj1]=3ψ2(2)=arg1≤j≤3max[δ1(j)aj2]=3ψ2(3)=arg1≤j≤3max[δ1(j)aj3]=3
继续计算下一时刻
δ
3
(
1
)
=
max
1
≤
j
≤
3
[
δ
2
(
j
)
a
j
1
]
b
1
o
3
=
max
{
0.028
×
0.5
=
0.014
0.0504
×
0.3
=
0.01512
0.042
×
0.2
=
0.0084
}
×
0.5
=
0.00756
δ
3
(
2
)
=
max
1
≤
j
≤
3
[
δ
2
(
j
)
a
j
2
]
b
2
o
3
=
max
{
0.028
×
0.2
=
0.0056
0.0504
×
0.5
=
0.0252
0.042
×
0.3
=
0.0126
}
×
0.4
=
0.01008
δ
3
(
3
)
=
max
1
≤
j
≤
3
[
δ
2
(
j
)
a
j
3
]
b
3
o
3
=
max
{
0.028
×
0.3
=
0.0084
0.0504
×
0.2
=
0.01008
0.042
×
0.5
=
0.021
}
×
0.7
=
0.0147
\begin{aligned} &\delta_{3}(1)=\max _{1 \leq j \leq 3}\left[\delta_{2}(j) a_{j 1}\right] b_{1 o_{3}}=\max \left\{\begin{array}{c} 0.028 \times 0.5=0.014 \\ 0.0504 \times 0.3=0.01512 \\ 0.042 \times 0.2=0.0084 \end{array}\right\} \times 0.5=0.00756 \\ &\delta_{3}(2)=\max _{1 \leq j \leq 3}\left[\delta_{2}(j) a_{j 2}\right] b_{2 o_{3}}=\max \left\{\begin{array}{c} 0.028 \times 0.2=0.0056 \\ 0.0504 \times 0.5=0.0252 \\ 0.042 \times 0.3=0.0126 \end{array}\right\} \times 0.4=0.01008 \\ &\delta_{3}(3)=\max _{1 \leq j \leq 3}\left[\delta_{2}(j) a_{j 3}\right] b_{3 o_{3}}=\max \left\{\begin{array}{c} 0.028 \times 0.3=0.0084 \\ 0.0504 \times 0.2=0.01008 \\ 0.042 \times 0.5=0.021 \end{array}\right\} \times 0.7=0.0147 \end{aligned}
δ3(1)=1≤j≤3max[δ2(j)aj1]b1o3=max⎩⎨⎧0.028×0.5=0.0140.0504×0.3=0.015120.042×0.2=0.0084⎭⎬⎫×0.5=0.00756δ3(2)=1≤j≤3max[δ2(j)aj2]b2o3=max⎩⎨⎧0.028×0.2=0.00560.0504×0.5=0.02520.042×0.3=0.0126⎭⎬⎫×0.4=0.01008δ3(3)=1≤j≤3max[δ2(j)aj3]b3o3=max⎩⎨⎧0.028×0.3=0.00840.0504×0.2=0.010080.042×0.5=0.021⎭⎬⎫×0.7=0.0147
可以看出,t=3时,状态1、2从上一时刻t=2的状态2转移的概率最大,状态3还是从上一时刻的状态3转移的概率最大。
ψ
3
(
1
)
=
arg
max
1
≤
j
≤
3
[
δ
2
(
j
)
a
j
1
]
=
2
ψ
3
(
2
)
=
arg
max
1
≤
j
≤
3
[
δ
2
(
j
)
a
j
2
]
=
2
ψ
3
(
3
)
=
arg
max
1
≤
j
≤
3
[
δ
2
(
j
)
a
j
3
]
=
3
\begin{aligned} &\psi_{3}(1)=\arg \max _{1 \leq j \leq 3}\left[\delta_{2}(j) a_{j 1}\right]=2 \\ &\psi_{3}(2)=\arg \max _{1 \leq j \leq 3}\left[\delta_{2}(j) a_{j 2}\right]=2 \\ &\psi_{3}(3)=\arg \max _{1 \leq j \leq 3}\left[\delta_{2}(j) a_{j 3}\right]=3 \end{aligned}
ψ3(1)=arg1≤j≤3max[δ2(j)aj1]=2ψ3(2)=arg1≤j≤3max[δ2(j)aj2]=2ψ3(3)=arg1≤j≤3max[δ2(j)aj3]=3
所以,最优状态序列为
i
3
∗
=
arg
max
i
[
δ
3
(
i
)
]
=
3
i
2
∗
=
ψ
3
(
i
3
∗
)
=
ψ
3
(
3
)
=
3
i
1
∗
=
ψ
2
(
i
2
∗
)
=
ψ
2
(
3
)
=
3
\begin{aligned} &i_{3}^{*}=\arg \max _{i}\left[\delta_{3}(i)\right]=3 \\ &i_{2}^{*}=\psi_{3}\left(i_{3}^{*}\right)=\psi_{3}(3)=3 \\ &i_{1}^{*}=\psi_{2}\left(i_{2}^{*}\right)=\psi_{2}(3)=3 \end{aligned}
i3∗=argimax[δ3(i)]=3i2∗=ψ3(i3∗)=ψ3(3)=3i1∗=ψ2(i2∗)=ψ2(3)=3