Python怎么实现中心极限定律(python,移动开发)

时间:2024-05-02 15:04:21 作者 : 石家庄SEO 分类 : 移动开发
  • TAG :

在整个概率论中,核心的问题是随机变量的分布。正如我们在离散分布和连续分布中看到的,分布有许多种类。更夸张的是,在满足概率公理的前提下,我们完全可以自行设计分布。想像一下,如果有一天数学书上印一个Vamei分布,这是多么美好的事情啊!然而,这一愿望并不那么容易实现。那些“名流”分布,比如“泊松”,“高斯”,“伯努利”分布,往往在理论上很重要,所以得到了数学家的深入研究。“知名”分布的特性(比如它们的期望、方差、累计概率函数)可以很容易在数学手册中找到,这些研究成果也成为概率论“军火库”的重要部分。

另一方面,概率分布是否存在什么共性呢?我们的许多结论都是依赖于分布的具体类型。对于一个分布成立的结论,对于另一种分布可能并不成立。一个对任意分布都成立的结论可以大大简化我们的研究。这在自然科学和社会科学的研究中异常重要。在这些学科的研究中有许多随机变量。比如说,为了研究金矿,往往需要知道石头中含金量X的概率分布。然而,这些随机变量的分布类型不可能提前获知 (甚至于永远不能准确的知道)。这样的话,整个研究就被停在了第一步。如果我们可以得出一个对任意分布都成立的结论,那么我们就可以沿着这个结论继续进行下去。

自然有时候比我们想像的慷慨,它给出了一个概率论中相当核心的一组定律:中心极限定律(central limit theorem)。这组定律不但对于任意分布都成立,还特别提示我们:要特别注意正态分布。我们下面看看,中心极限定律是如何说的。

中心极限定律

先来看中心极限定律的一个版本:

随机变量X1,X2,...,XnX1,X2,...,Xn是相互独立的随机变量,并有相同的分布(IID, independent and identically distributed)。分布的期望为μμ,方差为σ2σ2,μ,σμ,σ都为有限值,且σ≠0σ≠0。这些随机变量的均值为X¯=1n∑ni=1XiX¯=1n∑i=1nXi。让ζn=X¯−μσ/n√ζn=X¯−μσ/n,那么

limn→∞P(ζn≤z)=Φ(z)limn→∞P(ζn≤z)=Φ(z)

其中Φ(z)Φ(z)是标准正态分布的分布函数。

简单来说,我们寻找n个IID随机变量的均值X¯X¯。当n趋进无穷时,这个均值(一个新的随机变量)趋近一个正态分布。

(通过ζnζn的变换,可以从正态分布的X¯X¯导出标准正态分布ζnζn。)

演示中心极限定律

我们下面取n个IID随机变量,让它们都符合λ=1λ=1的指数分布,并观察它们均值的分布状况。为了观察它们的分布,我们使用随机数生成器,来进行10000次采样。即进行100000次实验,每次实验获得一组随机变量的取值,得到一个均值。总共获得10000个均值。绘制均值分布的直方图。

分三种情况,分别让n等于1,20, 100:

Python怎么实现中心极限定律

在第一种情况下,X¯=X1/1=X1X¯=X1/1=X1,即X¯X¯本身是指数分布。

在第二、三种情况下,均值的分布越来越偏离一个指数分布,分布的形状不断趋近于一个正态分布。

代码如下:

#ByVamei#CentralLimitTheory#Xisexponentialdistributionwithlambda=1importmatplotlib.pyplotaspltimportnumpyasnpfromscipy.statsimportexpon#Getonesampleof(X1+X2+...+XN)/Ndefsample_mean(N):#exponentialdistribution,withlambda=1one_sample=expon.rvs(scale=1,size=N)returnone_sample.mean()#IncreaseN:1,20,1000.#DemoofCentralLimitTheoryinhistogramplt.figure(figsize=(12,4))forN,subpinzip([1,20,1000],[131,132,133]):#generatesamplesall_means=np.array([sample_mean(N)foriinrange(10000)])#plotfigureplt.subplot(subp)plt.hist(all_means,bins=100,color="blue")plt.title('CentralLimitTheoryn=%i'%N)plt.xlabel('samplemeans')plt.ylabel('Frequency')plt.tight_layout()plt.savefig('./central_limit.png',dpi=None,facecolor='w')

练习:这段代码检验的是指数分布的均值。可以改写成检验其它分布是否符合中心极限定律,比如均匀分布的均值。

证明

我将使用矩生成函数来证明上面的定律。假设Xi−μXi−μ的矩生成函数为M(t)M(t)。因此,M′(t)=μ,M(2)(t)=σ2M′(t)=μ,M(2)(t)=σ2。

当n趋近无穷时,t/(σn−−√)t/(σn)趋近0。M(t)可以展开为:

M(t)=1+12σ2t2+o(t2)M(t)=1+12σ2t2+o(t2)

o(t2)o(t2)表示比t2t2更高阶的t的乘方。

根据矩生成函数的性质,ζnζn的矩生成函数写为

Mζn=[M(tσn−−√)]n=(1+t22n+o(t2/n))nMζn=[M(tσn)]n=(1+t22n+o(t2/n))n

o(t2/n)o(t2/n)表示,当n趋于无穷时,早于t2/nt2/n消失的项。

(根据微积分,证明从略):当n趋近于无穷时,上面的表达式趋近:

Mζn(t)→et2/2Mζn(t)→et2/2

这正是标准正态分布的矩生成函数。因此ZnZn的分布趋近于标准正态分布。

上面介绍的中心极限定律有一个先决条件,即产生均值的N个随机变量为IID(独立、同分布)随机变量。在其它的版本的中心极限定律中,各个随机变量可以不完全独立。事实上,中心极限定律是一个还在积极研究中的领域。

花边

中心极限定律的原型可以追溯到18世纪de Moivre的研究。他经过实验发现,大量正面抛硬币的话,结果(1:正面,0:反面)的均值是一个正态分布。这里,de Moivre研究的分布是多个伯努利分布的随机变量的均值。

Python怎么实现中心极限定律

硬币投掷:均值的分布

(想像一下,当时没有计算机,更别说随机数生成器了。为了检验结果,de Moivre真的投了几千次硬币…… 数学家是很神奇的动物)

为了更加直观的理解中心极限定律的结果。我们来设想一下,如果一个大米缸中混装了黑白两种米,各占一半。从中随便抓一把,这一把中有n个米粒。如果n比较小的话,那么很有可能出现一些极端值,比如n = 3,出现三个纯白的米粒。但是,如果“一把”很大,比如1000颗米粒,那么出现1000个米都是白色的概率很小,而白米和黑米一半一半的概率很大,也就是一个类似于正态分布的分布方式。

我们可以将中心极限定律方便的用于许多统计问题。需要注意的是,中心极限定律要求n趋近无穷。在实际应用中,我们往往让n等于一个“足够”大的数,比如上面的1000。这个数字是否足够大呢?这取决于X是什么样的分布。对于某些分布来说,均值分布趋近于正态分布的速度很慢,这要求我们采用更大的n值。

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Python怎么实现中心极限定律的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Python矩与矩生成函数是什么下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18