隐马尔科夫模型c#语言算法实现,HMM学习最佳范例四:隐马尔科夫模型
四、隱馬爾科夫模型(Hidden Markov Models)
1、定義(Definition of a hidden Markov model)
一個隱馬爾科夫模型是一個三元組(pi, A, B)。
:初始化概率向量;
:狀態轉移矩陣;
:混淆矩陣;
在狀態轉移矩陣及混淆矩陣中的每一個概率都是時間無關的——也就是說,當系統演化時這些矩陣并不隨時間改變。實際上,這是馬爾科夫模型關于真實世界最不現實的一個假設。
2、應用(Uses associated with HMMs)
一旦一個系統可以作為HMM被描述,就可以用來解決三個基本問題。其中前兩個是模式識別的問題:給定HMM求一個觀察序列的概率(評估);搜索最有可能生成一個觀察序列的隱藏狀態序列(解碼)。第三個問題是給定觀察序列生成一個HMM(學習)。
a) 評估(Evaluation)
考慮這樣的問題,我們有一些描述不同系統的隱馬爾科夫模型(也就是一些( pi,A,B)三元組的集合)及一個觀察序列。我們想知道哪一個HMM最有可能產生了這個給定的觀察序列。例如,對于海藻來說,我們也許會有一個“夏季”模型和一個“冬季”模型,因為不同季節之間的情況是不同的——我們也許想根據海藻濕度的觀察序列來確定當前的季節。
我們使用前向算法(forward algorithm)來計算給定隱馬爾科夫模型(HMM)后的一個觀察序列的概率,并因此選擇最合適的隱馬爾科夫模型(HMM)。
在語音識別中這種類型的問題發生在當一大堆數目的馬爾科夫模型被使用,并且每一個模型都對一個特殊的單詞進行建模時。一個觀察序列從一個發音單詞中形成,并且通過尋找對于此觀察序列最有可能的隱馬爾科夫模型(HMM)識別這個單詞。
b) 解碼( Decoding)
給定觀察序列搜索最可能的隱藏狀態序列。
另一個相關問題,也是最感興趣的一個,就是搜索生成輸出序列的隱藏狀態序列。在許多情況下我們對于模型中的隱藏狀態更感興趣,因為它們代表了一些更有價值的東西,而這些東西通常不能直接觀察到。
考慮海藻和天氣這個例子,一個盲人隱士只能感覺到海藻的狀態,但是他更想知道天氣的情況,天氣狀態在這里就是隱藏狀態。
我們使用Viterbi 算法(Viterbi algorithm)確定(搜索)已知觀察序列及HMM下最可能的隱藏狀態序列。
Viterbi算法(Viterbi algorithm)的另一廣泛應用是自然語言處理中的詞性標注。在詞性標注中,句子中的單詞是觀察狀態,詞性(語法類別)是隱藏狀態(注意對于許多單詞,如wind,fish擁有不止一個詞性)。對于每句話中的單詞,通過搜索其最可能的隱藏狀態,我們就可以在給定的上下文中找到每個單詞最可能的詞性標注。
C)學習(Learning)
根據觀察序列生成隱馬爾科夫模型。
第三個問題,也是與HMM相關的問題中最難的,根據一個觀察序列(來自于已知的集合),以及與其有關的一個隱藏狀態集,估計一個最合適的隱馬爾科夫模型(HMM),也就是確定對已知序列描述的最合適的(pi,A,B)三元組。
當矩陣A和B不能夠直接被(估計)測量時,前向-后向算法(forward-backward algorithm)被用來進行學習(參數估計),這也是實際應用中常見的情況。
3、總結(Summary)
由一個向量和兩個矩陣(pi,A,B)描述的隱馬爾科夫模型對于實際系統有著巨大的價值,雖然經常只是一種近似,但它們卻是經得起分析的。隱馬爾科夫模型通常解決的問題包括:
1. 對于一個觀察序列匹配最可能的系統——評估,使用前向算法(forward algorithm)解決;
2. 對于已生成的一個觀察序列,確定最可能的隱藏狀態序列——解碼,使用Viterbi 算法(Viterbi algorithm)解決;
3. 對于已生成的觀察序列,決定最可能的模型參數——學習,使用前向-后向算法(forward-backward algorithm)解決。
未完待續:前向算法1
總結
以上是生活随笔為你收集整理的隐马尔科夫模型c#语言算法实现,HMM学习最佳范例四:隐马尔科夫模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hcnp笔记
- 下一篇: c# char unsigned_dll