心得经验总结:概率统计18——再看大数定律

简介: 心得经验总结:概率统计18——再看大数定律

  在对不了解概率的人解释期望时,我总是敷衍地将期望解释为均值。这种敷衍的说法之所以行得通,正是由于大数定律起了作用。

  人们在实践中发现,尽管每个随机变量的取值不同,但当随机变量大量出现时,它们的均值却相对恒定,这个规律就是大数定律。

一个公平的骰子

  我们有一个公平的骰子,每个点数出现的概率都是1/6,如果只投掷一次,完全无法预测它的点数,但是如果把连续投掷20次看作一次试验,却发现每次试验的点数的均值总是在3.5附近徘徊。每次试验投掷的次数越多,点数的均值越稳定。

import numpy as np

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10, 5))

plt.subplots_adjust(hspace=0.5, wspace=0.3)

m = 100 # 试验的次数

for i in range(1, 5):

n = 2 10 i # 每次试验投掷n次骰子

mean_list = 【np.random.randint(1, 7, n).mean() for i in range(1, m + 1)】 # 每次试验的均值

ax = fig.add_subplot(2, 2, i)

ax.plot(list(range(1, m + 1)), mean_list, label='均值')

plt.yticks(list(range(0, 7))) # 重置y轴的坐标

ax.set_xlabel('试验次数')

ax.set_ylabel('均值')

ax.set_title('每次试验投{}次骰子'.format(n))

ax.legend(loc='upper right')

plt.rcParams【'font.sans-serif'】 = 【'SimHei'】 # 用来正常显示中文标签

plt.show()

均值的期望和均值的方差

  我们用随机变量X1表示第一次投骰子的结果,X2表示第二次……,一个公平的骰子可以得到下面的结论:

  连续投掷后将形成一个随机变量序列{ X1, X2, ……, Xn},这个序列的均值是:

  序列中的每个变量都是随机的,因此它们的和及均值也是随机的,也就是说然是随机的。以n=20为例:

  而均值的期望则不同:

  每次掷骰子的结果都是独立同分布的,它们有相同的期望和方差。用μ和σ2表示随机变量的期望和方差,于是我们得到了均值的期望:

  均值的期望等于整体的期望,是一个定值。对于公平的骰子来说,整体的期望与整体的均值相等。

  均值的方差是:

辛钦大数定律和伯努利大数定律

  n个样本均值的方差是总体方差的1/n,随着n的增大,该方差也越来越小,逐渐趋近于0。方差为0表示随机变量相对于的波动0,即不含随机性。换句话说,随着n的增大,样本的均值逐渐收敛于μ,这就是所谓的大数定律。这回有意思了,随着n的增大,作为均值的随机变量居然逐渐变得不含随机性。

  这里的大数定律也称为辛钦大数定律或弱大数定律。抄一下教科书上的定义:

  设随机变量X1, X2, …, Xn,…相互独立,服从同一分布且具有数学期望E(Xk)=μ(k=1,2,…),则序列 依概率收敛于μ,即。

  样本均值的标准差是,标准差表示随机变量与总体之间的差异度。想要把差异度缩减10倍,那么n的数量要增加102倍。

  伯努利大数定律是辛钦大数定律的一个重要推论。

  设fA是n次独立重复试验中事件A发生的次数,p是事件A在每次试验中发生的概率,则对于任意正数ε > 0,有:

  别被定义唬住了,它想解释的问题很简单:当n足够大时,fA/n与P的差值趋近于0,也就是频率趋近于概率,这也是我们用比例估计作为点估计量的基础。在实际问题中,当试验次数很大时,便可以用事件的频率来代替事件的概率。

  其实辛钦大数定律也可以用①的方式表示:

  对于概率的符号,有时候有大括号,有时候用小括号,这个还是别太纠结,实际上没什么区别,用大括号只是为了强调事件是一个集合。

不存在的期望

  大数定律并不是对所有问题都生效,比如在不存在期望的情况下。

  现在我们把骰子换成一枚公平的//代码效果参考:http://www.zidongmutanji.com/zsjx/354571.html

