:上一小节总结了离散型随机变量,这个小节总结连续型随机变量。离散型随机变量的可能取值只有有限多个或是无限可数的(可以与自然数一一对应),连续型随机变量的可能取值则是一段连续的区域或是整个实数轴,是不可数的。最常见的一维连续型随机变量有三种:均匀分布,指数分布和正态分布。下面还是主要从概述、定义、主要用途和Python的实现几个方面逐一描述。

 

以下所有Python代码示例,均默认已经导入上面的这几个包,导入代码如下: 

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

 

Python中调用一个分布函数以及相关方法还是遵循以下步骤:

  1. 初始化一个分布函数(也叫作冻结的分布);
  2. 调用该分布函数的方法或计算其数值特征;

 

1. 均匀分布


均匀分布算是最简单的连续型概率分布。因为其概率密度是一个常数,不随随机变量X取值的变化而变化。

 

1.1 定义

如果连续型随机变量 $X$ 具有如下的概率密度函数,则称 $X$ 服从 $[a,b]$ 上的均匀分布(uniform distribution),记作 $X \sim U(a,b)$ 或 $X \sim Unif(a,b)$

\begin{equation}
\nonumber f_X(x) = \left\{
\begin{array}{l l}
\frac{1}{b-a} & \quad a < x < b\\
0 & \quad x < a \textrm{ or } x > b
\end{array} \right.
\end{equation}

均匀分布具有等可能性,也就是说,服从 $U(a,b)$ 上的均匀分布的随机变量 $X$ 落入 $(a, b)$ 中的任意子区间上的概率只与其区间长度有关,与区间所处的位置无关。

 

由于均匀分布的概率密度函数是一个常数,因此其累积分布函数是一条直线,即随着取值在定义域内的增加,累积分布函数值均匀增加。

\begin{equation}
\hspace{70pt}
F_X(x) = \left\{
\begin{array}{l l}
0 & \quad \textrm{for } x < a \\
\frac{x-a}{b-a} & \quad \textrm{for }a \leq x \leq b\\
1 & \quad \textrm{for } x > b
\end{array} \right.
\hspace{70pt}
\end{equation}

 

 【概率论与数理统计】小结4 - 一维连续型随机变量及其Python实现

 图1-1,均匀分布的累积分布函数曲线

 

1.2 主要用途

  • 设通过某站的汽车10分钟一辆,则乘客候车时间 $X$ 在 $[0, 10]$ 上服从均匀分布;
  • 某电台每个20分钟发一个信号,我们随手打开收音机,等待时间 $X$ 在 $[0, 20]$ 上服从均匀分布;
  • 随机投一根针与坐标纸上,它和坐标轴的夹角 $X$ 在 $[0, π]$ 上服从均匀分布。

 

1.3 Python实现

从定义可以看出来,定义一个均匀分布需要两个参数,定义域区间的起点 $a$ 和终点 $b$,但是在Python中是 location 和 scale, 分别表示起点和区间长度。

参考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.uniform.html#scipy.stats.uniform

 1 def uniform_distribution(loc=0, scale=1):
 2     """
 3     均匀分布,在实际的定义中有两个参数,分布定义域区间的起点和终点[a, b]
 4     :param loc: 该分布的起点, 相当于a
 5     :param scale: 区间长度, 相当于 b-a
 6     :return:
 7     """
 8     uniform_dis = stats.uniform(loc=loc, scale=scale)
 9     x = np.linspace(uniform_dis.ppf(0.01),
10                     uniform_dis.ppf(0.99), 100)
11     fig, ax = plt.subplots(1, 1)
12 
13     # 直接传入参数
14     ax.plot(x, stats.uniform.pdf(x, loc=2, scale=4), 'r-',
15             lw=5, alpha=0.6, label='uniform pdf')
16 
17     # 从冻结的均匀分布取值
18     ax.plot(x, uniform_dis.pdf(x), 'k-',
19             lw=2, label='frozen pdf')
20 
21     # 计算ppf分别等于0.001, 0.5, 0.999时的x值
22     vals = uniform_dis.ppf([0.001, 0.5, 0.999])
23     print(vals)  # [ 2.004  4.     5.996]
24 
25     # Check accuracy of cdf and ppf
26     print(np.allclose([0.001, 0.5, 0.999], uniform_dis.cdf(vals)))  # Ture
27 
28     r = uniform_dis.rvs(size=10000)
29     ax.hist(r, normed=True, histtype='stepfilled', alpha=0.2)
30     plt.ylabel('Probability')
31     plt.title(r'PDF of Unif({}, {})'.format(loc, loc+scale))
32     ax.legend(loc='best', frameon=False)
33     plt.show()
34 
35 uniform_distribution(loc=2, scale=4)

上面的代码采用两种方式——直接传入参数和先冻结一个分布,画出来均匀分布的概率分布函数。此外还从该分布中取了10000个值做直方图。

 【概率论与数理统计】小结4 - 一维连续型随机变量及其Python实现

 图2-2,均匀分布 $U(2, 6)$ 的概率密度函数曲线

 

2. 指数分布


其实指数分布和离散型的泊松分布之间有很大的关系。泊松分布表示单位时间(或单位面积)内随机事件的平均发生次数,指数分布则可以用来表示独立随机事件发生的时间间隔。由于发生次数只能是自然数,所以泊松分布自然就是离散型的随机变量;而时间间隔则可以是任意的实数,因此其定义域是 $(0, +\infty)$。

 

2.1 定义

如果一个随机变量 $X$ 的概率密度函数满足一下形式,就称 $X$ 为服从参数 $\lambda$ 的指数分布(Exponential Distribution),记做 $X \sim E(\lambda)$ 或 $X \sim Exp(\lambda)$.

指数分布只有一个参数 $\lambda$,且 $\lambda > 0$.

\begin{equation}
\nonumber f_X(x) = \left\{
\begin{array}{l l}
\lambda e^{-\lambda x} & \quad x > 0\\
0 & \quad \textrm{otherwise}
\end{array} \right.
\end{equation}

 

2.2 主要用途

  • 表示独立随机事件发生的时间间隔,比如旅客进机场的时间间隔、中文维基百科新条目出现的时间间隔等;
  • 在排队论中,一个顾客接受服务的时间长短也可以用指数分布来近似;
  • 无记忆性的现象(连续时间)。

 

2.3 性质

指数分布的一个显著的特点是其具有无记忆性。例如如果排队的顾客接受服务的时间长短服从指数分布,那么无论你已经排了多久时间的队,在排 t 分钟的概率始终是相同的。

用公式表示就是:

$$P(X \geq s + t | X \geq s) = P(X \geq t)$$.

其实我还没有找到一种直观的理解指数分布这一性质的方法。

 

2.4 Python 实现

这里的参数与实际指数分布的参数有点不一样,参考下面代码中的注释。

 1 def exponential_dis(loc=0, scale=1.0):
 2     """
 3     指数分布,exponential continuous random variable
 4     按照定义,指数分布只有一个参数lambda,这里的scale = 1/lambda
 5     :param loc: 定义域的左端点,相当于将整体分布沿x轴平移loc
 6     :param scale: lambda的倒数,loc + scale表示该分布的均值,scale^2表示该分布的方差
 7     :return:
 8     """
 9     exp_dis = stats.expon(loc=loc, scale=scale)
10     x = np.linspace(exp_dis.ppf(0.000001),
11                     exp_dis.ppf(0.999999), 100)
12     fig, ax = plt.subplots(1, 1)
13 
14     # 直接传入参数
15     ax.plot(x, stats.expon.pdf(x, loc=loc, scale=scale), 'r-',
16             lw=5, alpha=0.6, label='uniform pdf')
17 
18     # 从冻结的均匀分布取值
19     ax.plot(x, exp_dis.pdf(x), 'k-',
20             lw=2, label='frozen pdf')
21 
22     # 计算ppf分别等于0.001, 0.5, 0.999时的x值
23     vals = exp_dis.ppf([0.001, 0.5, 0.999])
24     print(vals)  # [ 2.004  4.     5.996]
25 
26     # Check accuracy of cdf and ppf
27     print(np.allclose([0.001, 0.5, 0.999], exp_dis.cdf(vals)))
28 
29     r = exp_dis.rvs(size=10000)
30     ax.hist(r, normed=True, histtype='stepfilled', alpha=0.2)
31     plt.ylabel('Probability')
32     plt.title(r'PDF of Exp(0.5)')
33     ax.legend(loc='best', frameon=False)
34     plt.show()
35 
36 exponential_dis(loc=0, scale=2)

上面给出了 $Exp(0.5)$ 的概率分布函数图,

 【概率论与数理统计】小结4 - 一维连续型随机变量及其Python实现

 图2-1, $Exp(0.5)$ 的概率分布函数图

 

 下面是对不同参数的指数分布的概率分布函数图的比较:

【概率论与数理统计】小结4 - 一维连续型随机变量及其Python实现

图2-2,不同参数的指数分布pdf图

 代码如下:

 1 def diff_exp_dis():
 2     """
 3     不同参数下的指数分布
 4     :return:
 5     """
 6     exp_dis_0_5 = stats.expon(scale=0.5)
 7     exp_dis_1 = stats.expon(scale=1)
 8     exp_dis_2 = stats.expon(scale=2)
 9 
10     x1 = np.linspace(exp_dis_0_5.ppf(0.001), exp_dis_0_5.ppf(0.9999), 100)
11     x2 = np.linspace(exp_dis_1.ppf(0.001), exp_dis_1.ppf(0.999), 100)
12     x3 = np.linspace(exp_dis_2.ppf(0.001), exp_dis_2.ppf(0.99), 100)
13     fig, ax = plt.subplots(1, 1)
14     ax.plot(x1, exp_dis_0_5.pdf(x1), 'b-', lw=2, label=r'lambda = 2')
15     ax.plot(x2, exp_dis_1.pdf(x2), 'g-', lw=2, label='lambda = 1')
16     ax.plot(x3, exp_dis_2.pdf(x3), 'r-', lw=2, label='lambda = 0.5')
17     plt.ylabel('Probability')
18     plt.title(r'PDF of Exponential Distribution')
19     ax.legend(loc='best', frameon=False)
20     plt.show()
21 
22 diff_exp_dis()
View Code

相关文章:

  • 2021-07-22
  • 2021-12-09
  • 2021-10-14
  • 2021-08-05
  • 2022-12-23
  • 2021-07-10
  • 2022-02-07
猜你喜欢
  • 2021-05-28
  • 2021-06-04
  • 2021-11-14
  • 2022-01-04
  • 2021-12-27
  • 2021-08-21
相关资源
相似解决方案