資源簡介
HMM(Hidden Markov Model,隱馬爾科夫模型)是一種用參數表示的用于描述隨機過程統計特性的概率模型,是一個雙重隨機過程, 由兩個部分組成:馬爾可夫鏈和一般隨機過程。 其中馬爾可夫鏈用來描述狀態的轉移,用轉移概率描述。一般隨機過程用來描述狀態與觀察序列間的關系,用觀察值概率描述。
代碼片段和文件信息
/*?----------------------------------------------------------?
功能描述:?
????1.前向算法(forward?algorithm):給定HMM求一個觀察序列的概率(評估)?
????2.后向算法(backward?algorithm):給定HMM求一個觀察序列的概率(評估)?
????3.前向-后向算法(forward-backward?algorithm):根據觀察序列生成隱馬爾科夫模型(學習)?
????4.維特比算法(Viterbi?algorithm):搜索最有可能生成一個觀察序列的隱藏狀態序列(解碼)?
?
參考資料:?
????C代碼:http://www.kanungo.com/software/umdhmm-v1.02.zip?
????學習資料:http://www.52nlp.cn/category/hidden-markov-model?
------------------------------------------------------------?*/??
using?System;
using?System.Collections.Generic;
using?System.Text;
namespace?loitering_Markov_
{
????public?partial?class?HMM??
????{??
????????///????
????????///?隱藏狀態數目?N???
????????///? ???
????????public?readonly?Int32?N;??
??
????????///????
????????///?觀察符號數目?M???
????????///? ???
????????public?readonly?Int32?M;???
??
????????///????
????????///?狀態轉移矩陣?A???
????????///? ???
????????public?Double[]??A;??
??
????????///????
????????///?混淆矩陣(confusion?matrix)B???
????????///? ???
????????public?Double[]??B;??
??
????????///????
????????///?初始概率向量?PI???
????????///? ???
????????public?Double[]???PI;??
??
????????///????
????????///?構造函數???
????????///? ???
????????///?隱藏狀態數目???
????????///?觀察符號數目???
????????public?HMM(Int32?StatesNum?Int32?ObservationSymbolsNum)??
????????{??
????????????N?=?StatesNum;??????????????//?隱藏狀態數目???
????????????M?=?ObservationSymbolsNum;??//?觀察符號數目???
??
????????????A?=?new?Double[N?N];???//?狀態轉移矩陣???
????????????B?=?new?Double[N?M];???//?混淆矩陣????
????????????PI?=?new?Double[N];?????//?初始概率向量???
????????}?
????????///????
????????///?維特比算法:通過給定的觀察序列,推算出可能性最大的隱藏狀態序列???
????????///?Viterbi?Algorithm:?Finding?most?probable?sequence?of?hidden?states???
????????///? ???
????????///?已知的觀察序列???
????????///?可能性最大的隱藏狀態序列的概率???
????????///?可能性最大的隱藏狀態序列 ???
????????///?使用雙精度運算,不輸出中間結果 ???
????????public?Int32[]?Viterbi(Int32[]?OB?out?Double?Probability)??
????????{??
????????????Double[]?DELTA;??
????????????Int32[]?PSI;??
??
????????????return?Viterbi(OB?out?DELTA?out?PSI?out?Probability);??
????????}??
??
????????///????
????????///?維特比算法:通過給定的觀察序列,推算出可能性最大的隱藏狀態序列???
????????///? ???
????????///?已知的觀察序列???
????????///?輸出中間結果:局部最大概率???
????????///?輸出中間結果:反向指針指示最可能路徑???
????????///?可能性最大的隱藏狀態序列的概率???
????????///?可能性最大的隱藏狀態序列 ????
????????///?使用雙精度運算,且輸出中間結果 ???
????????public?Int32[]?Viterbi(Int32[]?OB?out?Double[]?DELTA?out?Int32[]?PSI?out?Double?Probability)??
????????{??????????????
????????
- 上一篇:DayLoadSet.csv
- 下一篇:C#仿簡單的CAD矢量繪圖源碼
評論
共有 條評論