hmm 流程图_算法:HMM模型+维特比算法详解
一、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模型+维特比算法详解相关推荐
- 全排列 流程图_[分享]给排水工程全流程施工详解,看看精品工程是怎样施工的!...
给排水工程是机电安装五大分部之一,也是贯穿建筑工程施工全过程的重要内容,本文是基于工程实例对给排水施工工艺的全流程解读,可供大家参考实施! ----------多图预警分割线,流量党慎滑------- ...
- EM算法(Expectation Maximization Algorithm)详解
EM算法(Expectation Maximization Algorithm)详解 主要内容 EM算法简介 预备知识 极大似然估计 Jensen不等式 EM算法详解 问题描述 EM算法推导 EM ...
- 大白话解析Apriori算法python实现(含源代码详解)
大白话解析Apriori算法python实现(含源代码详解) 一.专业名词解释 二.算法思路 三.python代码实现 四.Aprioir的优点.缺点及改进方法 本文为博主原创文章,转载请注明出处,并 ...
- JAVA中希尔排序去的讲解_java 中基本算法之希尔排序的实例详解
java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shel ...
- python符号格式化设置区间_Python 数值区间处理_对interval 库的快速入门详解
使用 Python 进行数据处理的时候,常常会遇到判断一个数是否在一个区间内的操作.我们可以使用 if else 进行判断,但是,既然使用了 Python,那我们当然是想找一下有没有现成的轮子可以用. ...
- Java内存模型(JMM)详解-可见性volatile
这里写自定义目录标题 Java内存模型(JMM)详解-可见性 什么是JMM JMM存在的意义 为什么示例demo中不会打印 i 的值 如何解决可见性问题 **深入理解JMM内存模型** JAVA内存模 ...
- 从零开始学前端 - 7. CSS盒模型 margin和padding详解
作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正.转载请附带作者信息 ...
- 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解
题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...
- 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解 - 未完善
题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...
- 【JVM】对象存活判定算法、GC算法、STW、GC种类详解
[JVM]对象存活判定算法.GC算法.STW.GC种类详解 文章目录 [JVM]对象存活判定算法.GC算法.STW.GC种类详解 GC主要关注的区域 垃圾标记阶段:对象存活判断 标记阶段:引用计数算法 ...
最新文章
- 空中交警:借你一双“慧眼”,让你看透这飞机的“黑色十分钟”
- Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)(转载)
- Android -- ViewGroup源码分析+自定义
- MySQL的show profile(已过时)简介以及该功能在MySQL 5.7中performance_schema中的替代
- 解决 django 中 mysql gone away 的问题
- studioone机架效果模板_studioone3机架效果包
- 离线w3school下载
- 1002:方便记忆的电话号码
- Mybatis起别名的方法
- 遭遇难题,走投无路到成功解决的心路历程 —— ORA12514:监听程序当前无法识别连接描述符中请求的服务
- 图像处理:Yxy、XYZ颜色空间介绍及RGB转换公式
- linux 之 Deamon进程
- 甲骨文数据库基本知识
- loadrunner11.0 安装 破解
- c++ std::exception,std::logic_error 异常的使用方法
- flash/flex基础发展区别等
- 注册Keil软件时出现TOOLS.INI_TOOLCHAIN NOT INSTALLED的解决办法
- 2023年Python面试题_Python进阶_48道
- OpenSSL 生成证书
- Hinton上榜!盘点AI图像合成10年史,那些值得被记住的论文和名字
热门文章
- 房地产企业项目管理的特点与目标
- Deep Learning for UAV-based Object Detection andTracking: A Survey(论文翻译)
- 【云片网】使用云片网发送注册短信验证码
- 测开之路三十三:Flask实现扎金花游戏
- 汤唯:在街头卖艺的那些日子
- 中国农业大学计算机研究生专业课,2020年中国农业大学计算机科学与技术考研经验分享...
- TIdTCPClient的几种方法
- Format函数详解
- 目前大多数计算机工作原理采用的是,计算机应用基础复习题2016有答案
- linux unison数据同步,linux下unison双向数据实时同步