码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-01-05 22:46:37      阅读:376      评论:0      收藏:0      [点我收藏+]

标签:


 

 

    /**
     * 【计算维特比矩阵】
     * 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();

    } 

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

标签:

原文地址:http://www.cnblogs.com/whaozl/p/5103815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!