0


隐马尔可夫模型问题一:求模型观测序列的概率

背景

隐马尔可夫模型关注的三个问题中,第一个是求模型观测序列的概率。

暴力求解

已知HMM模型的参数

  1. λ
  2. =
  3. [
  4. A
  5. ,
  6. B
  7. ,
  8. π
  9. ]
  10. \lambda = [{\bf{A,B,\pi }}]
  11. λ=[A,B,π],
  12. A
  13. {\bf{A}}
  14. A是隐藏状态转移概率矩阵,
  15. B
  16. {\bf{B}}
  17. B是观测状态概率矩阵。对于隐藏状态的初始概率分布记作
  18. π
  19. {\bf{\pi }}
  20. π。已知观测序列
  21. O
  22. =
  23. {
  24. o
  25. 1
  26. ,
  27. o
  28. 2
  29. ,
  30. ,
  31. o
  32. i
  33. ,
  34. ,
  35. o
  36. M
  37. }
  38. O = \{ {o_1},{o_2}, \cdots ,{o_i}, \cdots ,{o_M}\}
  39. O={o1​,o2​,⋯,oi​,⋯,oM​},现在我们需要求出
  40. P
  41. (
  42. O
  43. λ
  44. )
  45. P(O|\lambda )
  46. P(O∣λ)出现的条件概率。首先已经知道
  47. B
  48. {\bf{B}}
  49. B ,即隐藏状态到观测状态的概率,已经知道
  50. A
  51. {\bf{A}}
  52. A,即隐藏态之间的转移概率。然后,我们可以直接使用暴力求解的方式。暴力求解过程如下所示:

(1) 任意隐藏序列出现的概率表示为:

  1. P
  2. (
  3. I
  4. λ
  5. )
  6. =
  7. π
  8. i
  9. 1
  10. a
  11. i
  12. 1
  13. i
  14. 2
  15. a
  16. i
  17. 2
  18. i
  19. 3
  20. a
  21. i
  22. T
  23. 1
  24. i
  25. T
  26. P(I|\lambda ) = {\pi _{{i_1}}}{a_{{i_1}{i_2}}}{a_{{i_2}{i_3}}} \cdots {a_{{i_{T - 1}}{i_T}}}
  27. P(I∣λ)=πi1​​ai1i2​​ai2i3​​⋯aiT1iT​​

(2) 已知隐藏序列,求观察序列的概率,表示为:

  1. P
  2. (
  3. O
  4. I
  5. ,
  6. λ
  7. )
  8. =
  9. b
  10. i
  11. 1
  12. (
  13. o
  14. 1
  15. )
  16. b
  17. i
  18. 2
  19. (
  20. o
  21. 2
  22. )
  23. b
  24. i
  25. T
  26. (
  27. o
  28. T
  29. )
  30. P(O|I,\lambda ) = {b_{{i_1}}}({o_1}){b_{{i_2}}}({o_2}) \cdots {b_{{i_T}}}({o_T})
  31. P(OI,λ)=bi1​​(o1​)bi2​​(o2​)⋯biT​​(oT​)

(3) 隐藏序列和观察序列的联合概率表示为:

  1. P
  2. (
  3. O
  4. ,
  5. I
  6. λ
  7. )
  8. =
  9. P
  10. (
  11. I
  12. λ
  13. )
  14. P
  15. (
  16. O
  17. I
  18. ,
  19. λ
  20. )
  21. =
  22. π
  23. i
  24. 1
  25. b
  26. i
  27. 1
  28. (
  29. o
  30. 1
  31. )
  32. a
  33. i
  34. 1
  35. i
  36. 2
  37. b
  38. i
  39. 2
  40. (
  41. o
  42. 2
  43. )
  44. a
  45. i
  46. T
  47. 1
  48. i
  49. T
  50. b
  51. i
  52. T
  53. (
  54. o
  55. T
  56. )
  57. P(O,I|\lambda ) = P(I|\lambda )P(O|I,\lambda ) = {\pi _{{i_1}}}{b_{{i_1}}}({o_1}){a_{{i_1}{i_2}}}{b_{{i_2}}}({o_2}) \cdots {a_{{i_{T - 1}}{i_T}}}{b_{{i_T}}}({o_T})
  58. P(O,I∣λ)=P(I∣λ)P(OI,λ)=πi1​​bi1​​(o1​)ai1i2​​bi2​​(o2​)⋯aiT1iT​​biT​​(oT​)