硬币,参加一个关于硬币第几次正面朝上的游戏。把随机变量X=x看作在第x次投硬币时会得到第1次正面朝上的结果:

  如果第1次就得到正面朝上的结果(X=1),得2分

  如果第2次才得到正面朝上的结果(X=2),得4分

  如果第3次才得到正面朝上的结果(X=3),得8分

  ……

  如果第n次才得到正面朝上的结果(X=n),得2n分

  现在我们需要计算得分Y=2X的期望。显然X符合几何分布,每个X又和Y一一对应,因此Y出现的概率等同于X出现的概率:

  这个期望是发散的,即没法得出具体的数值,也没法求极限,E【Y】=∞表示不存在期望。

蒙特卡罗积分法

  假设我们遇到了一个难以计算的积分:

  包括换元法、三角替换、分部积分在内的各种方法都无济于事,此时可以求助于暴力的大数定律。

  我们知道积分的几何意义是曲线与x轴围成的面积:

  曲线f(x)把矩形分割成两部分,U是曲线上方的面积,L是阴影部分的面积,R是整个矩形的面积,是已知量。现在我从们这个矩形内随机选择一点ri=(x, y),那么根据几何概型,这个点落入L中的概率是L/R。既然积分的是在计算面积L,我们就可以借助积分对落在L中的某一点的概率进行精确的表达:

  上式同时附带得出积分的结果:

  R是已知量,只要求得p,就能得到积分的结果。于是积分问题变成了概率问题。

  现在让每个随机点ri都对应一个随机变量Xi,Xi满足下面的特性:

  每个随机变量的期望是:

  将大数定律应用于Xi上,当n→∞时,Xi的均值依概率收敛于p,即:

  n是落在矩形中的随机点的数量,如果随机点落在L中,Xi=1,否则Xi=0,这个结果实际是告诉我们,当n足够大时,落在L中的点的概率趋近于落在L中点的数量与落在矩形中的总点数的比值。

  将这个结果代入积分式:

  于是我们可以借助物理实验和计算机的模拟求解这个难以对付的积分。

  我们用程序模拟蒙特卡罗积分法,计算下面四分之一圆的面积:

  圆的曲线是 x2 + y2 = 1,如果一个随机点(xi, yi)满足x2 + y2 < 1,则表示该点落在了圆内。

import matplotlib.pyplot as plt

import numpy as np

def create_ri(n):

''' 成 n 个随机点 '''

xs, ys = np.random.random_sample(n), np.random.random_sample(n) # 随机点的横纵坐标

return xs, ys

def cnt_circle(xs, ys):

''' 圆中随机点的数量 '''

ps = xs 2 + ys 2

return ps【ps < 1】.size

fig = plt.figure()

plt.subplots_adjust(hspace=0.5)

ax = fig.add_subplot(2, 1, 1)

x = y = np.arange(0, 1, 0.001)

x, y = np.meshgrid(x,y)

ax.contour(x, y, x2 + y**2, 【1】)

xs, ys = create_ri(100)

ax.scatter(xs, ys, s=10)

ax.set_xlabel('x')

ax.set_ylabel('y')

ax.axis('scaled')

xl, yl = 【】, 【】

n_max = 10000

for n in range(100, n_max, 10):

xs, ys = create_ri(n)

cnt = cnt_circle(xs, ys)

Area = cnt / n

xl.append(n)

yl.append(Area)

n = 10

ax = fig.add_subplot(2, 1, 2)

ax.hlines(np.pi / 4, xmin=-1000, xmax=n_max + 1000, label='$\pi/4$')

ax.plot(xl, yl, label='count($r_i$)/n')

ax.legend(loc='upper right')

ax.set_xlabel('n')

ax.set_ylabel('Area')

