程序员

大数定理和中心极限定理的粗浅理解

2018-10-26  本文已影响348人  UlissesJr
#大数定理理解展示
import random
import numpy as np 
import matplotlib as mpl 
import matplotlib.pyplot as plt 

#解决显示中文的问题
mpl.rcParams['font.sans_serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False

#给定随机数的种子
random.seed(28)

def generate_random_int(n):
    """产生n个1-9的随机数"""
    return [random.randint(1,9) for i in range(n)]

if __name__ == '__main__':
    number = 8000
    x = [i for i in range(number+1) if i != 0]
    #产生number个1-9的随机数
    total_random_int = generate_random_int(number)
    #求n个[1,9]的随机数的均值,n=1,2,3,4,5...
    y = [np.mean(total_random_int[0:i+1]) for i in range(number)]

    plt.plot(x,y,'b-')
    plt.xlim(0,number)
    plt.grid(True)
    plt.show()
Figure_1.png

当样本数量足够大时,均值接近于5(总体数据的期望值).


中心极限定理(Central Limit Theorem);假设{Xn}为独立同分布的随机变量序 列,并具有相同的期望μ和方差为σ2,则{Xn}服从中心极限定理,且Zn为随机序列{Xn}的范围和:

中心极限定理就是一般在同分布的情况下,抽样样本值的规范和在总体数量趋于
无穷时的极限分布近似于正态分布。

随机的抛六面的骰子,计算三次点数的和的分布:

#大数定理理解展示
import random
import numpy as np 
import matplotlib as mpl 
import matplotlib.pyplot as plt 

#解决显示中文的问题
# mpl.rcParams['font.sans_serif'] = [u'SimHei']
# mpl.rcParams['axes.unicode_minus'] = False

#给定随机数的种子
random.seed(28)

#事件A = x1+x2+x3 ,其中x1,x2,x3是分别抛骰子的点数
#根据中心极限定理,由于x1,x2,x3属于独立同分布,所以说最终的事件A属于高斯分布

def generate_random_int():
   """随机产生一个[1,6]的数字,表示一个六面的骰子的结果"""   
   return random.randint(1,6)

def generate_sum(n):
   """计算返回n次抛骰子的和的结果"""
   return np.sum([generate_random_int() for i in range(n)])

if __name__ == '__main__':
   #进行每次A事件抛几次骰子
   number1 = 10000000
   #表示每次A事件抛几次骰子
   number2 = 3

   #进行number1次事件A的操作,每次事件A都进行number2次
   keys = [generate_sum(number2) for i in range(number1)]

   #统计每个和数字出现的次数,eg:和为3的出现多少次,和为10的出现多少次
   result = {}
   for key in keys:
       count = 1
       if key in result:
           count += result[key]
       result[key] = count

   #获取x和y
   x = sorted(np.unique(list(result.keys())))
   y = []
   for key in x:
       #将出现的次数进行一个百分比的计算
       y.append(result[key]/number1)

   #画图:
   plt.plot(x,y,'b-')
   plt.xlim(x[0] -1 ,x[-1] +1)
   plt.grid(True)
   plt.show()
Figure_2.png

n为3,1-6的平均值为3.5,3μ为10.5,大概就是图中的位置。

上一篇下一篇

猜你喜欢

热点阅读