(4) 求边缘概率分布,即观测序列

  1. O
  2. O
  3. O在模型
  4. λ
  5. \lambda
  6. λ下的概率。
  7. P
  8. (
  9. O
  10. λ
  11. )
  12. =
  13. I
  14. P
  15. (
  16. O
  17. ,
  18. I
  19. λ
  20. )
  21. =
  22. i
  23. 1
  24. ,
  25. i
  26. 2
  27. ,
  28. ,
  29. i
  30. T
  31. π
  32. i
  33. 1
  34. b
  35. i
  36. 1
  37. (
  38. o
  39. 1
  40. )
  41. a
  42. i
  43. 1
  44. i
  45. 2
  46. b
  47. i
  48. 2
  49. (
  50. o
  51. 2
  52. )
  53. a
  54. i
  55. T
  56. 1
  57. i
  58. T
  59. b
  60. i
  61. T
  62. (
  63. o
  64. T
  65. )
  66. P(O|\lambda ) = \sum\limits_I {P(O,I|\lambda )} = \sum\limits_{{i_1},i{}_2, \cdots ,{i_T}} {{\pi _{{i_1}}}{b_{{i_1}}}({o_1}){a_{{i_1}{i_2}}}{b_{{i_2}}}({o_2}) \cdots {a_{{i_{T - 1}}{i_T}}}{b_{{i_T}}}({o_T})}
  67. P(O∣λ)=I∑​P(O,I∣λ)=i1​,i2​,⋯,iT​∑​πi1​​bi1​​(o1​)ai1i2​​bi2​​(o2​)⋯aiT1iT​​biT​​(oT​)

暴力求解的方法仅仅适用于隐藏状态极少的模型,如果隐藏状态过多,会导致计算量非常的庞大, 隐藏状态是未知的,需要考虑所有的隐藏状态。状态数为

  1. M
  2. M
  3. M,那么将会有
  4. M
  5. T
  6. {M^T}
  7. MT时间的复杂度,
  8. T
  9. T
  10. T表示隐藏序列的长度。总的时间复杂度为
  11. T
  12. M
  13. T
  14. T{M^T}
  15. TMT
前向算法求HMM观测序列概率

前向算法的本质是属于动态规划,通过子问题找到全局的最优解,子问题在这里被称为局部状态。对于前向算法,局部状态为前向概率,前向概率指给定时刻下从隐藏态到观察态的概率。 定义

  1. t
  2. t
  3. t时刻的隐藏状态的前向概率为:
  4. α
  5. 1
  6. (
  7. i
  8. )
  9. =
  10. π
  11. i
  12. b
  13. i
  14. (
  15. o
  16. 1
  17. )
  18. ,
  19. i
  20. =
  21. 1
  22. ,
  23. 2
  24. ,
  25. ,
  26. N
  27. {\alpha _1}(i) = {\pi _i}{b_i}({o_1}),{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} i = 1,2, \cdots ,N
  28. α1​(i)=πibi​(o1​),i=1,2,⋯,N

然后,递推

  1. t
  2. +
  3. 1
  4. ,
  5. t
  6. +
  7. 2
  8. ,
  9. ,
  10. T
  11. t + 1,t + 2, \cdots ,T
  12. t+1,t+2,⋯,T时刻的概率:
  13. α
  14. t
  15. +
  16. 1
  17. (
  18. i
  19. )
  20. =
  21. [
  22. j
  23. =
  24. 1
  25. N
  26. α
  27. t
  28. (
  29. j
  30. )
  31. a
  32. j
  33. i
  34. ]
  35. b
  36. i
  37. (
  38. o
  39. t
  40. +
  41. 1
  42. )
  43. ,
  44. i
  45. =
  46. 1
  47. ,
  48. 2
  49. ,
  50. ,
  51. N
  52. {\alpha _{t + 1}}(i) = \left[ {\sum\limits_{j = 1}^N {{\alpha _t}(j){a_{ji}}} } \right]{b_i}({o_{t + 1}}),{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} i = 1,2, \cdots ,N
  53. αt+1​(i)=[j=1N​αt​(j)aji​]bi​(ot+1​),i=1,2,⋯,N

最后,计算观测序列在给定模型下的概率:

  1. P
  2. (
  3. O
  4. λ
  5. )
  6. =
  7. i
  8. =
  9. 1
  10. N
  11. α
  12. T
  13. (
  14. i
  15. )
  16. P(O|\lambda ) = \sum\limits_{i = 1}^N {{\alpha _T}(i)}
  17. P(O∣λ)=i=1N​αT​(i)
