Python怎么实现中心极限定律

这篇文章主要讲解了“Python怎么实现中心极限定律”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么实现中心极限定律”吧!

在整个概率论中,核心的问题是随机变量的分布。正如我们在 离散分布和 连续分布中看到的,分布有许多种类。更夸张的是,在满足 概率公理的前提下,我们完全可以自行设计分布。想像一下,如果有一天数学书上印一个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怎么实现中心极限定律  python v2ray机场 第1张

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

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

代码如下:

# By Vamei # Central Limit Theory # X is exponential distribution with lambda = 1 import matplotlib.pyplot as pltimport numpy as npfrom scipy.stats import expon# Get one sample of (X1 + X2 + ... + XN)/N def sample_mean(N):    # exponential distribution, with lambda = 1 
    one_sample = expon.rvs(scale = 1, size = N)    return one_sample.mean()# Increase N: 1, 20 , 1000. # Demo of Central Limit Theory in histogramplt.figure(figsize=(12, 4))for N, subp in zip([1, 20, 1000], [131, 132, 133]):    # generate samples 
    all_means = np.array([sample_mean(N) for i in range(10000)])    # plot figure    plt.subplot(subp)
    plt.hist(all_means,bins=100,color="blue")
    plt.title('Central Limit Theory n=%i' % N)
    plt.xlabel('sample means')
    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怎么实现中心极限定律  python v2ray机场 第2张

硬币投掷:均值的分布

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

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

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

感谢各位的阅读,以上就是“Python怎么实现中心极限定律”的内容了,经过本文的学习后,相信大家对Python怎么实现中心极限定律这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是蜗牛博客,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论电报频道链接