• 大小: 24KB
    文件类型: .cs
    金币: 1
    下载: 0 次
    发布日期: 2021-05-21
  • 语言: C#
  • 标签: HMM  C#  

资源简介

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)  
        {              
        

评论

共有 条评论