前向算法求解实例

给定三个盒子,每个盒子里面都有两种颜色的球,分别为红色和白色。三个盒子中,球的数量分别是:
盒子名称1号盒子2号盒子3号盒子红色球数量547白色球数量563
从不同的盒子中取球,并且从1号盒子取球的概率为0.2,从2号盒子取球的概率是0.4,从3号盒子取球的概率是0.4, 总体概率为1。 即初始的状态分布:

  1. =
  2. (
  3. 0.2
  4. ,
  5. 0.4
  6. ,
  7. 0.4
  8. )
  9. T
  10. \prod = {(0.2,0.4,0.4)^T}
  11. ∏=(0.2,0.4,0.4)T

其次,状态转移概率矩阵为:

  1. A
  2. =
  3. (
  4. 0.5
  5. 0.2
  6. 0.3
  7. 0.3
  8. 0.5
  9. 0.2
  10. 0.2
  11. 0.3
  12. 0.5
  13. )
  14. {\bf{A}} = \left( {\begin{matrix} {0.5}&{0.2}&{0.3}\\ {0.3}&{0.5}&{0.2}\\ {0.2}&{0.3}&{0.5} \end{matrix}} \right)
  15. A=⎝⎛​0.50.30.20.20.50.30.30.20.5​⎠⎞​

观测状态概率矩阵为:

  1. B
  2. =
  3. (
  4. 0.5
  5. 0.5
  6. 0.4
  7. 0.6
  8. 0.7
  9. 0.3
  10. )
  11. {\bf{B}} = \left( {\begin{matrix} {0.5}&{0.5}\\ {0.4}&{0.6}\\ {0.7}&{0.3} \end{matrix}} \right)
  12. B=⎝⎛​0.50.40.70.50.60.3​⎠⎞​

求解问题,给定观测序列{红,白,红},求出这个观测序列的概率是多少?
具体求解过程如下所示:
(1) 在第1时刻观察到红色球,此时计算三个状态的前向概率:
盒子1的前向概率:

  1. α
  2. 1
  3. (
  4. 1
  5. )
  6. =
  7. π
  8. 1
  9. b
  10. 1
  11. (
  12. o
  13. 1
  14. )
  15. =
  16. 0.2
  17. ×
  18. 0.5
  19. =
  20. 0.1
  21. {\alpha _1}(1) = {\pi _1}{b_1}({o_1}) = 0.2 \times 0.5 = 0.1
  22. α1​(1)=π1b1​(o1​)=0.2×0.5=0.1

盒子2的前向概率:

  1. α
  2. 1
  3. (
  4. 2
  5. )
  6. =
  7. π
  8. 2
  9. b
  10. 2
  11. (
  12. o
  13. 1
  14. )
  15. =
  16. 0.4
  17. ×
  18. 0.4
  19. =
  20. 0.16
  21. {\alpha _1}(2) = {\pi _2}{b_2}({o_1}) = 0.4 \times 0.4 = 0.16
  22. α1​(2)=π2b2​(o1​)=0.4×0.4=0.16

盒子3的前向概率:

  1. α
  2. 1
  3. (
  4. 3
  5. )
  6. =
  7. π
  8. 3
  9. b
  10. 3
  11. (
  12. o
  13. 1
  14. )
  15. =
  16. 0.4
  17. ×
  18. 0.7
  19. =
  20. 0.28
  21. {\alpha _1}(3) = {\pi _3}{b_3}({o_1}) = 0.4 \times 0.7 = 0.28
  22. α1​(3)=π3b3​(o1​)=0.4×0.7=0.28

