马尔可夫模型日记——如何模拟真正的概率系统

今天看了一个马尔可夫模型的应用:文本的分析与写作。主要的功能是:对一篇演讲(英文)作为数据集,写出一段固定字数的文本,即演讲内容的结构生成任意长度的马尔可夫链组成的句子。
可能是算法太简单,并不能写出什么有逻辑的句子,全是些胡言乱语,看起来像硬性拼凑的话。不过其中有一个算法我倒是觉得很值得学习,这个算法的功能是:
利用随机数模拟真实的环境发生系统,即已知一系列独立事件的发生概率,比如 A:15%,B:20%,C:11%,D:3%,E:42%,F:9%;在其中选出一个事件,该事件被选中的概率和事情发生的概率相同,模拟真正的概率系统,概率越高,被选中的概率越高。
先贴代码:

from random import randint

def retrieveItem(dicts):
    #计算事件发生的概率和
    sum = 0
    for key,value in dicts.items():
        sum +=value*100

    #随机生成一个数,在1~sum之间
    randIndex = randint(1,sum)
    for key,value in dicts.items():
        randIndex -=value
        if randIndex <= 0:
            return key

私以为,这段代码太神奇了!如果是单纯的使用随机数来挑选abcdef中的一个的话,概率就是计算机说了算,而不是我们输入的概率说了算。
这段代码的核心在于

randIndex -=value

算出概率和之后,随机产生一个数,然后减去各个事件发生的概率,直至减为0或负值,返回当前的事件。
(不是数学系毕业,也描述不清楚,后面好好学习,想一想怎么才能描述清楚。)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值