给定盒子和球组成的隐马尔可夫模型习题10.2 - 图1,其中,习题10.2 - 图2
    设T=8,O=(红,白,红,红,白,红,白,白),试用前向后向概率计算习题10.2 - 图3


    解答:

    1. Q = [1, 2, 3]
    2. V = ['红', '白']
    3. A = [[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], [0.2, 0.3, 0.5]]
    4. B = [[0.5, 0.5], [0.4, 0.6], [0.7, 0.3]]
    5. O = ['红', '白', '红', '红', '白', '红', '白', '白']
    6. PI = [[0.2, 0.3, 0.5]]
    7. HMM.forward(Q, V, A, B, O, PI)
    8. HMM.backward(Q, V, A, B, O, PI)

    alpha1(1) = p0b0b(o1) = 0.100000
    alpha1(2) = p1b1b(o1) = 0.120000
    alpha1(3) = p2b2b(o1) = 0.350000
    alpha2(1) = [sigma alpha0(i)ai0]b0(o1) = 0.078000
    alpha2(2) = [sigma alpha0(i)ai1]b1(o1) = 0.111000
    alpha2(3) = [sigma alpha0(i)ai2]b2(o1) = 0.068700
    alpha3(1) = [sigma alpha1(i)ai0]b0(o2) = 0.043020
    alpha3(2) = [sigma alpha1(i)ai1]b1(o2) = 0.036684
    alpha3(3) = [sigma alpha1(i)ai2]b2(o2) = 0.055965
    alpha4(1) = [sigma alpha2(i)ai0]b0(o3) = 0.021854
    alpha4(2) = [sigma alpha2(i)ai1]b1(o3) = 0.017494
    alpha4(3) = [sigma alpha2(i)ai2]b2(o3) = 0.033758
    alpha5(1) = [sigma alpha3(i)ai0]b0(o4) = 0.011463
    alpha5(2) = [sigma alpha3(i)ai1]b1(o4) = 0.013947
    alpha5(3) = [sigma alpha3(i)ai2]b2(o4) = 0.008080
    alpha6(1) = [sigma alpha4(i)ai0]b0(o5) = 0.005766
    alpha6(2) = [sigma alpha4(i)ai1]b1(o5) = 0.004676
    alpha6(3) = [sigma alpha4(i)ai2]b2(o5) = 0.007188
    alpha7(1) = [sigma alpha5(i)ai0]b0(o6) = 0.002862
    alpha7(2) = [sigma alpha5(i)ai1]b1(o6) = 0.003389
    alpha7(3) = [sigma alpha5(i)ai2]b2(o6) = 0.001878
    alpha8(1) = [sigma alpha6(i)ai0]b0(o7) = 0.001411
    alpha8(2) = [sigma alpha6(i)ai1]b1(o7) = 0.001698
    alpha8(3) = [sigma alpha6(i)ai2]b2(o7) = 0.000743
    beta8(1) = 1
    beta8(2) = 1
    beta8(3) = 1
    beta7(1) = sigma[a1jbj(o8)beta8(j)] = (0.50 0.50 1.00 + 0.20 0.60 1.00 + 0.30 0.30 1.00 + 0) = 0.460
    beta7(2) = sigma[a2jbj(o8)beta8(j)] = (0.30 0.50 1.00 + 0.50 0.60 1.00 + 0.20 0.30 1.00 + 0) = 0.510
    beta7(3) = sigma[a3jbj(o8)beta8(j)] = (0.20 0.50 1.00 + 0.30 0.60 1.00 + 0.50 0.30 1.00 + 0) = 0.430
    beta6(1) = sigma[a1jbj(o7)beta7(j)] = (0.50 0.50 0.46 + 0.20 0.60 0.51 + 0.30 0.30 0.43 + 0) = 0.215
    beta6(2) = sigma[a2jbj(o7)beta7(j)] = (0.30 0.50 0.46 + 0.50 0.60 0.51 + 0.20 0.30 0.43 + 0) = 0.248
    beta6(3) = sigma[a3jbj(o7)beta7(j)] = (0.20 0.50 0.46 + 0.30 0.60 0.51 + 0.50 0.30 0.43 + 0) = 0.202
    beta5(1) = sigma[a1jbj(o6)beta6(j)] = (0.50 0.50 0.21 + 0.20 0.40 0.25 + 0.30 0.70 0.20 + 0) = 0.116
    beta5(2) = sigma[a2jbj(o6)beta6(j)] = (0.30 0.50 0.21 + 0.50 0.40 0.25 + 0.20 0.70 0.20 + 0) = 0.110
    beta5(3) = sigma[a3jbj(o6)beta6(j)] = (0.20 0.50 0.21 + 0.30 0.40 0.25 + 0.50 0.70 0.20 + 0) = 0.122
    beta4(1) = sigma[a1jbj(o5)beta5(j)] = (0.50 0.50 0.12 + 0.20 0.60 0.11 + 0.30 0.30 0.12 + 0) = 0.053
    beta4(2) = sigma[a2jbj(o5)beta5(j)] = (0.30 0.50 0.12 + 0.50 0.60 0.11 + 0.20 0.30 0.12 + 0) = 0.058
    beta4(3) = sigma[a3jbj(o5)beta5(j)] = (0.20 0.50 0.12 + 0.30 0.60 0.11 + 0.50 0.30 0.12 + 0) = 0.050
    beta3(1) = sigma[a1jbj(o4)beta4(j)] = (0.50 0.50 0.05 + 0.20 0.40 0.06 + 0.30 0.70 0.05 + 0) = 0.028
    beta3(2) = sigma[a2jbj(o4)beta4(j)] = (0.30 0.50 0.05 + 0.50 0.40 0.06 + 0.20 0.70 0.05 + 0) = 0.026
    beta3(3) = sigma[a3jbj(o4)beta4(j)] = (0.20 0.50 0.05 + 0.30 0.40 0.06 + 0.50 0.70 0.05 + 0) = 0.030
    beta2(1) = sigma[a1jbj(o3)beta3(j)] = (0.50 0.50 0.03 + 0.20 0.40 0.03 + 0.30 0.70 0.03 + 0) = 0.015
    beta2(2) = sigma[a2jbj(o3)beta3(j)] = (0.30 0.50 0.03 + 0.50 0.40 0.03 + 0.20 0.70 0.03 + 0) = 0.014
    beta2(3) = sigma[a3jbj(o3)beta3(j)] = (0.20 0.50 0.03 + 0.30 0.40 0.03 + 0.50 0.70 0.03 + 0) = 0.016
    beta1(1) = sigma[a1jbj(o2)beta2(j)] = (0.50 0.50 0.02 + 0.20 0.60 0.01 + 0.30 0.30 0.02 + 0) = 0.007
    beta1(2) = sigma[a2jbj(o2)beta2(j)] = (0.30 0.50 0.02 + 0.50 0.60 0.01 + 0.20 0.30 0.02 + 0) = 0.007
    beta1(3) = sigma[a3jbj(o2)beta2(j)] = (0.20 0.50 0.02 + 0.30 0.60 0.01 + 0.50 0.30 0.02 + 0) = 0.006
    P(O|lambda) = 0.2 0.5 0.00698 + 0.3 0.4 0.00741 + 0.5 0.7 0.00647 + 0 = 0.003852

    可知,习题10.2 - 图4

    1. print("alpha4(3)=", HMM.alphas[3 - 1][4 - 1])
    2. print("beta4(3)=", HMM.betas[3 - 1][4 - 1])
    3. print("P(O|lambda)=", HMM.backward_P[0])
    4. result = (HMM.alphas[3 - 1][4 - 1] *
    5. HMM.betas[3 - 1][4 - 1]) / HMM.backward_P[0]
    6. print("P(i4=q3|O,lambda) =", result)

    alpha4(3)= 0.033757709999999996
    beta4(3)= 0.049728909999999994
    P(O|lambda)= 0.0038519735794910986
    P(i4=q3|O,lambda) = 0.4358114321796269