概率论基础1

随机变量:值并不固定

  (1)离散型随机变量:抛硬币出现正反面的次数以及每周下雨的天数

  (2)连续型随机变量:汽车每小时行驶的速度和银行排队的时间

总结:需要求和得出的就是离散型,需要积分计算得出的就是连续型

 

1. 离散性

例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次的结果             

    

 

随着抛硬币次数越来越多,正面反面出现次数趋近于一致

也就是说,统计的采样次数越多,越趋近于我们理论上的情况。因此,从这个统计实验我们可以看出,概率分布描述的其实就是随机变量的概率规律

 

2. 连续型

抛硬币正面次数、每周下雨天数这种离散型随机变量,对应的概率分布是很好理解的,但是对于连续型的随机变量,如何理解它们的概率分布呢?

将连续数据离散化

例如汽车速度仪表盘:现实生活中我们通过汽车的仪表盘所读取速度,都是整数值,例如每小时 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,那么我们的模拟就从离散逐步趋近于连续的值了。

     

上面通过两个模拟实验,分别展示了离散型和连续型概率的分布。其实,人们在实际运用中,已经总结出了一些概率分布,这里挑几个最常见的进行讲解。

常用的离散分布有伯努利分布、分类分布、二项分布、泊松分布等等,这里我重点介绍两个。

1. 伯努利分布

第一个是伯努利分布(Bernoulli Distribution),这是单个随机变量的分布,而且这个变量的取值只有两个,0 或 1。伯努利分布通过参数λ来控制这个变量为 1 的概率。

                        

 

或者写作:

      

另一个是分类分布(Categorical Distribution),也叫 Multinoulli 分布。它描述了一个具有 k 个不同状态的单个随机变量。这里的 k,是有限的数值,如果 k 为 2 的时候,那么分类分布就变成了伯努利分布

 

2. 正态分布

离散型随机变量的状态数量是有限的,所以可以通过伯努利和分类分布来描述。可是对于连续型随机变量来说,状态是无穷多的,这时我们就需要连续分布模型。比较经典的连续分布有正态分布、均匀分布、指数分布、拉普拉斯分布等等。如果你只需要掌握一个的话,那肯定是正态分布。

正态分布(Normal Distribution),也叫高斯分布(Gaussian Distribution)。我把这个分布的公式列在这里

 这个分布可以近似表示日常生活中很多数据的分布,我们经常使用它进行机器学习的特征工程,对原始数据实施标准化,使得不同范围的数据具有可比性。所以,如果想要学习机器学习,一定要掌握正态分布。

          

 

 

  在这个公式中有两个参数,μ表示均值,σ表示方差。看这个公式不太直观,我们来看一看对应的分布图。

 

            

 

从这个图可以看出,越靠近中心点μ,出现的概率越高,而随着渐渐远离μ,出现的概率先是加速下降,然后减速下降,直到趋近于 0。蓝色区域上的数字,表示了这个区域的面积,也就是数据取值在这个范围内的概率。例如,数据取值在[-1σ, μ]之间的概率为 34.1%。

现实中,很多数据分布都是近似于正态分布的。例如人类的身高体重。拿身高来说,大部分人都是接近平均值身高,偏离平均身高越远,相对应的人数越少。这也是为什么正态分布很常用的原因。

 

很多数据分布都是近似于正态分布的。例如人类的身高体重。拿身高来说,大部分人都是接近平均值身高,偏离平均身高越远,相对应的人数越少。这也是为什么正态分布很常用的原因。

 

期望值

期望值,也叫数学期望,是每次随机结果的出现概率乘以其结果的总和。如果我们把每种结果的概率看作权重,那么期望值就是所有结果的加权平均值。它在我们的生活中十分常见,例如计算多个数值的平均

离散型的更容易理解,打个形象的例子,开门做生意,假设每条有三种可能,一种是生意满堂,一天能有10万的收入,一种是一半客人,一天收入只有5万,最后一种是没人来,一天收入为0,那么问每天收入“预期”是多少?由于有三种情况,我们不能直接说10万、5万还是0,只能看三种情况出现的概率分别是多少?如果客满的概率是1.0,其他两种是0.0,那么一天的收入是10*1.0=10万,如果客满的概率是0.5, 半客满的概率是0.3,没人的概率是0.2,那么一天收入的“期望”就是10*0.5+5*0.3+0*0.2 = 6.5万值,其实就是求期望值,只不过我们假设每个数值出现的概率是相同的。

 

 

posted @ 2020-06-03 21:00  不溶解的糖  阅读(432)  评论(0编辑  收藏  举报