前向算法Python实现
前言
这里的前向算法与神经网络里的前向传播算法没有任何联系。。。这里的前向算法是自然语言处理领域隐马尔可夫模型第一个基本问题的算法。
前向算法是什么?
这里用一个海藻的例子来描述前向算法是什么。网上有关于前向算法的严格数学推导,不过感觉还是海藻的例子比较好一些。网上的例子有很多都是有问题的,在本文中也都进行了相应的修正。
状态转移矩阵
相关性矩阵
初始状态序列:Sunny(0.63),Cloudy(0.17),Rainy(0.20)
我们想要求一个观察序列{Dry, Damp, Soggy}的概率。
具体怎么求这个概率,数学上有严格的推导流程,这里不再进行阐述,这里仅针对前向算法进行阐述。
前向算法的Python实现
前向算法的问题尽管看起来和维特比算法解决的问题不太一样,但是套路实际上是完全相同的。
首先可以利用numpy将数据加入到python代码中
import numpy as np
# 前向算法
tran = np.array([[0.5, 0.375, 0.125],
[0.25, 0.125, 0.625],
[0.25, 0.375, 0.375]])
laun = np.array([[0.6, 0.2, 0.15, 0.05],
[0.25, 0.25, 0.25, 0.25],
[0.05, 0.1, 0.35, 0.5]])
init = np.array([0.63, 0.17, 0.2])
look = np.array([0, 2, 3]) # 观测序列
kind = ['Sunny', 'Cloudy', 'Rainy']
P(第一天海藻状态为0&晴天)=P(海藻状态为0|晴天)P(晴天|初始状态)
这样的话,便可以把第一天海藻状态为0的情况下,晴天、多云、雨天的概率都算出来。
P(第二天海藻状态为2&晴天)=(P(第一天海藻状态为0|晴天)P(今天晴天|前一天为晴天)+P(第一天海藻状态为0|雨天)P(今天晴天|前一天为雨天)+P(第一天海藻状态为0|阴天)P(今天晴天|前一天为阴天))*P(海藻为2|晴天)
这个算是用python代码写下来的话如下所示:
dp[j] = sum(np.array([a * b for a, b in zip(temp, tran[:,j])]))*laun[j,look[i]]
完整代码如下:
dp = np.array([a * b for a, b in zip(init, laun[:, look[0]])])
for i in range(1,3):
temp = np.copy(dp)
for j in range(3):
dp[j] = sum(np.array([a * b for a, b in zip(temp, tran[:,j])]))*laun[j,look[i]]
print(sum(dp))
可以发现,这段代码与维特比算法的代码基本完全相同,只不过最后利用的方式不同,维特比算法是求出了最大的dp值,然后就得到了对应的最大可能的隐藏序列。而求和的话,则可以得到对应的标记序列的出现可能性。
前向算法Python实现的更多相关文章
- 2016年GitHub排名前20的Python机器学习开源项目(转)
当今时代,开源是创新和技术快速发展的核心.本文来自 KDnuggets 的年度盘点,介绍了 2016 年排名前 20 的 Python 机器学习开源项目,在介绍的同时也会做一些有趣的分析以及谈一谈它们 ...
- kmp算法python实现
kmp算法python实现 kmp算法 kmp算法用于字符串的模式匹配,也就是找到模式字符串在目标字符串的第一次出现的位置比如abababc那么bab在其位置1处,bc在其位置5处我们首先想到的最简单 ...
- KMP算法-Python版
KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...
- HMM 自学教程(五)前向算法
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- pageRank算法 python实现
一.什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO( ...
- 常见排序算法-Python实现
常见排序算法-Python实现 python 排序 算法 1.二分法 python 32行 right = length- : ] ): test_list = [,,,,,, ...
- HMM:隐马尔科夫模型-前向算法
http://blog.csdn.net/pipisorry/article/details/50722376 目标-解决HMM的基本问题之一:已知HMM模型λ及观察序列O,如何计算P(O|λ)(计算 ...
- HMM模型学习笔记(前向算法实例)
HMM算法想必大家已经听说了好多次了,完全看公式一头雾水.但是HMM的基本理论其实很简单.因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察 ...
- HMM条件下的 前向算法 和 维特比解码
一.隐马尔科夫HMM如果: 有且仅仅有3种天气:0晴天.1阴天.2雨天 各种天气间的隔天转化概率mp: mp[3][3] 晴天 阴天 雨天 晴天 0.33333 0.33333 0.33333 阴天 ...
随机推荐
- 正则表达式(二):Unicode诸问题上篇(转)
原文:http://www.infoq.com/cn/news/2011/02/regular-expressions-unicode 关于正则表达式的文档很多,但大部分都是英文的,即便有中文的文档, ...
- windows上apache是线程处理请求,linux上apache是进程处理请求
windows上apache是线程处理请求,linux上apache是进程处理请求
- UVA 11136 Hoax or what (multiset)
题目大意: 超时进行促销.把账单放入一个箱子里 每次拿取数额最大的和最小的,给出 最大-最小 的钱. 问n天总共要给出多少钱. 思路分析: multiset 上直接进行模拟 注意要使用long lo ...
- Iterator源码解读
//继承关系 public interface Inteator { boolean hasNext(); Object next(); } public interface Iterable { I ...
- PAT Radix[二分][进制转换][难]
1010 Radix (25)(25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 ...
- centos7 设置 静态IP
centos7 图形设置 yum install NetworkManager-tui #centos7 nmtui edit eth0 #图形设置ip systemctl restart netwo ...
- notification 是同步的
所有notification的观察者执行之后,post notification的函数才会往下执行.
- pythonon ddt数据驱动二(json, yaml 驱动)
这一篇主要是关于文件的数据驱动. 一.通过json文件驱动 @ddt class MyTest(unittest.TestCase): @file_data('test_data_list.json' ...
- 使用TreeView加载XML文件
PS: 由于小弟初学编程,本文只写实现方式,代码写的不是很好请见谅! 1.需要读取的xml文档内容 2. 最终实现效果 3 貌似看起实现起来很复杂 但是想想还是挺简单 思路: 读取XML文档 →获 ...
- NPOI 导出excel 分表
/// <summary> /// 由DataTable导出Excel[超出65536自动分表] /// </summary> /// <param name=" ...