概率图模型3:隐马尔科夫(3)

本节主要实现隐马尔可夫模型的预测算法:Viterbi algorithm
李航,《统计学习方法》

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@author: XiangguoSun
@contact: sunxiangguodut@qq.com
@file: Viterbi.py
@time: 2017/3/27 12:40
@software: PyCharm
"""
import numpy as np


def Viterbi(Observe,model):
    A = model[0]
    B = model[1]
    pi = model[2]
    T = Observe.size
    N = B.shape[0]
    delta = np.zeros((T,N))
    F = np.zeros((T,N))

    for i in xrange(0,N):
        delta[0,i]=pi[i]*B[i,Observe[0]]

    for t in xrange(1,T):
        for i in xrange(0,N):
            delta[t, i] = np.max(delta[t-1,:]*A[:,i])*B[i,Observe[t]]
            F[t,i] = np.argmax(delta[t-1,:]*A[:,i])

    IT=np.zeros((T,),dtype=int)
    IT[T-1]=np.argmax(delta[-1,:])

    for t in xrange(T-2,-1,-1):
        IT[t] = F[t+1,IT[t+1]]

    return IT,delta,F


if __name__ == '__main__':

    A = np.array([[0.5, 0.2, 0.3],
                  [0.3, 0.5, 0.2],
                  [0.2, 0.3, 0.5]])
    B = np.array([[0.5, 0.5],
                  [0.4, 0.6],
                  [0.7, 0.3]])
    pi = np.array([0.2, 0.4, 0.4])
    model = (A, B, pi)

    Observe = np.array([0,1,0])
    States = np.array([1,2,3])

    IT, delta, F = Viterbi(Observe, model)
    print IT,'\n',delta,'\n',F

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值