如何在Python中实现这五类最强大五阶魔方拆装的概率分布

3439人阅读
python(22)
背景:类似于掷硬币的实验,这里设计了一个类似的实验,加入有10道选择题,可以选择A,B,C,D4个选项,每次实验计算1万组随机答案,做100次实验。程序如下:import&randomclass&examModel(object):&&&&&&&&&&&&def&__init__(self,&outputFileName='out.txt'):&&&&&&&&self.rightAnswer&=&self._getAnswer()&&&&&&&&self.checkAnswers&=&[&self._getAnswer()&for&i&in&range(10000)&]&&&&&&&&self.outputFileName&=&outputFileName&&&&&&&&&&&&def&_getAnswer(self):&&&&&&&&&&&&&&&&random.seed()&&&&&&&&answer&=&[&random.choice(['A','B','C','D'])&for&i&in&range(10)&]&&&&&&&&return(answer)&&&&&&&&def&checkAnswer(self):&&&&&&&&&&&&&&&&&&&&&&&&mnpp&=&[&0&]*11&&&&&&&&&&&&&&&&&&&&&&&&for&answer&in&self.checkAnswers:&&&&&&&&&&&&score&=&self._getScore(answer)&&&&&&&&&&&&index&=&int(score/10)&&&&&&&&&&&&mnpp[index]&+=&1&&&&&&&&&&&&&&&&&&&&&&&&f&=&open(self.outputFileName,'w')&&&&&&&&&&&&&&&&f.write('频率结果:')&&&&&&&&f.write(str(mnpp))&&&&&&&&f.write('/n')&&&&&&&&&&&&&&&&f.write('正确答案:')&&&&&&&&f.write(str(self.rightAnswer))&&&&&&&&f.write('/n')&&&&&&&&&&&&&&&&f.write('随机答案:')&&&&&&&&f.write(str(self.checkAnswers))&&&&&&&&f.write('/n')&&&&&&&&&&&&&&&&f.close()&&&&&&&&&&&&&&&&print(self.outputFileName)&&&&&&&&&&&&&&&&return(mnpp)&&&&&&&&&&&&def&_getScore(self,answer):&&&&&&&&&&&&&&&&score&=&0&&&&&&&&for&i&in&range(len(answer)):&&&&&&&&&&&&if&ord(answer[i])&==&ord(self.rightAnswer[i]):&&&&&&&&&&&&&&&&score&+=&10&&&&&&&&return(score)&&&&&&&&if&__name__&==&'__main__':&&&&mnpps&=&[]&&&&for&i&in&range(100):&&&&&&&&model&=&examModel('exam'&+&str(i)&+&'.txt')&&&&&&&&mnpp&=&model.checkAnswer()&&&&&&&&mnpps.append(mnpp)&&&&&&&&&&&&mnpp&=&[0]*11&&&&for&mnpp_i&in&mnpps:&&&&&&&&for&j&in&range(len(mnpp_i)):&&&&&&&&&&&&mnpp[j]&+=&mnpp_i[j]&&&&&&&&&r_mnpp&=&[&i/sum(mnpp)&for&i&in&mnpp&]&&&&&&&&&&&&f&=&open('exam_model.txt','w')&&&&&&&&f.write('频数分布:')&&&&f.write(str(mnpp))&&&&f.write('/n')&&&&&&&&f.write('频率分布:')&&&&f.write(str(r_mnpp))&&&&f.write('/n')&&&&&&&&f.write('每次随机检验的频率分布:')&&&&f.write(str(mnpps))&&&&f.write('/n')&&&&&&&&&&f.close()结论:频率分布为[0.7,0.5,0.2,0.2,0.0,0.0000]频数分布为[5, , 5, , 35, 1]意义是采用完全随机的方法,得90分、100分是几乎不可能的,即使及格的机会也仅仅为2%,太难了。所以如果没有其他因素,比如对某些选项进行排除之类的,考试的时候千万不要采用这种方法。另外,采用完全随机的方法很容易看出来,得30、40分的可能性最大,即你大概有30%,40%的几率“蒙”对,如果实在没办法,嘿嘿,不妨试试。另外,学过数论的都知道,根据二项分布很容易找出结果,得0分-100分的概率分别为:[0.056,0.188,0.282,0.250,0.146,0.058,0.016,0.003,0.000,0.000,0.000]模拟实验的结果很好。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:187340次
积分:2448
积分:2448
排名:第15134名
原创:61篇
评论:31条
(14)(18)(8)(31)(3)如何在Python中实现这五类强大的概率分布 - Python - 伯乐在线
& 如何在Python中实现这五类强大的概率分布
R编程语言已经成为统计分析中的事实标准。但在这篇文章中,我将告诉你在Python中实现统计学概念会是如此容易。我要使用Python实现一些离散和连续的概率分布。虽然我不会讨论这些分布的数学细节,但我会以链接的方式给你一些学习这些统计学概念的好资料。在讨论这些概率分布之前,我想简单说说什么是。随机变量是对一次试验结果的量化。
举个例子,一个表示抛硬币结果的随机变量可以表示成
X = {1 如果正面朝上,
2 如果反面朝上}
X = {1 如果正面朝上,&&&& 2 如果反面朝上}
随机变量是一个变量,它取值于一组可能的值(离散或连续的),并服从某种随机性。随机变量的每个可能取值的都与一个概率相关联。随机变量的所有可能取值和与之相关联的概率就被称为。
我鼓励大家仔细研究一下模块。
概率分布有两种类型:离散(discrete)概率分布和连续(continuous)概率分布。
离散概率分布也称为。离散概率分布的例子有伯努利分布(Bernoulli distribution)、二项分布(binomial distribution)、泊松分布(Poisson distribution)和几何分布(geometric distribution)等。
连续概率分布也称为,它们是具有连续取值(例如一条实线上的值)的函数。正态分布(normal distribution)、指数分布(exponential distribution)和β分布(beta distribution)等都属于连续概率分布。
若想了解更多关于离散和连续随机变量的知识,你可以观看可汗学院关于概率分布的。
二项分布(Binomial Distribution)
服从二项分布的随机变量X表示在n个独立的是/非试验中成功的次数,其中每次试验的成功概率为p。
E(X) = np, Var(X) = np(1-p)
如果你想知道每个函数的原理,你可以在IPython笔记本中使用help file命令。 E(X)表示分布的期望或平均值。
键入stats.binom?了解二项分布函数binom的更多信息。
二项分布的例子:抛掷10次硬币,恰好两次正面朝上的概率是多少?
假设在该试验中正面朝上的概率为0.3,这意味着平均来说,我们可以期待有3次是硬币正面朝上的。我定义掷硬币的所有可能结果为:你可能观测到0次正面朝上、1次正面朝上,一直到10次正面朝上。我使用计算每次观测的概率质量函数。它返回一个含有11个元素的列表(list),这些元素表示与每个观测相关联的概率值。
您可以使用.rvs函数模拟一个二项随机变量,其中参数size指定你要进行模拟的次数。我让Python返回10000个参数为n和p的二项式随机变量。我将输出这些随机变量的平均值和标准差,然后画出所有的随机变量的直方图。
泊松分布(Poisson Distribution)
一个服从的随机变量X,表示在具有比率参数(rate parameter)λ的一段固定时间间隔内,事件发生的次数。参数λ告诉你该事件发生的比率。随机变量X的平均值和方差都是λ。
E(X) = λ, Var(X) = λ
泊松分布的例子:已知某路口发生事故的比率是每天2次,那么在此处一天内发生4次事故的概率是多少?
让我们考虑这个平均每天发生2起事故的例子。泊松分布的实现和二项分布有些类似,在泊松分布中我们需要指定比率参数。泊松分布的输出是一个数列,包含了发生0次、1次、2次,直到10次事故的概率。我用结果生成了以下图片。
你可以看到,事故次数的峰值在均值附近。平均来说,你可以预计事件发生的次数为λ。尝试不同的λ和n的值,然后看看分布的形状是怎么变化的。
现在我来模拟1000个服从泊松分布的随机变量。
正态分布(Normal Distribution)
是一种连续分布,其函数可以在实线上的任何地方取值。正态分布由两个参数描述:分布的平均值μ和方差σ2 。
E(X) = μ, Var(X) = σ2
正态分布的取值可以从负无穷到正无穷。你可以注意到,我用stats.norm.pdf得到正态分布的概率密度函数。
β分布(Beta Distribution)
β分布是一个取值在 [0, 1] 之间的连续分布,它由两个形态参数α和β的取值所刻画。
β分布的形状取决于α和β的值。贝叶斯分析中大量使用了β分布。
当你将参数α和β都设置为1时,该分布又被称为均匀分布(uniform distribution)。尝试不同的α和β取值,看看分布的形状是如何变化的。
指数分布(Exponential Distribution)
指数分布是一种连续概率分布,用于表示独立随机事件发生的时间间隔。比如旅客进入机场的时间间隔、打进客服中心电话的时间间隔、中文维基百科新条目出现的时间间隔等等。
我将参数λ设置为0.5,并将x的取值范围设置为 $[0, 15]$ 。
接着,我在指数分布下模拟1000个随机变量。scale参数表示λ的倒数。函数np.std中,参数ddof等于标准偏差除以 $n-1$ 的值。
结语(Conclusion)
概率分布就像盖房子的蓝图,而随机变量是对试验事件的总结。我建议你去看看的讲座,Joe Blitzstein教授给了一份摘要,包含了你所需要了解的关于统计模型和分布的全部。
关于作者:
可能感兴趣的话题
o 247 回复
关于 Python 频道
Python频道分享 Python 开发技术、相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线

我要回帖

更多关于 比三皇五帝更强大的 的文章

 

随机推荐