今天看了一个马尔可夫模型的应用:文本的分析与写作。主要的功能是:对一篇演讲(英文)作为数据集,写出一段固定字数的文本,即演讲内容的结构生成任意长度的马尔可夫链组成的句子。
可能是算法太简单,并不能写出什么有逻辑的句子,全是些胡言乱语,看起来像硬性拼凑的话。不过其中有一个算法我倒是觉得很值得学习,这个算法的功能是:
利用随机数模拟真实的环境发生系统,即已知一系列独立事件的发生概率,比如 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或负值,返回当前的事件。
(不是数学系毕业,也描述不清楚,后面好好学习,想一想怎么才能描述清楚。)