(2) 依据递推式,递推第2时刻三个状态的前向概率,观察为白色球,
盒子1的前向概率:

  1. α
  2. 2
  3. (
  4. 1
  5. )
  6. =
  7. [
  8. i
  9. =
  10. 1
  11. 3
  12. α
  13. 1
  14. (
  15. i
  16. )
  17. a
  18. i
  19. 1
  20. ]
  21. b
  22. 1
  23. (
  24. o
  25. 2
  26. )
  27. =
  28. [
  29. 0.1
  30. 0.5
  31. +
  32. 0.16
  33. 0.3
  34. +
  35. 0.28
  36. 0.2
  37. ]
  38. ×
  39. 0.5
  40. =
  41. 0.077
  42. {\alpha _2}(1) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _1}(i){a_{i1}}} } \right]{b_1}({o_2}) = [0.1*0.5 + 0.16*0.3 + 0.28*0.2] \times 0.5 = 0.077
  43. α2​(1)=[i=13​α1​(i)ai1​]b1​(o2​)=[0.10.5+0.160.3+0.280.20.5=0.077

盒子2的前向概率:

  1. α
  2. 2
  3. (
  4. 2
  5. )
  6. =
  7. [
  8. i
  9. =
  10. 1
  11. 3
  12. α
  13. 1
  14. (
  15. i
  16. )
  17. a
  18. i
  19. 2
  20. ]
  21. b
  22. 2
  23. (
  24. o
  25. 2
  26. )
  27. =
  28. [
  29. 0.1
  30. 0.2
  31. +
  32. 0.16
  33. 0.5
  34. +
  35. 0.28
  36. 0.3
  37. ]
  38. ×
  39. 0.6
  40. =
  41. 0.1104
  42. {\alpha _2}(2) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _1}(i){a_{i2}}} } \right]{b_2}({o_2}) = [0.1*0.{\rm{2}} + 0.16*0.{\rm{5}} + 0.28*0.{\rm{3}}] \times 0.{\rm{6}} = 0.{\rm{1104}}
  43. α2​(2)=[i=13​α1​(i)ai2​]b2​(o2​)=[0.10.2+0.160.5+0.280.30.6=0.1104

盒子3的前向概率:

  1. α
  2. 2
  3. (
  4. 3
  5. )
  6. =
  7. [
  8. i
  9. =
  10. 1
  11. 3
  12. α
  13. 1
  14. (
  15. i
  16. )
  17. a
  18. i
  19. 3
  20. ]
  21. b
  22. 3
  23. (
  24. o
  25. 2
  26. )
  27. =
  28. [
  29. 0.1
  30. 0.3
  31. +
  32. 0.16
  33. 0.2
  34. +
  35. 0.28
  36. 0.5
  37. ]
  38. ×
  39. 0.3
  40. =
  41. 0.0606
  42. {\alpha _2}({\rm{3}}) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _1}(i){a_{i{\rm{3}}}}} } \right]{b_{\rm{3}}}({o_2}) = [0.1*0.{\rm{3}} + 0.16*0.{\rm{2}} + 0.28*0.{\rm{5}}] \times 0.{\rm{3}} = 0.{\rm{0606}}
  43. α2​(3)=[i=13​α1​(i)ai3​]b3​(o2​)=[0.10.3+0.160.2+0.280.50.3=0.0606

(3) 依据递推式,递推第3时刻三个状态的前向概率, 观察为红色球,
盒子1的前向概率:

  1. α
  2. 3
  3. (
  4. 1
  5. )
  6. =
  7. [
  8. i
  9. =
  10. 1
  11. 3
  12. α
  13. 2
  14. (
  15. i
  16. )
  17. α
  18. i
  19. 1
  20. ]
  21. b
  22. 1
  23. (
  24. o
  25. 3
  26. )
  27. =
  28. [
  29. 0.077
  30. 0.5
  31. +
  32. 0.1104
  33. 0.3
  34. +
  35. 0.0606
  36. 0.2
  37. ]
  38. ×
  39. 0.5
  40. =
  41. 0.04187
  42. {\alpha _{\rm{3}}}(1) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _2}(i){\alpha _{i1}}} } \right]{b_1}({o_3}) = [0.077*0.5 + 0.1104*0.3 + 0.0606*0.2] \times 0.5 = 0.04187
  43. α3​(1)=[i=13​α2​(ii1​]b1​(o3​)=[0.0770.5+0.11040.3+0.06060.20.5=0.04187

盒子2的前向概率:

  1. α
  2. 3
  3. (
  4. 2
  5. )
  6. =
  7. [
  8. i
  9. =
  10. 1
  11. 3
  12. α
  13. 2
  14. (
  15. i
  16. )
  17. α
  18. i
  19. 2
  20. ]
  21. b
  22. 2
  23. (
  24. o
  25. 3
  26. )
  27. =
  28. [
  29. 0.077
  30. 0.2
  31. +
  32. 0.1104
  33. 0.5
  34. +
  35. 0.0606
  36. 0.3
  37. ]
  38. ×
  39. 0.4
  40. =
  41. 0.03551
  42. {\alpha _{\rm{3}}}(2) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _2}(i){\alpha _{i2}}} } \right]{b_2}({o_3}) = [0.077*0.2 + 0.1104*0.5 + 0.0606*0.3] \times 0.4 = 0.03551
  43. α3​(2)=[i=13​α2​(ii2​]b2​(o3​)=[0.0770.2+0.11040.5+0.06060.30.4=0.03551

盒子3的前向概率:

  1. α
  2. 3
  3. (
  4. 3
  5. )
  6. =
  7. [
  8. i
  9. =
  10. 1
  11. 3
  12. α
  13. 3
  14. (
  15. i
  16. )
  17. α
  18. i
  19. 3
  20. ]
  21. b
  22. 3
  23. (
  24. o
  25. 3
  26. )
  27. =
  28. [
  29. 0.077
  30. 0.3
  31. +
  32. 0.1104
  33. 0.2
  34. +
  35. 0.0606
  36. 0.5
  37. ]
  38. ×
  39. 0.7
  40. =
  41. 0.05284
  42. {\alpha _{\rm{3}}}(3) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _3}(i){\alpha _{i3}}} } \right]{b_3}({o_3}) = [0.077*0.3 + 0.1104*0.2 + 0.0606*0.5] \times 0.7 = 0.05284
  43. α3​(3)=[i=13​α3​(ii3​]b3​(o3​)=[0.0770.3+0.11040.2+0.06060.50.7=0.05284

最终,我们求出观测序列为{红,白,红}的概率为:

  1. P
  2. (
  3. O
  4. λ
  5. )
  6. =
  7. i
  8. =
  9. 1
  10. 3
  11. α
  12. 3
  13. (
  14. i
  15. )
  16. =
  17. 0.13022
  18. P(O|\lambda ) = \sum\limits_{i = 1}^3 {{\alpha _3}(i)} = 0.13022
  19. P(O∣λ)=i=13​α3​(i)=0.13022
后向算法求HMM观测序列概率

后向算法求HMM观测序列的概率和前向算法求HMM观测序列的概率是相似的。它们之间的区别主要在动态规划的递推式恰好是相反的。
定义

  1. t
  2. t
  3. t时刻的隐藏状态的前向概率为:
  4. β
  5. T
  6. (
  7. i
  8. )
  9. =
  10. 1
  11. ,
  12. i
  13. =
  14. 1
  15. ,
  16. 2
  17. ,
  18. ,
  19. N
  20. {\beta _T}(i) = 1,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} i = 1,2, \cdots ,N
  21. βT​(i)=1,i=1,2,⋯,N

然后,递推

  1. T
  2. 1
  3. ,
  4. T
  5. 2
  6. ,
  7. ,
  8. 1
  9. T - 1,T - 2, \cdots ,1
  10. T1,T2,⋯,1时刻各个隐藏状态的后向概率:
  11. β
  12. t
  13. (
  14. i
  15. )
  16. =
  17. j
  18. =
  19. 1
  20. N
  21. a
  22. i
  23. j
  24. b
  25. j
  26. (
  27. o
  28. t
  29. +
  30. 1
  31. )
  32. β
  33. t
  34. +
  35. 1
  36. (
  37. j
  38. )
  39. ,
  40. i
  41. =
  42. 1
  43. ,
  44. 2
  45. ,
  46. ,
  47. N
  48. {\beta _t}(i) = \sum\limits_{j = 1}^N {{a_{ij}}{b_j}({o_{t + 1}}){\beta _{t + 1}}(j)} ,{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} i = 1,2, \cdots ,N
  49. βt​(i)=j=1Naijbj​(ot+1​)βt+1​(j),i=1,2,⋯,N

最后,计算观测序列在给定模型下的概率:

  1. P
  2. (
  3. O
  4. λ
  5. )
  6. =
  7. i
  8. =
  9. 1
  10. N
  11. π
  12. i
  13. b
  14. i
  15. (
  16. o
  17. 1
  18. )
  19. β
  20. 1
  21. (
  22. i
  23. )
  24. P(O|\lambda ) = \sum\limits_{i = 1}^N {{\pi _i}{b_i}({o_1}){\beta _1}(i)}
  25. P(O∣λ)=i=1N​πibi​(o1​)β1​(i)
标签: 算法

本文转载自: https://blog.csdn.net/doswynkfsw/article/details/123612369
版权归原作者 Starry memory 所有, 如有侵权,请联系我们删除。

“隐马尔可夫模型问题一:求模型观测序列的概率”的评论:

还没有评论