維特比演算法通俗案例

2022-02-24 03:37:24 字數 2301 閱讀 4185

月兒通過詢問村民的感覺,判斷她的病情,再假設村民只會回答正常、頭暈或冷。村民三天的感覺分別為:【正常,冷,頭暈】。 那麼問題來了,月兒如何根據阿驢的描述的情況,【推斷出這三天】中阿驢的乙個【身體狀態】呢?

因此,從hmm隱馬爾科夫模型的角度來說,【健康或者發燒 是身體隱含的狀態state】, 而【正常,頭暈或者冷是觀察序列】,

因此這三天的觀察序列為: 正常, 冷, 頭暈, 而每天的身體隱含狀況則未知, 這在hmm問題中屬於解碼問題,可以通過維特比演算法,利用【動態規劃】演算法,來求解出整個hmm鏈中【每天的隱含狀態】。【隱含的身體狀態】 = ; 【可觀察的感覺狀態】 =

假定阿驢身體狀態的概率分布為 = 這就是【初始狀態序列】。

假定阿驢身體健康狀態的【轉換概率分布】 =

月兒認為的在相應身體狀況條件下,身體感覺這一觀測序列的【條件概率分布】 = 第一天: 【p(正常,第一天健康)】 = p(正常|健康) * p(健康|初始情況) = 0.5 * 0.6 = 0.3; 【p(正常, 第一天發燒)】 = p(正常|發燒) * p(發燒|初始情況) = 0.1 * 0.4 = 0.04

第二天:例如: 當前觀測值為冷,假定當前隱含狀態為健康,求當前的聯合概率分布p(冷,第二天健康) 。首先從 昨天的狀態到當前的健康狀態 有兩種路徑(昨天的狀態還沒確定,而只是先計算出每個狀態的概率分布): 昨天健康 ----> 今天健康, 昨天發燒 -----> 今天健康。 【這兩個路徑分別的概率為 0.3 * 0.7 以及 0.04 * 0.4】, 可以看到 當前如果為健康時,昨天為健康的概率更大,【因此我們選定昨天健康 ----> 今天健康 這條路徑】,即記錄下當前為健康時,昨天也為健康狀態, 然後求得當前的聯合概率分布 p(冷,第二天健康) = (0.3 * 0.7 ) * 0.4 = p(第二天健康)

其實看到這裡,你會發現和之前看到的最短路的例子說的一樣了:【viterbi 維特比演算法到達每一列的時候都會刪除不符合最短路徑要求的路徑】,其實也就是選擇概率最大的情況,和最短路那個例子區別就是【乙個是路徑長度,乙個是概率大小】**:

維特比演算法本質上就是乙個動態規劃dp演算法,在知乎上看到了關於乙個解釋維特比演算法的解釋 因此在此特意在**下,並加入一些個人對於結合實際案例場景下的演算法理解說明:

1.題目背景:

因此,從hmm隱馬爾科夫模型的角度來說,健康或者發燒 是身體隱含的狀態state, 而正常,頭暈或者冷是觀察序列,

因此這三天的觀察序列為: 正常, 冷, 頭暈, 而每天的身體隱含狀況則未知, 這在hmm問題中屬於解碼問題,可以通過維特比演算法,利用動態規劃演算法,來求解出整個hmm鏈中每天的隱含狀態。

2.已知情況:

隱含的身體狀態 =

可觀察的感覺狀態 =

假定阿驢身體狀態的概率分布為 =這就是初始狀態序列。

假定阿驢身體健康狀態的轉換概率分布 =

這樣就可以列出相應的狀態轉移矩陣:

月兒認為的在相應身體狀況條件下,身體感覺這一觀測序列的條件概率分布 = {

正常 冷 頭暈

健康: 0.5 0.4 0.1

發燒: 0.1 0.3 0.6

這樣就可以列出相應的觀測矩陣:

由上面我們可以發現,hmm的三要素都齊備了,下面就是解決問題了。

阿驢連續三天的身體感覺依次是: 正常、冷、頭暈 。

3.題目:

已知如上,求:阿驢這三天的身體健康狀態變化的過程是怎麼樣的?即已知觀測序列和hmm模型的情況下,求狀態序列。

4.過程:

這兒的箭頭指向就是乙個回溯查詢小本本的過程,我們在編寫演算法的時候,其實也得注意,每乙個概率最大的

單條路徑

上都要把前乙個狀態記錄下來。

知乎上也有人給出了相應的**實現:

後續crf條件隨機場其實也是強化版的馬爾科夫隨機場,核心還是維特比演算法等等

維特比演算法

維特比演算法在機器學習中非常重要,在求解隱馬爾科夫和條件隨機場的 問題中均用到了維特比演算法。實際上,維特比演算法不僅是很多自然語言處理的解碼演算法,也是現代數字通訊中使用最頻繁的演算法。以乙個簡單的隱馬爾科夫模型為例,n 為觀測符號,y y1,y2,y n 為隱狀態序列,要求的 問題為 y 1,y...

維特比演算法

維特比演算法主要用來解決籬笆網路,老實講我第一次聽到這個名字是發懵的,網路我是知道的,說白了就是圖 迪傑特斯拉演算法 但是,籬笆網路是值下面這種一列一列的圖,只會前面連線到後面,而且不會跳層連線,可以說是一種非常特殊且友好的圖了 正常的圖能逼死強迫症 x max xx x x x xma x x 這...

維特比演算法 python 維特比演算法實現分詞

維特比演算法原理可以參考以下文章,講解的非常詳細,那麼接下來將講解維特比演算法如何應用到分詞演算法中,並如何用python 實現。如何通俗地講解 viterbi 演算法?www.zhihu.com 一 過程分析 句子 經常有意見分歧 詞典 經常 經 有 有意見 意見 分歧 見 意 見分歧 分 概率 ...