import numpy as np
# -*- codeing:utf-8 -*-
__author__ = 'youfei' # 隐状态
hidden_state = ['sunny', 'rainy'] # 观测序列
obsevition = ['walk', 'shop', 'clean'] # 根据观测序列、发射概率、状态转移矩阵、发射概率
# 返回最佳路径
def compute(obs, states, start_p, trans_p, emit_p):
# max_p(3*2)每一列存储第一列不同隐状态的最大概率
max_p = np.zeros((len(obs), len(states))) # path(2*3)每一行存储上max_p对应列的路径
path = np.zeros((len(states), len(obs))) # 初始化
for i in range(len(states)):
max_p[0][i] = start_p[i] * emit_p[i][obs[0]]
path[i][0] = i for t in range(1, len(obs)):
newpath = np.zeros((len(states), len(obs)))
for y in range(len(states)):
prob = -1
for y0 in range(len(states)):
nprob = max_p[t-1][y0] * trans_p[y0][y] * emit_p[y][obs[t]]
if nprob > prob:
prob = nprob
state = y0
# 记录路径
max_p[t][y] = prob
for m in range(t):
newpath[y][m] = path[state][m]
newpath[y][t] = y path = newpath max_prob = -1
path_state = 0
# 返回最大概率的路径
for y in range(len(states)):
if max_p[len(obs)-1][y] > max_prob:
max_prob = max_p[len(obs)-1][y]
path_state = y return path[path_state] state_s = [0, 1]
obser = [0, 1, 2] # 初始状态,测试集中,0.6概率观测序列以sunny开始
start_probability = [0.6, 0.4] # 转移概率,0.7:sunny下一天sunny的概率
transititon_probability = np.array([[0.7, 0.3], [0.4, 0.6]]) # 发射概率,0.4:sunny在0.4概率下为shop
emission_probability = np.array([[0.1, 0.4, 0.5], [0.6, 0.3, 0.1]]) result = compute(obser, state_s, start_probability, transititon_probability, emission_probability) for k in range(len(result)):
print(hidden_state[int(result[k])])

HMM 隐马尔科夫 Python 代码的更多相关文章

  1. Atitit 马尔可夫过程(Markov process) hmm隐马尔科夫。 马尔可夫链,的原理attilax总结

    Atitit 马尔可夫过程(Markov process) hmm隐马尔科夫. 马尔可夫链,的原理attilax总结 1. 马尔可夫过程1 1.1. 马尔科夫的应用 生成一篇"看起来像文章的 ...

  2. HMM隐马尔科夫模型

    这是一个非常重要的模型,凡是学统计学.机器学习.数据挖掘的人都应该彻底搞懂. python包: hmmlearn 0.2.0 https://github.com/hmmlearn/hmmlearn ...

  3. HMM隐马尔科夫算法(Hidden Markov Algorithm)初探

    1. HMM背景 0x1:概率模型 - 用概率分布的方式抽象事物的规律 机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测. 概率模型(p ...

  4. 自然语言处理(1)-HMM隐马尔科夫模型基础概念(一)

    隐马尔科夫模型HMM 序言 文本序列标注是自然语言处理中非常重要的一环,我先接触到的是CRF(条件随机场模型)用于解决相关问题,因此希望能够对CRF有一个全面的理解,但是由于在学习过程中发现一个算法像 ...

  5. HMM 隐马尔科夫模型

    参考如下博客: http://www.52nlp.cn/itenyh%E7%89%88-%E7%94%A8hmm%E5%81%9A%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8 ...

  6. 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码

    上篇介绍了隐马尔科夫模型 本文给出关于问题3解决方法,并给出一个例子的python代码 回顾上文,问题3是什么, 下面给出,维比特算法(biterbi) algorithm 下面通过一个具体例子,来说 ...

  7. 用hmmlearn学习隐马尔科夫模型HMM

    在之前的HMM系列中,我们对隐马尔科夫模型HMM的原理以及三个问题的求解方法做了总结.本文我们就从实践的角度用Python的hmmlearn库来学习HMM的使用.关于hmmlearn的更多资料在官方文 ...

  8. HMM基本原理及其实现(隐马尔科夫模型)

    HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...

  9. 隐马尔科夫模型的Python3实现代码

    下面给出计算隐马尔科夫模型的编程代码: from hmmlearn.hmm import GaussianHMM import datetime import numpy as np from mat ...

随机推荐

  1. mysql 登录修改密码与数据库备份

    1.mysql首次登录修改密码 mysql -uroot -p(首次登录无密码,按回车即可:如果无法登陆,修改mysql配置文件,在[mysqld]最后一行加skip-grant-tables即可登录 ...

  2. docker服务端与客户端通信方式

    docker的服务端与客户端间可以通过unix.tcp方式进行通信.但默认情况下,服务端只监听本地unix接口/var/run/docker.sock,所以客户端只能在服务端所在的机器上使用该unix ...

  3. 14.shell脚本学习

    简单的执行跟踪,会使得Shell显示每个被执行到的命令sh -x delete.sh 查找与替换grepsed -i "s/t_rs_customer/t_rs_customer_bak/g ...

  4. 监控 Kubernetes 集群应用

    Prometheus的数据指标是通过一个公开的 HTTP(S) 数据接口获取到的,我们不需要单独安装监控的 agent,只需要暴露一个 metrics 接口,Prometheus 就会定期去拉取数据: ...

  5. skywalking-agent 与docker组合使用

    docker部署 公司有使用docker部署的微服务 可以直接使用  仓库/java:8-jdk-alpine-asla-shanghai-1-skyagent-2作为基础镜像 这个镜像包是java8 ...

  6. 学习前端 第一天之html标签补充

    一.常用浏览器内核 Trident(IE内核) Gecko(firefox) webkit(Safari) Chromium/Blink(chrome) Blink(Opera) 二.常见标签回顾 a ...

  7. TVM图优化(以Op Fusion为例)

    首先给出一个TVM 相关的介绍,这个是Tianqi Chen演讲在OSDI18上用的PPThttps://files.cnblogs.com/files/jourluohua/Tianqi-Chen- ...

  8. 我理解的epoll(一)——实现分析

    epoll项目中用了几次,但是对于其原理只是一知半解.我希望通过几篇blog能加深对她的理解. 我认为epoll是同步IO,因为他在调用epoll_wait时,内核在有I/O就绪前是阻塞的,虽然可以将 ...

  9. STM32L1xx——ADC(中断/DMA)样例代码

    此代码欲实现的功能是:使用中断或者DMA的方式采集滑动变阻器采集到的电压值,使用单ADC单通道采样! (由于不是直接需要电压,所以转换函数我就没列出来,可根据自身需要去网上查到转换的函数.) 代码结构 ...

  10. Linux rpm和yum软件管理

    rpm是管理程序的一个小工具,rpm常来用作查询 什么源码包:大多数都是tar.gz,bz.bz2结尾的包 zip结尾的包 压缩格式为 zip –r 命名.zip ./* 解压格式为 unzip 命名 ...