隐马尔可夫模型:HMM
隱馬爾可夫模型求解三大問題實例剖析
HMM 模型如圖所示:
?
一、隱馬爾可夫模型定義
隱馬爾可夫模型由初始概率分布、狀態轉移概率分布以及觀測概率分布確定。
設?Q(圖中的q)是所有可能的狀態的集合,V(圖中的O) 是所有可能的觀測的集合。
?
其中,N為可能狀態數,M為可能的觀測數。
I是長度為T的隱藏狀態序列,O是對應的觀測序列。
?
以下三個參數(A、B、π):
A是狀態轉移概率矩陣:
?
其中,
?
表示在時刻t處于狀態qi的條件下在時刻t+1轉移到狀態qj的概率。
B是觀測概率矩陣:
?
其中,
?
表示在時刻t處于狀態qj 的條件下生成觀測vk的概率。
π是初始狀態概率向量:就是由空狀態轉換為有狀態的一個概率
?
其中,
?
表示時刻t=1處于狀態qi的概率。
隱馬爾可夫模型由π、A、B決定。π和A決定狀態序列,B決定觀測序列。
隱馬爾可夫模型?λ=( A, B,π),A、B、π稱為隱馬爾科夫模型的三要素。
隱馬爾可夫模型的兩個基本假設:
(1)齊次馬爾可夫性假設
?
(2)觀測獨立性假設
?
?
二、隱馬爾可夫模型的三個基本問題
問題一:概率計算問題:觀察序列的概率
給定模型λ=( A, B,π)和觀測序列
?
?。計算在模型λ下觀測序列O出現的概率P(O|λ)。
解決此問題的方法為前向、后向算法。
?
問題二:預測問題:由觀察序列求隱藏序列
比如:HMM 寫的拼音輸入法
也稱為解碼問題。已知模型λ=( A, B,π)和觀測序列
?
,求對給定觀測序列條件概率P(I|O)最大的狀態序列?。即給定觀測序列、
?
,求最有可能的對應隱藏狀態序列
?
解決此問題的方法為維特比算法。
?
問題三:學習問題:HMM參數估計
已知觀測序列
?
?,估計模型λ=( A, B,π)參數,使得在該模型下觀測序列概率P(O|λ)最大。
當同時給定觀測序列和對應狀態序列時,使用極大似然估計方法估計參數。
當只給定觀測序列,沒有對應狀態序列時,基于EM算法進行參數估計。(Baum-Welch算法)
?
三、隱馬爾可夫模型的實例
模型實例
假設 S 是天氣狀況的集合,分別是“晴天”、"多云"、“下雨”,?
其初始概率分布為,
| 晴天 | 多云 | 下雨 |
| 0.63 | 0.17 | 0.20 |
其狀態轉移概率矩陣為:
| - | 晴 | 陰 | 雨 |
| 晴 | 0.500 | 0.375 | 0.125 |
| 陰 | 0.250 | 0.125 | 0.625 |
| 雨 | 0.250 | 0.375 | 0.325 |
假設有一位盲人住在海邊,他不能通過直接觀察天氣的狀態來預報天氣。但他有一些水藻,因此可以利用水藻的干濕來預報天氣。水藻的干濕與天氣狀況之間的關系如下表:
| - | 干燥 | 稍干 | 潮濕 | 濕透 |
| 晴 | 0.60 | 0.20 | 0.15 | 0.05 |
| 陰 | 0.25 | 0.25 | 0.25 | 0.25 |
| 雨 | 0.05 | 0.10 | 0.35 | 0.50 |
問題1:求解觀察序列的概率
針對上述模型,我們求p(干燥,潮濕,濕透)。思路很簡單:
?
?
這個時候再往下計算,方法就和第一步一樣了,不再羅嗦了。
?
問題2:由觀察序列確定隱狀態序列
例如用HMM 算法來寫中文輸入法
我們觀察到了“干燥、潮濕、濕透”,那么實際天氣變化的序列應該是什么呢?會是憑直覺猜測的“晴、陰、雨”這個序列嗎??
解決這個問題的關鍵是,如何計算p(晴陰雨|干燥 潮濕 濕透)?我畫了一張圖,只要把黑色路徑上標注的初始概率、轉移概率、發射概率連乘起來,就得到這條路經的概率。?
?
ok,現在問題變成了如何從開始到結束找到一條概率最大的路徑。問題轉化成了路徑最優化問題,可以用動態規劃方法解決,我不想再啰嗦了,剩下的任務大家自行解決吧。
?
問題3:HMM參數估計
假設隱馬爾可夫模型的觀測序列是“干燥,潮濕,濕透,…”,那么,隱馬爾可夫模型的參數A,B,π 如何設置,才能使這個觀測序列出現的概率最大?這就是所謂的隱馬爾可夫模型參數估計問題。?
參照上圖,從起點到終點共計27條路徑,把這些路徑的概率全部加起來,就是“干燥,潮濕,濕透”發生的概率。如果圖中箭頭隨對應的概率全部為未知,可以想想,最終的結果就可以用這些參數表示。因此問題可描述為,這些參數取何值時,所求概率最大。?
上圖中的實例, 計算觀察序列的概率應該不需要遍歷27條路徑,這樣復雜度太高了。這個問題大家自行考慮吧。
轉移概率矩陣和發射概率矩陣在多個環節重復出現,讓我聯想起卷積神經網絡的卷積層設計,扯得有點遠。但是,這個概率網絡求解整體過程的確與神經網絡類似。?
一個不好的消息是,沒辦法用公式求解此最優化問題。一個稍好一點的消息是,可以用梯度下降法,求局部極小解,這簡直是廢話。還有一個稍好點的消息,Baum-Welch算法可以解決此問題,思路類似EM算法,思路也很簡單,
Baum-Welch算法
比如,先假設狀態序列為已知,參見下表。和EM算法套路一樣,可以看看《簡析EM算法(最大期望算法)》。
| t | 觀察值 | 晴朗 | 多云 | 下雨 |
| 1 | 干燥 | 1 | 0 | 0 |
| 2 | 潮濕 | 0 | 1 | 0 |
| 3 | 濕透 | 1 | 0 | 0 |
| 4 | 潮濕 | 0 | 0 | 1 |
| 5 | 干燥 | 0 | 1 | 0 |
| 6 | 潮濕 | 1 | 0 | 0 |
| 7 | 濕透 | 0 | 0 | 1 |
| … | … | … | … | … |
?
狀態的出現次數為0或1,和EM算法是完全一樣的套路。如果出現100次"晴朗"?
,其中對應70次“干燥”,則可以估計“晴朗”向“干燥”發射概率為70/100=0.7,如此類推,可以求出模型中的所有概率值。?
現在的問題是,狀態出現的次數是不知道的。依據EM算法思路,可以隨機給模型參數賦值(當然要保證數據的合理性)。比如,根據“晴朗”、“陰天”、“下雨”向“干燥”的發射概率,把狀態出現次數1按比例分配給三個狀態。這樣就可以按照上面的方法重新計算模型的參數了。如此類推,直到模型參數收斂為止。?
狀態轉移概率,也可以統計出來。比如從上表1、2兩行可以得到“晴天”到“多云”轉移累計計數1次。在EM算法中,這個計數可能變成了用小數表示的模糊計數,不過沒關系,一樣可以得到這個累計計數。?
初始概率計算也是同樣道理,用模糊計數方法可以幫助估計概率分布。
?
?參考博客和書籍:
https://blog.csdn.net/quicmous/article/details/52208302
https://blog.csdn.net/lrs1353281004/article/details/79417225
《統計學習方法》李航
?
轉載于:https://www.cnblogs.com/lovychen/p/9760137.html
總結
以上是生活随笔為你收集整理的隐马尔可夫模型:HMM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [LeetCode]k个一组翻转链表(R
- 下一篇: px、em、rem、fr等前端单位介绍