隐马尔科夫模型的维特比算法java实现,详细原理请自行查看52nlp的

/**
     * 【计算维特比矩阵】
     * delta[ t ][ k ] = v_k(i) =log( max(P(pi in state k has sym i | path pi)) )
     */
    public void CalculateViterbiMatrix() {
        int T = O.length;
        delta = new double[ T ][N];
        PSI = new int[ T ][N];
        //1、初始化,计算初始时刻(直觉上的第1时刻)所有状态的局部概率
        for (int i = 0; i < N; i++){
            delta[0][i] = logPI[ i ] + logB[ i ] [ O[0] ];
        }
        //2、归纳,递归计算
        for (int t = 1; t < T; t++){
            for (int i = 0; i < N; i++) {
                int maxProdIndex = 0;
                double maxProd = delta[t - 1][ maxProdIndex ] + logA[ maxProdIndex ][ i ];
                for (int j = 1; j < N; j++) {
                    double prod = delta[t - 1][ j ] + logA[ j ][ i ];
                    if (prod > maxProd) {
                        maxProdIndex =  j;
                        maxProd = prod;
                    }
                }
                delta[ t ][ i ] = maxProd + logB[ i ][ O[ t ] ] ;
                PSI[ t ][ i ] = maxProdIndex;
            }
        }
        //3、(隐藏状态序列)回溯求最佳路径——从T-1时刻往初始时刻——寻找累积最大概率的最佳路径
        path=new int[T];//定义最佳路径
        double maxProd = delta[ T-1 ][ 0 ];
        path[T-1]=0;
        for (int i = 1; i < N; i++) {
            if (delta[ T-1 ][ i ] > maxProd) {
                path[ T-1 ] = i;
                maxProd = delta[ T-1 ][ i ];
            }
        }
        //4、路径回溯——寻找最佳路径
        for(int t= T-2; t>=0; t--){
            path[ t ]= PSI[ t+1 ][ path[ t+1 ] ];
        }
    }
    
    /**
     * 打印最佳隐藏路径
     * @since HMM必须给state和syms参数
     */
    public void printPath(){
        if(state==null){
            throw new IllegalArgumentException("隐藏状态state名称没有设置");
        }
        int T=O.length;
        for(int i=0; i< T; i++){
            System.out.print( state[ path[ i ] ] +"  ");
        }
        System.out.println();

}

时间: 2024-10-05 04:58:25

隐马尔科夫模型的维特比算法java实现,详细原理请自行查看52nlp的的相关文章

隐马尔可夫模型的前向算法(java实现),今天奉上

