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