N元马尔科夫链的实现
马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域。经过长期发展,尤其是在语音识别中的成功应用,使它成为一种通用的统计工具。
以下利用一篇英文演讲来实现简单得文字生成器,结果其实是一个胡言乱语得结果,但我们可以通过这个类型粗略理解机器学习,首先英文演讲文章的链接:http://pythonscraping.com/files/inaugurationSpeech.txt
以及我上一篇处理该文章的博客链接:http://www.cnblogs.com/ybf-yyj/p/7399149.html
以下以生成100个单词的马尔科夫链为例:
#-*- coding:utf-8 -*-
from urllib2 import urlopen
from random import randint #统计所有单词出现的次数总和
def wordListSum(wordList):
sum=0
for word,value in wordList.items():
print word,value
sum+=value
return sum def retrieveRandomWord(wordList):
#在1到所有单词出现总和之间选着一个数字,保证每次输出句子不一样
randIndex=randint(1,wordListSum(wordList))
#通过randIndex随机选择一个字母返回
for word,value in wordList.items():
randIndex-=value
if randIndex<=0:
return word def buildWordDic(text):
#清洗\n和 "
text=text.replace("\n"," ")
text=text.replace("\"","")
#保证标点符号和前面的单词在一起,不被剔除
punctuation=[',','.',';',':']
for symbol in punctuation:
text=text.replace(symbol," "+symbol+" ")
#切割文章
words=text.split(" ")
#除去空单词
words=[word for word in words if word !=""]
#定义一个总词典
wordDict={}
for i in range(1,len(words)):
#为新单词再创一个新词典
# 比如句子为:How do you do.
if words[i-1] not in wordDict:
#结果应该为:{'How':{},'do':{}}
wordDict[words[i-1]]={} #将下一个单词加入前一个单词的词典中
if words[i] not in wordDict[words[i - 1]]:
# 结果应该为:{'How':{'do':0},'do':{'you':0,'.':0}}
wordDict[words[i-1]][words[i]]=0
# 结果应该为:{'How':{'do':1},'do':{'you':1,'.':1}}
wordDict[words[i - 1]][words[i]]=wordDict[words[i-1]][words[i]]+1
return wordDict text=str(urlopen('http://pythonscraping.com/files/inaugurationSpeech.txt').read().decode('utf-8'))
wordDict=buildWordDic(text) length=100
chain=''
#随便选择一个单词开头
currentword='I'
for i in range(0,length):
chain +=currentword+' '
currentword=str(retrieveRandomWord(wordDict[currentword])) print(chain)
N元马尔科夫链的实现的更多相关文章
- 从随机过程到马尔科夫链蒙特卡洛方法(MCMC)
从随机过程到马尔科夫链蒙特卡洛方法 1. Introduction 第一次接触到 Markov Chain Monte Carlo (MCMC) 是在 theano 的 deep learning t ...
- 【HDOJ6229】Wandering Robots(马尔科夫链,set)
题意:给定一个n*n的地图,上面有k个障碍点不能走,有一个机器人从(0,0)出发,每次等概率的不动或者往上下左右没有障碍的地方走动,问走无限步后停在图的右下部的概率 n<=1e4,k<=1 ...
- 蒙特卡洛马尔科夫链(MCMC)
蒙特卡洛马尔科夫链(MCMC) 标签: 机器学习重要性采样MCMC蒙特卡洛 2016-12-30 20:34 3299人阅读 评论(0) 收藏 举报 分类: 数据挖掘与机器学习(41) 版权声明: ...
- MCMC(二)马尔科夫链
MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)M-H采样和Gibbs采样(待填坑) 在MCMC(一)蒙特卡罗方法中,我们讲到了如何用蒙特卡罗方法来随机模拟求解一些复杂的连续积分或 ...
- 《principles of model checking》中的离散时间马尔科夫链
<principles of model checking>中的离散时间马尔科夫链 说明:此文为我自学<principles of model checking>第十章内容的笔 ...
- 13张动图助你彻底看懂马尔科夫链、PCA和条件概率!
13张动图助你彻底看懂马尔科夫链.PCA和条件概率! https://mp.weixin.qq.com/s/ll2EX_Vyl6HA4qX07NyJbA [ 导读 ] 马尔科夫链.主成分分析以及条件概 ...
- 马尔科夫链蒙特卡洛(Markov chain Monte Carlo)
(学习这部分内容大约需要1.3小时) 摘要 马尔科夫链蒙特卡洛(Markov chain Monte Carlo, MCMC) 是一类近似采样算法. 它通过一条拥有稳态分布 \(p\) 的马尔科夫链对 ...
- Chapter 4 马尔科夫链
4.1 引言 现在要研究的是这样一种过程: 表示在时刻的值(或者状态),想对一串连续时刻的值,比如:,, ... 建立一个概率模型. 最简单的模型就是:假设都是独立的随机变量,但是通常这种假设都是没什 ...
- 【强化学习】MOVE37-Introduction(导论)/马尔科夫链/马尔科夫决策过程
写在前面的话:从今日起,我会边跟着硅谷大牛Siraj的MOVE 37系列课程学习Reinforcement Learning(强化学习算法),边更新这个系列.课程包含视频和文字,课堂笔记会按视频为单位 ...
随机推荐
- 知识点:定义input type=file 样式的方法(转)
——“当我们想要用css美化表单的时候,有两个控件就会和前段人员作对,一个是是大名鼎鼎的select,另一个就是我现在要说说的 input type=file” 为什么要美化file控件?试想一下,别 ...
- Java理论学时第六节。课后作业。
package Fuction; class Grandparent { public Grandparent() { System.out.println("GrandParent Cre ...
- JavaScript常用事件参考
onabort 图像加载被中断 onblur 元素失去焦点 onchange 用户改变域的内容 onclick 鼠标点击某个对象 ondblclick 鼠标双击某个对象 onerror 当加载文档 ...
- java基础-day18
第07天 集合 今日内容介绍 u HashSet集合 u HashMap集合 第1章 HashSet集合 1.1 Set接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一 ...
- VS中的调试相关的技巧
1. 可以设置断点的命中条件:
- hdu 4940 数据太水...
http://acm.hdu.edu.cn/showproblem.php?pid=4940 给出一个有向强连通图,每条边有两个值分别是破坏该边的代价和把该边建成无向边的代价(建立无向边的前提是删除该 ...
- AngularJS 表单数据验证及错误信息提示
一.表单验证基本原理 表单验证包括两个主题: 定义验证规则,验证数据有效性. 显示验证结果,把验证结果以友好的方式显示给用户. H5内置一些验证功能,并会显示内置的错误提示信息,先要禁用它,在< ...
- cxgrid动态创建列
cxgrid动态创建列 procedure TFrmRuleEdit.CreateCols;varColumn: TcxGridDBColumn;begincdsPowerPrj.First;whil ...
- 用指定的用户名和密码无法登录到该ftp服务器
今天在win2008 R2 服务器上默认部署FTP站点时遇到了两个小问题,在网上找了好久资料后发现还是解决不了问题,最终找到问题的原因,在此共享给大家 1.Windows无法访问此文件夹.请确保输入的 ...
- Swagger ui测试中的验证 apikey
Swagger ui测试中的验证 apikey 我们使用swagger 用来呈现webapi的接口,除了可以看到接口的说明和参数说明,还可以进行测试.但是我们的接口通常是有验证的,不是随便就能调用的, ...