一、HMM模型+维特比算法实例

1、问题描述

假设连续观察3天的海藻湿度为(Dry,Damp,Soggy),求这三天最可能的天气情况。

2、已知信息

①天气只有三类(Sunny,Cloudy,Rainy),海藻湿度有四类{Dry,Dryish, Damp,Soggy },而且海藻湿度和天气有一定的关系。

②隐藏的状态:Sunny, Cloudy, Rainy;

③观察状态序列:{Dry, Damp, Soggy}

④初始状态序列:

Sunny

Cloudy

Rainy

0.63

0.17

0.20

⑤状态转移矩阵:

Sunny

Cloudy

Rainy

Sunny

0.5

0.375

0.125

Cloudy

0.25

0.125

0.625

Rainy

0.25

0.375

0.375

⑥发射矩阵:

Dry

Dryish

Damp

Soggy

Sunny

0.6

0.2

0.15

0.05

Cloudy

0.25

0.25

0.25

0.25

Rainy

0.05

0.10

0.35

0.5

3、分析

由一阶HMM可知,Day2的天气仅取决于Day1;Day3的天气又只取决于Day2的天气。

4、计算过程

(1)Day1由于是初始状态,我们分别求

P(Day1-Sunny)=0.63*0.6;

P(Day1-Cloudy)=0.17*0.25;

P(Day1-Rain)=0.20*0.05;

Choose max{ P(Day1-Sunny) , P(Day1-Cloudy),P(Day1-Rainy)}, 得到P(Day1-Sunny)最大,得出第1天Sunny的概率最大。

(2)Day2的天气又取决于Day1的天气状况,同时也受Day2观察的海藻情况影响。

P(Day2-Sunny)= max{ P(Day1-Sunny)*0.5, P(Day1-Cloudy)*0.25,  P(Day1-Rainy)*0.25} *0.15;

P(Day2-Cloudy)= max{ P(Day1-Sunny)*0.375,  P(Day1-Cloudy)*0.125, P(Day1-Rainy)*0.625} *0.25;

P(Day2-Rainy)= max{ P(Day1-Sunny)*0.125,  P(Day1-Cloudy)*0.625 , P(Day1-Rainy)*0.375} *0.35;

Choosemax{ P(Day2-Sunny) , P(Day2-Cloudy), P(Day2-Rainy)},得到P(Day2-Cloudy)最大,得出第2天Cloudy的概率最大。

故{Sunny,Cloudy}是前两天最大可能的天气序列。

(3)Day3的天气又取决于Day2的天气状况,同时也受Day3观察的海藻情况影响。

P(Day3-Sunny)= max{ P(Day2-Sunny)*0.5, P(Day2-Cloudy)*0.25,  P(Day2-Rainy)*0.25} *0.05;

P(Day3-Cloudy)= max{ P(Day2-Sunny)*0.375,  P(Day2-Cloudy)*0.125, P(Day2-Rainy)*0.625} *0.25;

P(Day3-Rainy)= max{ P(Day2-Sunny)*0.125,  P(Day2-Cloudy)*0.625, P(Day2-Rainy)*0.375} *0. 05;

Choosemax{ P(Day3-Sunny) , P(Day3-Cloudy), P(Day3-Rainy)},得到P(Day3-Rainy)最大,得出第3天Rainy的概率最大。故{Sunny,Cloudy,Rainy}是这三天最可能的天气序列。

5.Python代码

流程图:

1 #-*- coding:utf-8 -*-

2 __author__ = 'Administrator'

3

4 init_vec={"sunny":0.63,"cloudy":0.17,"rainy":0.20}5 trans_mat={"sunny":{"sunny":0.5,"cloudy":0.375,"rainy":0.125},6 "cloudy":{"sunny":0.25,"cloudy":0.125,"rainy":0.625},7 "rainy":{"sunny":0.25,"cloudy":0.375,"rainy":0.375}}8 emit_mat={"sunny":{"dry":0.6,"dryish":0.2,"damp":0.15,"soggy":0.05},9 "cloudy":{"dry":0.25,"dryish":0.25,"damp":0.25,"soggy":0.25},10 "rainy":{"dry":0.05,"dryish":0.10,"damp":0.35,"soggy":0.50}}11 observes=["dry","damp","soggy"]12 states=["sunny","cloudy","rainy"]13

14 #列表中包含字典,就相当于二阶列表使用

15 tab=[{}] #只有一行

16 path=[{}]17 for t inrange(len(observes)):18 #print(t)

19 if t==0:20 temp=[]21 for state instates:22 prob=init_vec[state]*emit_mat[state].get(observes[t])23 tab[0][state]=prob24 temp.append((prob,state))25 best_prob,best_state=max(temp,key=lambdax:x[0])26 path[0][best_state]=best_prob27 else:28 tab.append({})29 path.append({})30 temp=[]31 for state1 instates:32 item=[]33 for state2 instates:34 prob=tab[t-1][state2]*trans_mat[state2].get(state1)*emit_mat[state1].get(observes[t])35 item.append((prob,state2))36 best_prob,best_state=max(item,key=lambdax:x[0])37 tab[t][state1]=best_prob38 temp.append((best_prob,state1))39 best_prob,best_state=max(temp,key=lambdax:x[0])40 path[t][best_state]=best_prob41 print(tab)42 print(path)