隐马尔可夫模型的前向算法(手动实现),今天奉上,由于研究生期间,实现的时候没有多加注释,这里为了让更好的人进入自然语言处理领域,特此,将前向算法奉上,具体公式可参考52nlp的HMN系列博客. 参考了大部分网站公式和借鉴.在此表示感谢. 后向算法和维特比算法,后续更新. HMM类: 1 package jxutcm.edu.cn.hmm.model;  2   3 import jxutcm.edu.cn.hmm.bean.HMMHelper;  4   5 /**  6  * 实现了 HMM(

隐马尔科夫模型学习笔记

隐马尔科夫模型在股票量化交易中有应用,最早我们找比特币交易模型了解到了这个概念,今天又看了一下<统计学习方法>里的隐马尔科夫模型一章. 隐马尔科夫模型从马尔科夫链的概念而来,马尔科夫链是指下一个状态只和当前的n个状态有关,和历史状态无关的一个时间上的事件链,隐马尔科夫模型在这个状态链的基础上,让每一个状态都能产生观测值,从而可以产生一个可观测的数据链,让原来的状态链变成了幕后产生数据的状态链,称为因马尔科夫链. 隐马尔科夫链应用比较广泛,主要能够处理三类问题:. 一个是给定了马尔科夫模型参数和

机器学习算法总结(七)——隐马尔科夫模型(前向后向算法、鲍姆-韦尔奇算法、维特比算法)

概率图模型是一类用图来表达变量相关关系的概率模型.它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的变表是变量间的概率相关关系.根据边的性质不同,可以将概率图模型分为两类:一类是使用有向无环图表示变量间的依赖关系,称为有向图模型或贝叶斯网:另一类是使用无向图表示变量间的相关关系,称为无向图模型或马尔科夫网. 隐马尔科夫模型(简称HMM)是结构最简单的动态贝叶斯网,是一种著名的有向图模型,主要用于时间序数据建模,在语音识别,自然语言处理,生物信息,模式识别中有着广泛的应用,虽

隐马尔科夫模型(前向后向算法、鲍姆-韦尔奇算法、维特比算法)

概率图模型是一类用图来表达变量相关关系的概率模型.它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的变表是变量间的概率相关关系.根据边的性质不同,可以将概率图模型分为两类:一类是使用有向无环图表示变量间的依赖关系,称为有向图模型或贝叶斯网:另一类是使用无向图表示变量间的相关关系,称为无向图模型或马尔科夫网. 隐马尔科夫模型(简称HMM)是结构最简单的动态贝叶斯网,是一种著名的有向图模型,主要用于时间序数据建模,在语音识别,自然语言处理,生物信息,模式识别中有着广泛的应用,虽

【ML-13-4】隐马尔科夫模型HMM--预测问题Viterbi(维特比)算法

[ML-13-1]隐马尔科夫模型HMM [ML-13-2]隐马尔科夫模型HMM--前向后向算法 [ML-13-3]隐马尔科夫模型HMM--Baum-Welch(鲍姆-韦尔奇) [ML-13-4]隐马尔科夫模型HMM--预测问题Viterbi(维特比)算法 目录 基础--HMM常用概率的计算 HMM最可能隐藏状态序列近似算法 Viterbi(维特比)算法 Viterbi(维特比)算法举例 HMM模型最后一个问题的求解:求给定观测序列条件下,最可能出现的对应的隐藏状态序列.即给定模型λ=(A,B,π

隐马尔科夫模型—2

二 定义 (1) 基本定义 在上一篇中,我们通过一个给母亲打电话预测天气的例子,来引入隐马尔科夫模型.下面我们将结合一中的例子来形式化的定义隐马尔可夫模型.隐马尔科夫模型是关于时序的概率模型,描述的由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程.在我们这个例子中,就是由一个隐藏的马尔科夫链生成每天的天气(状态),再由每天的天气决定每天母亲下班以后做什么(观测)的随机过程.隐藏的马尔科夫链随机生成的状态的序列,称为状态序列,也就是最近一段时间

隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO) 在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇里会用到.在李航的<统计学习方法>中,这个算法的讲解只考虑了单个观测

炎热天气看书还是钓鱼?隐马尔科夫模型教你预测!

高温天气与行为概率 夏季是一年最热的时候,气温普遍偏高,一般把日最高气温达到35℃以上的天气叫作高温天气,但是一般情况下高温天气分为两类.  (1)干热型高温.一般是指气温较高.太阳辐射强而且空气的湿度较小的高温天气.  (2)闷热型高温.一般是指水汽丰富,但是气温相对而言并不算太高,给人感受闷热.  小张在不同类型下的高温天气下会有不同的行为,但是归纳起来为主要为散步.垂钓.看书三类,分别在干热型高温和闷热型高温下对应行为的概率见下表.  假设干热型高温和闷热型高温之间会进行相互转变,每天可能

隐马尔科夫模型python实现简单拼音输入法

在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此训练得出隐马尔科夫模型,用维特比算法实现了一个简单的拼音输入法.githuh地址:https://github.com/LiuRoy/Pinyin_Demo 原理简介 隐马尔科夫模型 抄一段网上的定义: 隐马尔可夫模型 (Hidden Markov Model) 是一种统计模型,用来描述一个含有隐含