李航-HMM-直接计算法
第10章,隱馬爾可夫模型(相關的python開源包是hmmlearn)
本章結構:
隱馬爾可夫模型相關內容={概率計算方法={直接計算法(計算量過大)前向算法后向算法學習算法={監督學習方法Bsum?Welch算法預測算法={近似算法維特比算法隱馬爾可夫模型相關內容=\left\{ \begin{aligned} {概率計算方法=\left\{ \begin{aligned} 直接計算法(計算量過大) \\ 前向算法 \\ 后向算法 \end{aligned} \right.} \\ {學習算法=\left\{ \begin{aligned} 監督學習方法 \\ Bsum-Welch算法\\ \end{aligned} \right.} \\ {預測算法=\left\{ \begin{aligned} 近似算法 \\ 維特比算法 \\ \end{aligned} \right.} \end{aligned} \right.隱馬爾可夫模型相關內容=??????????????????????????????概率計算方法=??????直接計算法(計算量過大)前向算法后向算法?學習算法={監督學習方法Bsum?Welch算法?預測算法={近似算法維特比算法??
上述的三個小括號分別用來解決隱馬爾科夫模型的三個問題:
(1)概率計算問題
(2)學習問題
(3)預測問題
書上的例子為:
|盒子|1 | 2 |3|4|
|–|--|–|--|
|紅球數| 5 | 3 | 6 |8|
|白球數| 5 | 7 | 4 |2|
狀態集合:
Q={盒子1,盒子2,盒子3,盒子4}
觀測集合:
V={紅,白}
初始概率分布π\piπ=(0.25,0.25,0.25,0.25)T(0.25,0.25,0.25,0.25)^T(0.25,0.25,0.25,0.25)T
狀態轉移概率分布:
A=[01000.400.6000.400.6000.50.5]A= \begin{bmatrix} 0 & 1 & 0&0 \\ 0.4 & 0 & 0.6&0 \\ 0&0.4&0&0.6\\ 0&0&0.5&0.5 \end{bmatrix} A=?????00.400?100.40?00.600.5?000.60.5??????
觀測概率:
B=[0.50.50.30.70.60.40.80.2]B= \begin{bmatrix} 0.5 & 0.5\\ 0.3 & 0.7 \\ 0.6&0.4\\ 0.8&0.2 \end{bmatrix} B=?????0.50.30.60.8?0.50.70.40.2??????
觀測概率矩陣第一列的意思就是每個盒子能觀察到多少紅色球.
#概率計算問題
10.2.1直接計算法
模型λ=(A,B,π)\lambda=(A,B,\pi)λ=(A,B,π)
"想要的"的觀測序列:O=(o1,o2,???,oT)O=(o_1,o_2,···,o_T)O=(o1?,o2?,???,oT?)
根據模型判斷上述觀測序列出現的概率P(O∣λ)P(O|\lambda)P(O∣λ)
P(I∣λ)=πi1?αi1i2?αi2i3???αiT?1iTP(I|\lambda)=\pi_{i_1}·\alpha_{i_1i_2}·\alpha_{i_2i_3}···\alpha_{i_{T-1}i_T}P(I∣λ)=πi1???αi1?i2???αi2?i3?????αiT?1?iT??
這里的πi1\pi_{i_1}πi1??指的是你在"初始概率分布π\piπ"序列中的第i1i_1i1?個狀態.
####然后是書上原話(start)#####################
對于固定的狀態序列I=(i1,i2,???,iT)I=(i_1,i_2,···,i_T)I=(i1?,i2?,???,iT?),觀測序列O=(o1,o2,???,oT)O=(o_1,o_2,···,o_T)O=(o1?,o2?,???,oT?)的概率是
P(O∣I,λ)=bi1(o1)bi2(o2)???biT(oT)P(O|I,\lambda)=b_{i_1}(o_1)b_{i_2}(o_2)···b_{i_T}(o_T)P(O∣I,λ)=bi1??(o1?)bi2??(o2?)???biT??(oT?)
這個說法很拗口,這個"固定的狀態序列"是啥意思?
也就是說整個隱馬爾科夫轉移過程還沒發生,自己YY了一個狀態轉移序列,想知道這種序列發生的可能性.
上面提到的"觀測序列"的意思是:我想要的"這個盒子之間跳轉來、跳轉去的序列I"輸入這個模型λ\lambdaλ以后,出來我想要的"球顏色序列O"的概率多大
這里的I:input
這里的O:output
#######然后是書上原話(end)###################
O和I同時出現的聯合概率是:
P(O,I∣λ)P(O,I|\lambda)P(O,I∣λ)
=P(O∣I,λ)?P(I∣λ)=P(O|I,\lambda)·P(I|\lambda)=P(O∣I,λ)?P(I∣λ)
=πi1bi1(o1)ai1i2?bi2(o2)???aiT?1iTbiT(oT)=\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}·b_{i_2}(o_2)···a_{i_{T-1}i_T} b_{i_T}(o_T)=πi1??bi1??(o1?)ai1?i2???bi2??(o2?)???aiT?1?iT??biT??(oT?)
因為目標是P(O∣λ)P(O|\lambda)P(O∣λ)
P(O∣λ)=∑IP(O∣I,λ)P(I∣λ)P(O|\lambda)=\sum_{I}P(O|I,\lambda)P(I|\lambda)P(O∣λ)=I∑?P(O∣I,λ)P(I∣λ)
=∑i1,i2,???,iTπi1bi1(o1)ai1i2?bi2(o2)???aiT?1iTbiT(oT)=\sum_{i_1,i_2,···,i_T}\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}·b_{i_2}(o_2)···a_{i_{T-1}i_T} b_{i_T}(o_T)=i1?,i2?,???,iT?∑?πi1??bi1??(o1?)ai1?i2???bi2??(o2?)???aiT?1?iT??biT??(oT?)
上面的東西呢,沒啥用(因為計算復雜度太高),但是呢,還是要縷清楚,因為這樣就知道這個"概率計算算法"是干嘛的了,也就是說:
給個模型,輸入個序列(盒子狀態序列),出來想要的序列(球顏色序列)概率是多少.
為了收拾這個爛攤子呢,出來了"前向算法"和"后向算法",注意,這兩個算法和神經網絡中的前向傳輸、后向傳輸沒有任何關系.
#概率計算問題(完)
總結
以上是生活随笔為你收集整理的李航-HMM-直接计算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: neo4j安装和启动
- 下一篇: 图解比较李航书上的viterbi算法和d