plt.show()

  随着n的增加,蓝色曲线的波动越来越小,计算的结果越来越接近真实值。

  正像前面提到的,如果想让计算结果的精度提升10倍,需要增加100倍的试验次数,因此蒙特卡罗法的效率并不高。

  尽管大数定律下的蒙特卡罗法很好用,但仍然需要小心谨慎,关键之处在于大数定律没有为我们明确指出到底什么才是“大数”,到底需要多少次试验才能充分接近我们所期待的极限。无论n有多大,我们仍然不能否认存在这样的情况:所抛出的硬币全部正面朝上,尽管这种情况发生的概率很小。确定这个概率的方式是中心极限定理的内容。

  本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途!

  扫描二维码关注作者公众号“我是8位的”

ps = xs 2 + ys 2

return ps【ps < 1】.size

随笔

相关文章
|
Kubernetes Java 应用服务中间件
制作容器镜像的最佳实践
制作容器镜像的最佳实践
|
机器学习/深度学习 算法
【MATLAB】PSO粒子群优化BiLSTM(PSO_BiLSTM)的时间序列预测
【MATLAB】PSO粒子群优化BiLSTM(PSO_BiLSTM)的时间序列预测
368 5
IEEE 754规格化浮点数所能表示的最大值和最小值
IEEE 754规格化浮点数所能表示的最大值和最小值
4231 1
IEEE 754规格化浮点数所能表示的最大值和最小值
|
8月前
|
资源调度 JavaScript 前端开发
Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想
嗨,大家好,我是小华同学。今天为大家介绍一个基于Vue.js开发的导航组件库——Van-Nav。它支持响应式设计、多级菜单、丰富的配置选项和多种动画效果,适用于企业官网、电商平台、内容管理系统和个人博客等多种场景。轻松集成到Vue项目中,提供清晰有序的导航体验。关注我们获取更多优质开源项目和高效工作学习方法。
519 68
|
机器学习/深度学习 设计模式 人工智能
AIGC对设计行业的影响与启发:AIGC设计能替代真正的设计师吗?
AIGC技术正深刻影响设计行业,提升效率、拓宽创意边界,但无法替代设计师的创造力、审美和情感理解。Adobe国际认证成为设计师掌握AIGC技术的起点,推动行业标准化和设计师职业发展。AIGC与设计师的结合将共创设计行业的未来。
|
存储 Java 索引
Java ArrayList操作指南:如何移除并返回第一个元素
通过上述方法,你可以方便地从Java的 `ArrayList` 中移除并返回第一个元素。这种操作在日常编程中非常常见,是处理列表时的基本技能之一。希望这篇指南能帮助你更好地理解和运用Java的 `ArrayList`。
149 4
|
安全 Java 网络安全
Java Socket编程技术详解:从基础到进阶的全方位指南
【6月更文挑战第21天】Java Socket编程是网络通信的关键,涉及`Socket`和`ServerSocket`类。基础教程展示了如何创建简单的客户端-服务端交互,而进阶内容涵盖了非阻塞I/O、多路复用(如使用`Selector`)以提升性能,以及通过SSL/TLS确保安全通信。学习Socket编程不仅是技术实践,也是理解网络原理的过程,强调了持续学习和实践的重要性。
470 1
|
jenkins 持续交付
jenkins学习笔记之九:jenkins认证集成github
jenkins学习笔记之九:jenkins认证集成github
|
域名解析 负载均衡 网络协议
《打造不宕机的电商网站:揭秘Bind和Nginx的负载均衡策略》
【8月更文挑战第13天】在互联网技术快速演进的当下,确保web服务的高可用性和高性能至关重要。本文通过案例分析,探讨如何利用Bind和Nginx实现高效的负载均衡。以一家大型电商网站为例,面对每日上百万次的用户访问请求,通过配置Bind DNS服务器根据策略将域名解析至不同IP地址,并借助Nginx作为反向代理和负载均衡器,将请求按需分发至多个应用服务器,实现了服务的稳定性和高效性。此方案不仅提升了网站的扩展性和可靠性,还增强了对网络流量的控制能力,适用于处理巨大用户量和数据量的服务。
218 0
Error:java: 错误: 不支持发行版本 5,请使用6或更高版本
Error:java: 错误: 不支持发行版本 5,请使用6或更高版本