python vertibi算法实现原理解析

 更新时间:2023年07月25日 17:12:49   作者:龙仔  
这篇文章主要为大家介绍了python vertibi算法实现原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目阐释

viterbi算法实现。 用python实现viterbi的hidden state 和 表现层的转移动态规划问题,归结到相邻两个step之间存在 state转移概率,state2emibission转移概率。

计算后可以得到每个step的每个state max_probablity

由于step_n依赖于 step_n-1,跟 step_n-2无关,所以可以一直如此往复,得到最后的max_prob
整个问题抽象为,下一个step依赖于上一个step的所有state,所以只需要计算每一层step的所有state的prbo即可。

难点

三层for循环,为了保留,计算每个step的state的概率,所以要 next_state 嵌套在 source_state之外。

states=['Rainy','Sunny']
observations=['walk','shop','clean']
observations=('walk','clean','walk')
emission_probability={'Rainy':{'walk':0.1,'shop':0.4,'clean':0.5},
                   'Sunny': {'walk': 0.6, 'shop': 0.3, 'clean': 0.1}
                    }
trans_probability={'Rainy':{'Rainy':0.7,'Sunny':0.3},
                     'Sunny':{'Rainy':0.4,'Sunny':0.6}
                     }
start_probability={'Rainy':0.6,'Sunny':0.4}
def vertibi(states,objservations,start_prob,trans_prob,emi_prob):
    T={state:[start_prob[state],[state],start_prob[state]] for state in states}
    for objservation in objservations:
        U={}
        for next_state in states:
            total=0
            argmax=None
            valmax=0
            for source_state in states:
                prob,v_path,v_prob=T[source_state]
                p=emi_prob[source_state][objservation]*trans_prob[source_state][next_state]
                prob*=p
                v_prob*=p
                if v_prob>valmax:
                    valmax=v_prob
                    argmax=v_path+[next_state]
                    total+=prob
            U[next_state]=[total,argmax,valmax]
        T=U
    total = 0
    argmax = None
    valmax = 0
    for state in states:
        prob, v_path, v_prob=T[state]
        if v_prob>valmax:
            argmax=v_path
            total=prob
            valmax=v_prob
    return total,argmax,valmax
total,argmax,valmax=vertibi(states,observations,start_probability,trans_probability,emission_probability)
print(total)
print(argmax)
print(valmax)

以上就是python vertibi算法实现原理解析的详细内容,更多关于python vertibi算法的资料请关注脚本之家其它相关文章!

相关文章

  • Python实战项目刮刮乐的实现详解流程

    Python实战项目刮刮乐的实现详解流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Python实现一个刮刮乐的小项目,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Python NumPy创建数组方法

    Python NumPy创建数组方法

    这篇文章主要介绍了Python NumPy创建数组方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • Django实现跨域请求过程详解

    Django实现跨域请求过程详解

    这篇文章主要介绍了Django实现跨域请求过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python NumPy ndarray二维数组 按照行列求平均实例

    python NumPy ndarray二维数组 按照行列求平均实例

    今天小编就为大家分享一篇python NumPy ndarray二维数组 按照行列求平均实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • django 开发忘记密码通过邮箱找回功能示例

    django 开发忘记密码通过邮箱找回功能示例

    这篇文章主要介绍了django 开发忘记密码通过邮箱找回功能示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Python的爬虫包Beautiful Soup中用正则表达式来搜索

    Python的爬虫包Beautiful Soup中用正则表达式来搜索

    这篇文章主要介绍了Python的爬虫包Beautiful Soup中用正则表达式来搜索的技巧,包括使用正则表达式去搜索多种可能的关键字以及查找属性值未知的标签等,需要的朋友可以参考下
    2016-01-01
  • Python fileinput模块使用实例

    Python fileinput模块使用实例

    这篇文章主要介绍了Python fileinput模块使用实例,fileinput模块可以遍历文本文件的所有行,本文就给出它的使用代码实例,需要的朋友可以参考下
    2015-05-05
  • python基于pyDes库实现des加密的方法

    python基于pyDes库实现des加密的方法

    这篇文章主要介绍了python基于pyDes库实现des加密的方法,结合实例形式较为详细的分析了pyDes库的下载、安装及使用pyDes库进行加密的相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • django admin组件使用方法详解

    django admin组件使用方法详解

    这篇文章主要介绍了django admin组件使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python字符串拼接、截取及替换方法总结分析

    Python字符串拼接、截取及替换方法总结分析

    这篇文章主要介绍了Python字符串拼接、截取及替换方法,结合实例形式总结分析了Python针对字符串的拼接、截取与替换的原理与常见使用技巧,需要的朋友可以参考下
    2016-04-04

最新评论