一文带你了解隐马尔科夫模型
算法原理
??????隱形馬爾可夫模型,英文是 Hidden Markov Models,所以以下就簡稱 HMM。既是馬爾可夫模型,就一定存在馬爾可夫鏈,該馬爾可夫鏈服從馬爾可夫性質:即無記憶性。也就是說,這一時刻的狀態,受且只受前一時刻的影響,而不受更往前時刻的狀態的影響。
????使用非常簡單的天氣模型來做說明
??????在這個馬爾可夫模型中,存在三個狀態,Sunny, Rainy, Cloudy,同時圖片上標的是各個狀態間的轉移概率(如果不明白什么是轉移概率,那建議先去學習什么是馬爾可夫再來看HMM)。現在我們要說明什么是 HMM。既是隱形,說明這些狀態是觀測不到的,相應的,我們可以通過其他方式來『猜測』或是『推斷』這些狀態,這也是 HMM 需要解決的問題之一。
??????舉個例子,我女朋友現在在北京工作,而我還在法國讀書。每天下班之后,她會根據天氣情況有相應的活動:或是去商場購物,或是去公園散步,或是回家收拾房間。我們有時候會通電話,她會告訴我她這幾天做了什么,而閑著沒事的我呢,則要通過她的行為猜測這幾天對應的天氣最有可能是什么樣子的。
??????以上就是一個簡單的 HMM,天氣狀況屬于狀態序列,而她的行為則屬于觀測序列。天氣狀況的轉換是一個馬爾可夫序列。而根據天氣的不同,有相對應的概率產生不同的行為。在這里,為了簡化,把天氣情況簡單歸結為晴天和雨天兩種情況。雨天,她選擇去散步,購物,收拾的概率分別是0.1,0.4,0.5, 而如果是晴天,她選擇去散步,購物,收拾的概率分別是0.6,0.3,0.1。而天氣的轉換情況如下:這一天下雨,則下一天依然下雨的概率是0.7,而轉換成晴天的概率是0.3;這一天是晴天,則下一天依然是晴天的概率是0.6,而轉換成雨天的概率是0.4. 同時還存在一個初始概率,也就是第一天下雨的概率是0.6, 晴天的概率是0.4.
??????根據以上的信息,我們得到了 HMM的一些基本要素:初始概率分布 π,狀態轉移矩陣 A,觀測量的概率分布 B,同時有兩個狀態,三種可能的觀測值?,F在,重點是要了解并解決HMM 的三個問題。
??????問題1,已知整個模型,我女朋友告訴我,連續三天,她下班后做的事情分別是:散步,購物,收拾。那么,根據模型,計算產生這些行為的概率是多少。
??????問題2,同樣知曉這個模型,同樣是這三件事,我女朋友要我猜,這三天她下班后北京的天氣是怎么樣的。這三天怎么樣的天氣才最有可能讓她做這樣的事情。
??????問題3,最復雜的,我女朋友只告訴我這三天她分別做了這三件事,而其他什么信息我都沒有。她要我建立一個模型,晴雨轉換概率,第一天天氣情況的概率分布,根據天氣情況她選擇做某事的概率分布。
??????而要解決這些問題,偉大的大師們分別找出了對應的算法。問題一,Forward Algorithm,向前算法,或者Backward Algo,向后算法。 問題二,Viterbi Algo,維特比算法。問題三,Baum-Welch Algo,鮑姆-韋爾奇算法。
問題1的解決1:遍歷算法
??????要計算產生這一系列行為的概率,那我們把每一種天氣情況下產生這些行為都羅列出來,那每種情況的和就是這個概率。有三天,每天有兩種可能的天氣情況,則總共有 2的三次=8種 情況.舉例其中一種情況 : P(下雨,下雨,下雨,散步,購物,收拾)=P(第一天下雨)P(第一天下雨去散步)P(第二天接著下雨)P(下雨去購物)P(第三天還下雨)P(下雨回家收拾)=0.6X0.1X0.7X0.4X0.7X0.5=0.00588當然,這里面的 P(第二天接著下雨)當然是已知第一天下雨的情況下,第二天下雨的概率,為0.7.將八種情況相加可得,三天的行為為{散步,購物,收拾}的可能性為0.033612. 看似簡單易計算,但是一旦觀察序列變長,計算量就會非常龐大(的復雜度,T 為觀測序列的長度)
問題1 的解決2:向前算法
??????先計算 t=1時刻,發生『散步』一行為的概率,如果下雨,則為 P(散步,下雨)=P(第一天下雨)X P(散步 | 下雨)=0.6X0.1=0.06;晴天,P(散步,晴天)=0.4X0.6=0.24t=2 時刻,發生『購物』的概率,當然,這個概率可以從 t=1 時刻計算而來。如果t=2下雨,則 P(第一天散步,第二天購物, 第二天下雨)= 【P(第一天散步,第一天下雨)X P(第二天下雨 | 第一天下雨)+P(第一天散步,第一天晴天)X P(第二天下雨 | 第一天晴天)】X P(第二天購物 | 第二天下雨)=【0.06X0.7+0.24X0.3】X0.4=0.0552如果 t=2晴天,則 P(第一天散步,第二天購物,第二天晴天)=0.0486 (同理可得,請自行推理)如果 t=3,下雨,則 P(第一天散步,第二天購物,第三天收拾,第三天下雨)=【P(第一天散步,第二天購物,第二天下雨)X P(第三天下雨 | 第二天下雨)+ P(第一天散步,第二天購物,第二天天晴)X P(第三天下雨 | 第二天天晴)】X P(第三天收拾 | 第三天下雨)=【0.0552X0.7+0.0486X0.4】X0.5= 0.02904如果t=3,晴天,則 P(第一天散步,第二天購物,第三天收拾,第三天晴天)= 0.004572那么 P(第一天散步,第二天購物,第三天收拾),這一概率則是第三天,下雨和晴天兩種情況的概率和。0.02904+0.004572=0.033612.以上例子可以看出,向前算法計算了每個時間點時,每個狀態的發生觀測序列的概率,看似繁雜,但在 T 變大時,復雜度會大大降低。
問題1的解決3:向后算法
??????顧名思義,向前算法是在時間 t=1的時候,一步一步往前計算。而相反的,向后算法則是倒退著,從最后一個狀態開始,慢慢往后推。
??????初始化:Β3(Raniny)=1,Β3(sunny)=1
問題2的解決:維特比算法
??????用維特比算法針對HMM三大問題中的解碼問題(給定模型和觀測序列,如何找到與此觀測序列最匹配的狀態序列的問題)進行求解。問題描述如下:
??????首先,我們已經知道狀態序列X會產生觀測序列O:
??????但是觀測序列O對應的狀態序列X有很多種可能,每種都有概率,如下所示,比如wo可能有三種可能:喔、我、沃
??????那么其實問題就變成了最大概率問題,把概率最大的理解為路徑最短,轉換為了求解最短路徑問題:(為了方便標記,標記為了下圖中的字母)
??????算法解決:
??????接下來就用到了維特比算法求解最短路徑,實質上是一種動態規劃,把大問題化解為小問題:步驟1、A->B:
??????步驟2、A->B->C:
??????步驟3、A->B->C->D:
??????步驟4、A->B->C->D->E:
??????最終就得到了A->E的最短路徑A->B1->C2->D2->E1,至此,找到了wo ai zhong guo對應的概率最大的中文漢字組合為:我愛中國。
問題3的解決:Baum-Welch 算法。
??????此問題的復雜度要遠遠高于前兩種算法,不是簡單解釋就能說的清楚的了。
python 工具包
見鏈接
HMM算例 python 有代碼
參考文獻:
https://www.zhihu.com/question/20962240/answer/64187492
總結
以上是生活随笔為你收集整理的一文带你了解隐马尔科夫模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LGK割枪和CUT割枪有什么区别?
- 下一篇: 部队直招军官入伍后军训期间有工资吗