隱馬爾可夫模型(Hidden Markov Model,HMM)是統(tǒng)計模型,,它用來描述一個含有隱含未知參數(shù)的馬爾可夫過程,。其難點是從可觀察的參數(shù)中確定該過程的隱含參數(shù),然后利用這些參數(shù)來作進一步的數(shù)據(jù)分析,,例如模式識別,。 HMM在建模的系統(tǒng)被認為是一個馬爾可夫過程與未觀測(隱藏的)到狀態(tài)的統(tǒng)計馬爾可夫模型。一般來說,,HMM中說到的馬爾可夫鏈其實是指隱含狀態(tài)鏈,,因為隱含狀態(tài)之間存在轉(zhuǎn)換概率。 可見狀態(tài)之間沒有轉(zhuǎn)換概率,,但是隱含狀態(tài)和可見狀態(tài)之間有一個做輸出概率,。如果提前知道所有隱含狀態(tài)之間的轉(zhuǎn)換概率和所有隱含狀態(tài)到所有可見狀態(tài)之間的輸出概率,做模擬是相當容易的,。 通過下圖骰子例子說明:第一個骰子是我們平常見的骰子(稱骰子為D6),,6個面,每個面(1,,2,,3,4,,5,,6)出現(xiàn)的概率是1/6。第二個骰子是個四面體(稱骰子為D4),,每個面(1,,2,,3,4)出現(xiàn)的概率是1/4,。第三個骰子有八個面(稱骰子為D8),,每個面(1,2,,3,,4,5,,6,,7,8)出現(xiàn)的概率是1/8,。 HMM模型相關(guān)的算法主要分為三類: 1,、知道骰子有幾種(隱含狀態(tài)數(shù)量),每種骰子是什么(轉(zhuǎn)換概率),,根據(jù)擲骰子擲出的結(jié)果(可見狀態(tài)鏈),,我想知道每次擲出來的都是哪種骰子(隱含狀態(tài)鏈)。這個問題有兩種解法,,給出兩個不同的答案,。 第一種解法求最大似然狀態(tài)路徑,說通俗點呢,,就是求一串骰子序列,,這串骰子序列產(chǎn)生觀測結(jié)果的概率最大。第二種解法,,就不是求一組骰子序列了,,而是求每次擲出的骰子分別是某種骰子的概率。 2,、知道骰子有幾種(隱含狀態(tài)數(shù)量),,每種骰子是什么(轉(zhuǎn)換概率),根據(jù)擲骰子擲出的結(jié)果(可見狀態(tài)鏈),,我想知道擲出這個結(jié)果的概率,。看似這個問題意義不大,,因為擲出來的結(jié)果很多時候都對應(yīng)了一個比較大的概率,。 問這個問題的目的呢,其實是檢測觀察到的結(jié)果和已知的模型是否吻合,。如果很多次結(jié)果都對應(yīng)了比較小的概率,,那么就說明我們已知的模型很有可能是錯的,有人偷偷把我們的骰子給換了。 3,、知道骰子有幾種(隱含狀態(tài)數(shù)量),,不知道每種骰子是什么(轉(zhuǎn)換概率),觀測到很多次擲骰子的結(jié)果(可見狀態(tài)鏈),,我想反推出每種骰子是什么(轉(zhuǎn)換概率),。 這是最常見的情況,很多時候我們只有可見結(jié)果,,不知道HMM模型里的參數(shù),,我們需要從可見結(jié)果估計出這些參數(shù),,這是建模的一個必要步驟,。 比如說懷疑自己的六面骰被賭場動過手腳了,有可能被換成另一種六面骰,,這種六面骰擲出來是1的概率更大,,是1/2,擲出來是2,,3,,4,5,,6的概率是1/10,。怎么辦么?答案很簡單,,算一算正常的三個骰子擲出一段序列的概率,,再算一算不正常的六面骰和另外兩個正常骰子擲出這段序列的概率。如果前者比后者小,,就要小心了,。比如說擲骰子的結(jié)果是: 要算用正常的三個骰子擲出這個結(jié)果的概率,其實就是將所有可能情況的概率進行加和計算,。同樣,,簡單而暴力的方法就是把窮舉所有的骰子序列,還是計算每個骰子序列對應(yīng)的概率,,把所有算出來的概率相加,,得到的總概率就是我們要求的結(jié)果。解決這個問題的算法叫做前向算法,,如果我們只擲一次骰子: 看到結(jié)果為1,,產(chǎn)生這個結(jié)果的總概率可以按照如下計算,總概率為0.18: 把這個情況拓展,,我們擲兩次骰子: 看到結(jié)果為1,,6.產(chǎn)生這個結(jié)果的總概率可以按照如下計算,總概率為0.05: 繼續(xù)拓展,,我們擲三次骰子: 看到結(jié)果為1,,6,,3,產(chǎn)生這個結(jié)果的總概率可以按照如下計算,,總概率為0.03: 同樣的,,我們一步一步的算,有多長算多長,,再長的馬爾可夫鏈總能算出來的,。用同樣的方法,也可以算出不正常的六面骰和另外兩個正常骰子擲出這段序列的概率,,然后我們比較一下這兩個概率大小,,就能知道你的骰子是不是被人換了。 |
|
來自: taotao_2016 > 《圖像處理》