隱馬爾可夫模型(HMM)是一種統計模型算法
先來看一個維基百科提供的例子:atom
https://en.wikipedia.org/wiki/Hidden_Markov_modelspa
假設你有一個住得很遠的朋友,他天天跟你打電話告訴你他那天作了什麼。你的朋友僅僅對三種活動感興趣:公園散步,購物以及清理房間。他選擇作什麼事情只憑天氣。你對於他所住的地方的天氣狀況並不瞭解,可是你知道總的趨勢。在他告訴你天天所作的事情基礎上,你想要猜想他所在地的天氣狀況。orm
你知道這個地區的總的天氣趨勢,而且平時知道你朋友會作的事情.也就是說這個隱馬爾可夫模型的參數是已知的xml
咱們的觀察集合是: blog
V={散步,購物,收拾};
遞歸
全部的可能的觀察數:ip
M=3;
get
觀察者只能看到朋友的行爲序列,卻不能看到朋友所在地區的天氣。數學
咱們的狀態集合是:
Q={雨天,晴天};
全部的可能的狀態數:
N=2
初始狀態分佈爲:
狀態轉移機率分佈矩陣A:
觀測狀態機率矩陣B:
如今,重點是要了解並解決HMM 的三個問題:
問題1,已知整個模型, 朋友告訴我,連續三天,他下班後作的事情分別是:散步,購物,收拾。那麼,根據模型,計算產生這些行爲的機率是多少。
問題2,一樣知曉這個模型,一樣是這三件事, 朋友要我猜,這三天他下班後北京的天氣是怎麼樣的。這三天怎麼樣的天氣才最有可能讓他作這樣的事情。
問題3,最複雜的, 朋友只告訴我這三天他分別作了這三件事,而其餘什麼信息我都沒有。他要我創建一個模型,晴雨轉換機率,第一每天氣狀況的機率分佈,根據天氣狀況他選擇作某事的機率分佈。
具體如何解決這三大問題。須要數學基礎,機率基礎。
問題1的解決1:遍歷算法。
要計算產生這一系列行爲的機率,那咱們把每一種天氣狀況下產生這些行爲都羅列出來,那每種狀況的和就是這個機率。
有3天,天天有2種可能的天氣狀況,則總共有
種狀況
舉例其中一種狀況 :
P(下雨,下雨,下雨,散步,購物,收拾)= P(第一天下雨)P(第一天下雨去散步)P(次日接着下雨)P(下雨去購物)P(第三天還下雨)P(下雨回家收拾)=0.6X0.1X0.7X0.4X0.7X0.5=0.00588
固然,這裏面的 P(次日接着下雨)固然是已知第一天下雨的狀況下,次日下雨的機率,爲0.7.
將八種狀況相加可得,三天的行爲爲{散步,購物,收拾}的可能性爲0.033612. 看似簡單易計算,可是一旦觀察序列變長,計算量就會很是龐大
1)先計算 t=1時刻,發生‘’散步‘’一行爲的機率:
1.1)若是下雨,則爲
1.2)若是晴天:
2)t=2 時刻,發生「購物」的機率,固然,這個機率能夠從 t=1 時刻計算而來:
2.1)若是t=2下雨,則
2.2)若是 t=2晴天,則
P(第一天散步,次日購物,次日晴天)=0.0486 (同理可得)
3)t=2 時刻:
3.1)若是 t=3,下雨,則
3.2)若是t=3,晴天,則
P(第一天散步,次日購物,第三天收拾,第三天晴天)= 0.004572
那麼 P(第一天散步,次日購物,第三天收拾),這一律率則是第三天,下雨和晴天兩種狀況的機率和:
0.02904+0.004572=0.033612
以上例子能夠看出,向前算法計算了每一個時間點時,每一個狀態的發生觀測序列的機率,看似繁雜,但在 T 變大時,複雜度會大大下降。
問題1的解決3:向後算法
能夠用遞歸的方式求得後向機率
及觀測機率
(1)初始化後向機率:
(2)遞推:
其中第一項則是轉移機率,次日下雨轉到第三天下雨的機率爲0.7;第二項則是觀測機率,第三天下雨的情況下,在家收拾的機率爲0.5;第三項就是咱們定義的向後變量
同理,可得
(3)終止:
三種算法的答案是一致的