随机变量:值并不固定
(1)离散型随机变量:抛硬币出现正反面的次数以及每周下雨的天数
(2)连续型随机变量:汽车每小时行驶的速度和银行排队的时间
总结:需要求和得出的就是离散型,需要积分计算得出的就是连续型
例1:抛硬币
1 import random 2 import pandas as pd 3 import numpy as np 4 import matplotlib.pyplot as plt 5 6 def flip_coin(times): 7 data_array = np.empty(times) # 生成一个10行的矩阵,存放data [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 8 weights_array = np.empty(times) # 生成一个10行的矩阵,存放weight [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 9 weights_array.fill(1 / times) # [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] 10 11 for i in range(0, times): # 抛times次的硬币 12 data_array[i] = random.randint(0, 1) # 假设0表示正面,1表示反面 [0., 1., 1., 0., 0., 0., 0., 1., 0., 1.] 13 14 data_frame = pd.DataFrame(data_array) # 将矩阵数据进行格式化 15 data_frame.plot(kind=‘hist‘, legend=False) #获取正反面统计次数的直方图 16 data_frame.plot(kind=‘hist‘, legend=False, weights=weights_array).set_ylabel("Probability") # 获取正反面统计概率的直方图 17 plt.show() 18 19 flip_coin(10)
抛10次的结果
随着抛硬币次数越来越多,正面反面出现次数趋近于一致
也就是说,统计的采样次数越多,越趋近于我们理论上的情况。因此,从这个统计实验我们可以看出,概率分布描述的其实就是随机变量的概率规律。
抛硬币正面次数、每周下雨天数这种离散型随机变量,对应的概率分布是很好理解的,但是对于连续型的随机变量,如何理解它们的概率分布呢?
将连续数据离散化
例如汽车速度仪表盘:现实生活中我们通过汽车的仪表盘所读取速度,都是整数值,例如每小时 60 公里。也许比较高档的车会显示数字化的速度,带有小数位,但实际上汽车最精确的速度是一个无限位数的小数,是从 0 到最高公里数的一个任意数值。所以仪表盘所显示的数字,是将实际速度离散化处理之后的数字。除了仪表盘上的速度,汽车行驶在时间维度上也是连续的。类似地,我们还需要对时间进行离散化,比如每分钟查看仪表盘一次并读取速度值。
例二:模拟汽车仪表盘,记录行车速度
假设:仪表盘最小刻度是 5,也就是说,它只能显示 55、60、65 这种公里数。然后每 1 分钟采样一次(读一次仪表盘),那么 1 小时内我们将生成 60 个数据。示例代码如下:
1 import random 2 import pandas as pd 3 import numpy as np 4 import matplotlib.pyplot as plt 5 6 7 def check_speed(time_gap, speed_gap, total_time, min_speed, max_speed): 8 9 times = int(total_time / time_gap) # 获取读取仪表盘的次数 10 11 data_array = np.empty(times) # [0, 0, 0, ...] 60个 12 weights_array = np.empty(times) # [0, 0, 0, ...] 60个 13 weights_array.fill(1 / times) # [0.01666667, 0.01666667, 0.01666667,.....] 60个 14 15 for i in range(0, times): 16 if speed_gap < 1: #如果速度间隔小于1,那么就会强制生成一个最高速和最低速度之间的一个速度 17 data_array[i] = random.random() * max_speed 18 else: 19 data_array[i] = random.randint(0, max_speed / speed_gap) * speed_gap #随机生成一个最高速和最低速之间的速度,先除以speed_gap然后乘以speed_gap进行离散化 20 # array([130., 140., 65., 20., 125., 15., 65.,...] 60个 21 data_frame = pd.DataFrame(data_array) # 格式化 22 bin_range = np.arange(0, 200, speed_gap) # 设置横坐标区间 0-200 间隔为:5 23 data_frame.plot(kind = ‘hist‘, bins = bin_range, legend = False) #获取时速统计次数的直方图 24 data_frame.plot(kind = ‘hist‘, bins = bin_range, legend = False, weights = weights_array, ).set_ylabel("Probability") #获取时速统计概率的直方图 25 plt.show() 26 27 check_speed(1, 5, 60, 0, 200)
生成的速度数据直方图:
第二次模拟,假设我们把车升级到当今的主流车,仪表盘的最小刻度已经到 1 了,然后时间维度上,我们细分到 0.1 分钟,那么 1 小时我们将生成 600 个数据。我们还可以进行第三次、第四次、甚至是无穷次的模拟,每次模拟的时候我们都将行驶速度的精度进一步提升、将时间间隔进一步缩小,让两者都趋近于 0,那么我们的模拟就从离散逐步趋近于连续的值了。
、
上面通过两个模拟实验,分别展示了离散型和连续型概率的分布。其实,人们在实际运用中,已经总结出了一些概率分布,这里挑几个最常见的进行讲解。
常用的离散分布有伯努利分布、分类分布、二项分布、泊松分布等等,这里我重点介绍两个。
第一个是伯努利分布(Bernoulli Distribution),这是单个随机变量的分布,而且这个变量的取值只有两个,0 或 1。伯努利分布通过参数λ来控制这个变量为 1 的概率。
或者写作:
另一个是分类分布(Categorical Distribution),也叫 Multinoulli 分布。它描述了一个具有 k 个不同状态的单个随机变量。这里的 k,是有限的数值,如果 k 为 2 的时候,那么分类分布就变成了伯努利分布。我把这个分布的公式和图解都列了出来.
现实生活中我们通过汽车的仪表盘所读取速度,都是整数值,例如每小时 60 公里。也许比较高档的车会显示数字化的速度,带有小数位,但实际上汽车最精确的速度是一个无限位数的小数,是从 0 到最高公里数的一个任意数值。所以仪表盘所显示的数字,是将实际速度离散化处理之后的数字。除了仪表盘上的速度,汽车行驶在时间维度上也是连续的。类似地,我们还需要对时间进行离散化,比如每分钟查看仪表盘一次并读取速度值
原文:https://www.cnblogs.com/nnnnbbbb1/p/13040047.html