View Code

输出结果:

[{'rainy': 0.010000000000000002, 'cloudy': 0.0425, 'sunny': 0.378}, {'rainy': 0.0165375, 'cloudy': 0.0354375, 'sunny': 0.02835}, {'rainy': 0.01107421875, 'cloudy': 0.0026578125, 'sunny': 0.0007087500000000001}]

[{'sunny': 0.378}, {'cloudy': 0.0354375}, {'rainy': 0.01107421875}]

hmm 流程图_算法:HMM模型+维特比算法详解相关推荐

  1. 全排列 流程图_[分享]给排水工程全流程施工详解,看看精品工程是怎样施工的!...

    给排水工程是机电安装五大分部之一,也是贯穿建筑工程施工全过程的重要内容,本文是基于工程实例对给排水施工工艺的全流程解读,可供大家参考实施! ----------多图预警分割线,流量党慎滑------- ...

  2. EM算法(Expectation Maximization Algorithm)详解

    EM算法(Expectation Maximization Algorithm)详解 主要内容 EM算法简介 预备知识  极大似然估计 Jensen不等式 EM算法详解  问题描述 EM算法推导 EM ...

  3. 大白话解析Apriori算法python实现(含源代码详解)

    大白话解析Apriori算法python实现(含源代码详解) 一.专业名词解释 二.算法思路 三.python代码实现 四.Aprioir的优点.缺点及改进方法 本文为博主原创文章,转载请注明出处,并 ...

  4. JAVA中希尔排序去的讲解_java 中基本算法之希尔排序的实例详解

    java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shel ...

  5. python符号格式化设置区间_Python 数值区间处理_对interval 库的快速入门详解

    使用 Python 进行数据处理的时候,常常会遇到判断一个数是否在一个区间内的操作.我们可以使用 if else 进行判断,但是,既然使用了 Python,那我们当然是想找一下有没有现成的轮子可以用. ...

  6. Java内存模型(JMM)详解-可见性volatile

    这里写自定义目录标题 Java内存模型(JMM)详解-可见性 什么是JMM JMM存在的意义 为什么示例demo中不会打印 i 的值 如何解决可见性问题 **深入理解JMM内存模型** JAVA内存模 ...

  7. 从零开始学前端 - 7. CSS盒模型 margin和padding详解

    作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正.转载请附带作者信息 ...

  8. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  9. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解 - 未完善

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  10. 【JVM】对象存活判定算法、GC算法、STW、GC种类详解

    [JVM]对象存活判定算法.GC算法.STW.GC种类详解 文章目录 [JVM]对象存活判定算法.GC算法.STW.GC种类详解 GC主要关注的区域 垃圾标记阶段:对象存活判断 标记阶段:引用计数算法 ...

最新文章

  1. 空中交警:借你一双“慧眼”,让你看透这飞机的“黑色十分钟”
  2. Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)(转载)
  3. Android -- ViewGroup源码分析+自定义
  4. MySQL的show profile(已过时)简介以及该功能在MySQL 5.7中performance_schema中的替代
  5. 解决 django 中 mysql gone away 的问题
  6. studioone机架效果模板_studioone3机架效果包
  7. 离线w3school下载
  8. 1002:方便记忆的电话号码
  9. Mybatis起别名的方法
  10. 遭遇难题,走投无路到成功解决的心路历程 —— ORA12514:监听程序当前无法识别连接描述符中请求的服务
  11. 图像处理:Yxy、XYZ颜色空间介绍及RGB转换公式
  12. linux 之 Deamon进程
  13. 甲骨文数据库基本知识
  14. loadrunner11.0 安装 破解
  15. c++ std::exception,std::logic_error 异常的使用方法
  16. flash/flex基础发展区别等
  17. 注册Keil软件时出现TOOLS.INI_TOOLCHAIN NOT INSTALLED的解决办法
  18. 2023年Python面试题_Python进阶_48道
  19. OpenSSL 生成证书
  20. Hinton上榜!盘点AI图像合成10年史,那些值得被记住的论文和名字

热门文章

  1. 房地产企业项目管理的特点与目标
  2. Deep Learning for UAV-based Object Detection andTracking: A Survey(论文翻译)
  3. 【云片网】使用云片网发送注册短信验证码
  4. 测开之路三十三:Flask实现扎金花游戏
  5. 汤唯:在街头卖艺的那些日子
  6. 中国农业大学计算机研究生专业课,2020年中国农业大学计算机科学与技术考研经验分享...
  7. TIdTCPClient的几种方法
  8. Format函数详解
  9. 目前大多数计算机工作原理采用的是,计算机应用基础复习题2016有答案
  10. linux unison数据同步,linux下unison双向数据实时同步