Python概率统计
上QQ阅读APP看书,第一时间看更新

1.3 频率与概率

本节介绍频率和概率的定义和概率的性质。

1.3.1 频率

人们在进行随机试验时,往往希望知道一个事件发生的可能性有多大,而且最好能用一个合适的数字表征它。为此,首先引入频率的概念,在此基础上,引入描述一个事件发生可能性大小的数字,也就是概率。

在相同试验条件下,进行了n次试验,在这n次试验中事件A发生的次数为nA,则称比值nA/n为事件A发生的频率,一般记作fnA)。显然fnA)具有下列性质:

(1)0≤fnA)≤1。

(2)fnS)=1。

(3)如果A1A2,…,Ak是两两互不相容的事件,则

直观上看,频率越大的事件在一次试验中发生的“可能性”越大,而且大量的试验证实,当试验次数n逐渐增大时,频率fnA)呈现出稳定性,逐渐趋近于某个常数。一般称频率稳定性为统计规律,依照此规律,让试验重复次数充分多,以频率来表征某个事件发生的可能性是合适的。

例如,抛硬币就是典型的随机试验,虽然抛硬币试验直观上容易接受正反面出现可能性各占一半的结果,但确实有一批数学家做过抛硬币试验,见表1-1。这种严谨求实的科学精神令人钦佩,值得后人学习!

表1-1 抛硬币试验

抛硬币模拟代码如下:

     #第1章/1-2.py
     import numpy as np
     #抛硬币总次数
     N = 10000
     #0为反面, 1为正面
     s = [0, 1]
     ex = np.random.choice(s, size = N, replace = True, p = [0.5, 0.5])
     n = ex.sum()
     print('抛10000次, 正面朝上的次数为', n)

输出如下:

     抛10000次, 正面朝上的次数为4952

历史上还有一个有名的随机试验,即蒲丰扔针试验,这个试验以别具一格的思想来估算圆周率π的值,并且开创了随机模拟方法。1777年法国学者蒲丰提出用投针试验求圆周率π。在平面上画一些间距为a的平行线,向此平面随机投掷一枚长为lla)的针。针的位置可由针的中点与最近一条平行线的距离X及针与平行线的夹角φ来确定。随机投针的概率含义是:针的中点与平行线的距离X均匀分布在[0,a/2]区间内;针与平行线的夹角φ均匀分布在[0,π]区间内,并且Xφ是相互独立的。(由于尚未定义均匀分布、相互独立的概念,姑且忽略)。显然针与平行线相交的充分必要条件是:

利用投针试验计算π值,设随机投针N次,其中有M次与平行线相交。当N很大时,可以用频率M/N作为概率p的估计值,从而求得π的估计值为

根据这个公式,历史上有学者做了随机投针试验,他们所得到的π的估计值见表1-2。

表1-2 蒲丰扔针试验

蒲丰随机扔针试验是随机模拟方法的雏形。在计算机技术诞生以前进行大量的随机试验是十分困难的,随着计算机的出现和发展,可以把真实的随机投针试验利用统计模拟试验方法来代替,即用计算机实现随机试验。该方法有一个更新颖的名称,即蒙特卡罗(Monte Carlo)方法。蒙特卡罗是摩纳哥王国的城市,世界闻名的赌城。1946年数学家冯·诺依曼等在电子计算机上用随机抽样的方法模拟裂变物质的中子连锁反应,由于这项研究与原子弹有关,需要保密,他们就把此方法以赌城的名字命名,称为蒙特卡罗方法,既风趣又幽默,很快得到人们的普遍接受。从那以后出版的随机模拟书籍也常用蒙特卡罗方法为题。

必须注意的是,计算机产生的所谓随机数其实是伪随机数,它们是利用数学方法按照一定的计算程序产生的数列,并不是真正意义上的随机数。虽然如此,如果算法经过细心设计,可以产生看起来相互独立的随机数字,并且可以通过一系列的统计检验,就可以把这些伪随机数当作随机数来使用。

下面来看一个有趣的例子,用蒙特卡罗方法计算圆周率π的值。这种方法不同于蒲丰随机扔针试验,它更直观一些。在平面上画一个边长为2的正方形,用程序生成一系列随机的点,如图1-1所示,假设有N个,这些点的横坐标和纵坐标都是均匀分布的随机数,作该正方形的内切圆,然后统计落入此内切圆中的点的个数,假设有M个,则有以下估计式:

利用估计式,可得π≈4M/N

图1-1 蒙特卡罗方法计算圆周率示意图

蒙特卡罗方法计算圆周率的代码如下:

     #第1章/1-3.py
     import numpy as np
     #点的总数
     N = 100000
     #将(0, 1)区间的随机数映射为-1到1
     x = (np.random.rand(N) - 0.5) * 2
     y = (np.random.rand(N) - 0.5) * 2
     #统计落入圆周内的点的个数
     M = 0
     for k in range(N):
          if(x[k] ** 2 + y[k] ** 2 < = 1):
             M = M + 1
     #结论
     print('圆周率的近似值为', 4 * M/N)

输出如下:

     圆周率的近似值为3.1442

1.3.2 概率

在实际中,不可能对每个事件都做大量的试验,然后求事件的频率。为了研究需要,从频率稳定性出发,给出表征事件可能性大小的概率的定义。

E是随机试验,S是该随机试验的样本空间,对于随机事件A赋予一个实数PA),称PA)为事件A的概率,如果PA)满足下面3个条件。

(1)非负性:对任何事件A,总有PA)≥0。

(2)整体性:PS)=1。

(3)可列可加性:对于两两互斥的事件A1A2A3,…,An,即AiAj=∅(ij),有

由概率的定义,经过简单的推导则可得概率的基本性质。

(1)P(∅)=0。

(2)对任何事件A,有PA)≤1。

(3)对任何事件A,有

(4)对事件AB,有PA-B)=PA)-PAB)。如果BA,则有PA-B)=PA)-PB)。

概率有重要的加法公式。对于任意两个事件AB,有

如果是3个事件,不妨设为A1A2A3,则有

例1-7】 设随机事件AB及其和事件AB的概率分别是0.4、0.3和0.6,若表示B的对立事件,求事件的概率。

解:PAB)=PA)+PB)-PAB)可知,PAB)=0.4+0.3-0.6=0.1。又因为,故

例1-8】 设AB为两个随机事件,则PA-B)等于(  )。

A.PA)-PB

B.PBPA)-PB)+PAB

C.PA)-PAB

D.PA)+PB)-PAB

解:PA-B)=PA)-PAB)知,选(C)。