隐马尔可夫模型的前向算法(手动实现),今天奉上,由于研究生期间,实现的时候没有多加注释,这里为了让更好的人进入自然语言处理领域,特此,将前向算法奉上,具体公式可参考52nlp的HMN系列博客。

参考了大部分网站公式和借鉴。在此表示感谢。

后向算法和维特比算法,后续更新。

HMM类:

                                                                                        }
                                           }
                      }
     }
     
                     System.out.println("转移矩阵:");
                                       System.out.print(HMMHelper.fmtlog(logA[i][j]));
             }
             System.out.println();
         }
     }
 
                     System.out.println("发射矩阵:");
                                       System.out.print(HMMHelper.fmtlog(logB[i][j]));
             }
             System.out.println();
         }
     }
     
     
 }

Forward类:

          
          
                            }
     
                                alpha =                        alpha[ 0 ][ i ] = logPI[ i ] + logB[ i ][ O[ 0 ] ];
         }
                                                                                      sum = TCMMath.logplus( sum, alpha[t - 1][ j ] + logA[ j ][ i ]);
                 }
                 alpha[ t ][ i ] = logB[ i ][ O[ t ] ] + sum;             }
         }
     }
     
                                                                sum = TCMMath.logplus(sum, alpha[ T-1 ][ i ]);         }
              }
     
                                                   System.out.print(HMMHelper.fmtlog(alpha[ i ][ j ]));
             }
             System.out.println();
         }
     }
 }

测试类:

         test();
     }
 
                                        { 0.500, 0.375, 0.125 }, 
                 { 0.250, 0.125, 0.625 }, 
                 { 0.250, 0.375, 0.375 } };
                                   { 0.60, 0.20, 0.15, 0.05 }, 
                 { 0.25, 0.25, 0.25, 0.25 }, 
                 { 0.05, 0.10, 0.35, 0.50 } };
         
                               
                           System.out.println("初始概率向量:{"+PI[0]+" "+PI[1]+" "+PI[2]+"}");
         System.out.println("隐藏状态序列:{"+Box.one+" "+Box.two+" "+Box.three+"}");
         System.out.println("观测序列:{"+Color.yellow+" "+Color.red+" "+Color.blue+" "+Color.yellow+" "+Color.green+"}");
         
                    Forward foreward=         foreward.CalculateForeMatrix();         System.out.println( HMMHelper.fmtlog( foreward.logProb() ) );         
                   * 后向算法测试
    }
 }

隐马尔可夫模型的前向算法(java实现),今天奉上的更多相关文章

  1. ZH奶酪:隐马尔可夫模型学习小记——forward算法+viterbi算法+forward-backward算法(Baum-welch算法)

    网上关于HMM的学习资料.博客有很多,基本都是左边摘抄一点,右边摘抄一点,这里一个图,那里一个图,公式中有的变量说不清道不明,学起来很费劲. 经过浏览几篇博文(其实有的地方写的也比较乱),在7张4开的 ...

  2. Viterbi算法和隐马尔可夫模型(HMM)算法

    隐马尔可夫模型(HMM)及Viterbi算法 https://www.cnblogs.com/jclian91/p/9954878.html HMM简介   对于算法爱好者来说,隐马尔可夫模型的大名那 ...

  3. 隐马尔可夫模型(HMM)及Viterbi算法

    HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引入该模型 ...

  4. 隐马尔科夫模型HMM学习最佳范例

    谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...

  5. Machine Learning系列--隐马尔可夫模型的三大问题及求解方法

    本文主要介绍隐马尔可夫模型以及该模型中的三大问题的解决方法. 隐马尔可夫模型的是处理序列问题的统计学模型,描述的过程为:由隐马尔科夫链随机生成不可观测的状态随机序列,然后各个状态分别生成一个观测,从而 ...

  6. 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...

  7. HMM:隐马尔科夫模型-前向算法

    http://blog.csdn.net/pipisorry/article/details/50722376 目标-解决HMM的基本问题之一:已知HMM模型λ及观察序列O,如何计算P(O|λ)(计算 ...

  8. 一文搞懂HMM(隐马尔可夫模型)

    什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序,意味着具有确定和有 ...

  9. 转:隐马尔可夫模型(HMM)攻略

    隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价 ...

随机推荐

  1. leetcode 621 任务调度器 Task Scheduler

    给定一个用字符数组表示的 CPU 需要执行的任务列表.其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完.CPU 在 ...

  2. 使用ajax获取servelt数据乱码

    修改tomcat编码 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout=" ...

  3. CircleCi 不更新某个分支的两种方法

    概述 今天我发现我的所有项目的 CircleCi 部署全部都会更新 gh-pages 分支.找了好久,终于找到了不更新的方法.于是我总结了一下,记录下来,供以后开发时参考,相信对其他人也有用. onl ...

  4. opencv的曲线拟合polyfit

    推荐一个不错的网页,可以直接用solve函数求解方程组: http://m.blog.csdn.net/u014652390/article/details/52789591 4.1 曲线拟合的最小二 ...

  5. 【神经网络与深度学习】Caffe源码中各种依赖库的作用及简单使用

    1.      Boost库:它是一个可移植.跨平台,提供源代码的C++库,作为标准库的后备. 在Caffe中用到的Boost头文件包括: (1).shared_ptr.hpp:智能指针,使用它可以不 ...

  6. 如何实现Java线程的 阻塞/唤醒(和暂停/继续 类似)

    以下为线程 阻塞/唤醒  主要代码 public class MyThread extends Thread { //无意义 private final Object lock = new Objec ...

  7. java操作ElasticSearch(es)进行增删查改操作

    有时间是要了解一下ES这个东西的~ ---------------------------------------------------------------------------------- ...

  8. redis 小结 一

    1.redis 是什么? 它是一个key-value存储系统,也被称为数据结构服务器,它的值是字符串(String),哈希(Hash),列表(list),集合(sets)和有序集合(sorted se ...

  9. python 链接mysql 连接池

    # python 链接mysqlimport mysql.connector.poolingconfig = { "host":"localhost", &qu ...

  10. 啥是IOC ?啥是DI ?

    1.IOC是什么?   IOC (inverse of controll)控制反转:所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(appl ...