前言
《Python人工智能:原理、实践及应用》中随机变量分布的学习。
随机变量可能取得的值,可以把它们分为两种基本类型:离散型
和连续型
离散型
离散型随机变量即在一定区间内变量取值为有限个或可数个
。
离散型随机变量根据不同的概率分布有伯努利分布、二项分布、几何分布、泊松分布、超几何分布等。
连续型
连续型随机变量即在一定区间内变量取值有无限个
,或数值无法一一列举出来。
连续型随机变量根据不同的概率分布有均匀分布、指数分布、正态分布、伽马分布等。
代码实现
伯努利分布(Bernoulli Distribution)
伯努利分布(Bernoulli Distribution)又称两点分布或0-1分布,
其样本空间中只有两个点,一般取为{0,1},不同的伯努利分布只是取到这两个值的概率不同。
伯努利分布只有一个参数 ,记作 ,或,读作 服从参数为 的伯努利分布
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
def bernoulli_pmf(p=0.0):
"""
抛硬币 描述离散型随机变量的概率质量分布函数(Probability Mass Function,PMF)
:param p: 硬币正面朝上的概率
:return:
"""
ber_dist = stats.bernoulli(p)
x = [0, 1]
x_name = ['0', '1']
pmf = [ber_dist.pmf(x[0]), ber_dist.pmf(x[1])]
plt.bar(x, pmf, width=0.15)
plt.xticks(x, x_name)
plt.ylabel('Probability')
plt.title('PMF of bernoulli distribution')
plt.show()
bernoulli_pmf(p=0.3)
二项式分布
如果把一个伯努利分布独立地重复 n次,就得到了一个二项分布。
二项分布是最重要的离散型概率分布之一。随机变量 要满足这个分布有两个重要条件:
①各次试验的条件是稳定
的;
②各次试验之间是相互独立
的。
一个随机变量 服从参数为 和 的二项分布,记作 或 。
利用抛硬币的例子来比较伯努利分布和二项分布的区别。
- 如果将抛一次硬币看作一次伯努利实验,且将正面朝上记为1,反面朝上记为0。那么抛次硬币,记录正面朝上的次数, 就服从二项分布。
假如硬币是均匀的, 取值应该大部分集中在 附近,而非常大或非常小的值都很少。 - 由此可见,二项分布关注的是计数,而伯努利分布关注的是比值()。
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
def binom_dis(n=1, p=1):
"""
n=20, p=0.6的二项分布,表示每次试验抛硬币,该硬币正面朝上的概率大于背面朝上的概率,共抛20次并记录正面朝上的次数。
:param n: 次数
:param p: 正面朝上的概率
:return:
"""
binom_dis = stats.binom(n, p)
# ppf 累积分布函数(cdf)的反函数
x = np.arange(binom_dis.ppf(0.0001), binom_dis.ppf(0.9999))
print(x) # [ 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.]
fig, ax = plt.subplots(1, 1)
ax.plot(x, binom_dis.pmf(x), 'bo', label='binom pmf')
ax.vlines(x, 0, binom_dis.pmf(x), colors='b', lw=5, alpha=0.5)
ax.legend(loc='best', frameon=False)
plt.ylabel('Probability')
plt.title('PMF of binomial distribution(n = {}, p = {})'.format(n, p))
plt.show()
binom_dis(n=20, p=0.6)
泊松分布
如果某事件以固定强度随机且独立
地出现,该事件在单位时间内出现的次数(个数)可以看成是服从泊松分布。
我们把一个随机变量 服从参数为 的泊松分布,记作 ,或 。泊松分布适合于描述单位时间内随机事件发生次数的概率分布
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
def poisson_pmf(mu=3):
poisson_dis = stats.poisson(mu)
# print(poisson_dis.ppf(0.001))
# print(poisson_dis.ppf(0.999))
# print(poisson_dis.cdf(0.001))
x = np.arange(poisson_dis.ppf(0.001), poisson_dis.ppf(0.999))
# print(type(x))
# print(poisson_dis.pmf(x))
print(x) # [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.]
fig, ax = plt.subplots(1, 1) # 子图行列数为 1
ax.plot(x, poisson_dis.pmf(x), 'bo', ms=8, label='Poisson pmf')
# matplotlib库的axiss模块中的Axes.vlines()函数用于在从ymin到ymax的每个x处绘制垂直线。
ax.vlines(x, 0, poisson_dis.pmf(x), colors='b', lw=5, alpha=0.5)
# 图例位置 图例边框
ax.legend(loc='best', frameon=False)
plt.ylabel('Probability')
plt.title('PMF of poisson distribution(mu = {})'.format(mu))
plt.show()
poisson_pmf(mu=8)
均匀分布(Uniform Distribution)
均匀分布(Uniform Distribution)是最简单的连续型概率分布
,因为其概率密度是一个常数,不随随机变量取值的变化而变化。
如果连续型随机变量 具有如下的概率密度函数,则称 服从上的均匀分布,记作或。
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
def uniform_distribution(loc=0, scale=1):
"""
直接传入参数和先冻结一个分布,画出来均匀分布的概率分布函数,此外还从该分布中取了10000个值作直方图
:param loc: location表示起点,
:param scale: 表示区间长度
:return:
"""
uniform_dis = stats.uniform(loc=loc, scale=scale)
x = np.linspace(uniform_dis.ppf(0.01), uniform_dis.ppf(0.99), 100)
fig, ax = plt.subplots(1, 1)
# 直接传入参数
ax.plot(x, stats.uniform.pdf(x, loc=2, scale=4), 'r-', lw=5, alpha=0.6, label='uniform pdf')
# 从冻结的均匀分布取值
ax.plot(x, uniform_dis.pdf(x), 'k-', lw=2, label='frozen pdf')
# 计算pdf分别等于0.001、0.5和0.999是的x值
vals = uniform_dis.ppf([0.001, 0.5, 0.999])
print(vals) # [2.004 4. 5.996]
# 检测cdf和pdf的精确度
print(np.allclose([0.001, 0.5, 0.999], uniform_dis.cdf(vals)))
# True
r = uniform_dis.rvs(size=10000)
ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
plt.ylabel('Probability')
plt.title('PDF of Unif({}, {})'.format(loc, scale))
ax.legend(loc='best', frameon=False)
plt.show()
uniform_distribution(loc=2, scale=4)
指数分布
指数分布和离散型的泊松分布之间有很大的关系。
- 泊松分布表示单位时间(或单位面积)内随机事件的平均发生次数
- 指数分布则可以用来表示独立随机事件发生的时间间隔。
- 由于发生次数只能是自然数,所以泊松分布自然就是离散型的随机变量,而时间间隔则可以是任意的实数,因此其定义域是
如果一个随机变量 的概率密度函数满足以下形式,
就称为服从参数 lambda 的指数分布(Exponential Distribution),记作或 。指数分布只有一个参数 ,且。
指数分布的一个显著的特点是其具有无记忆性。
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
def exponential_dis(loc=0, scale=1.0):
"""
指数分布, exponential continuous random variable
按照定义,指数分布只有一个参数lambda, 这里的scale = 1 / lambda
:param loc: 定义与的左端点,相当于将整体分布沿x轴平移loc
:param scale: lambda的倒数,loc + scale表示该分布的均值, scale ^ 2表示该分布的方差
:return:
"""
exp_dis = stats.expon(loc=loc, scale=scale)
x = np.linspace(exp_dis.ppf(0.000001), exp_dis.ppf(0.999999), 100)
fig, ax = plt.subplots(1, 1)
# 直接传入参数
ax.plot(x, stats.expon.pdf(x, loc=loc, scale=scale), 'r-', lw=5, alpha=0.6, label='exponential pdf')
# 从冻结的均匀分布取值
ax.plot(x, exp_dis.pdf(x), 'k-', lw=2, label='frozen pdf')
# 计算pdf分别等于0.001、0.5和0.999是的x值
vals = exp_dis.ppf([0.001, 0.5, 0.999])
print(vals) # [2.00100067e-03 1.38629436e+00 1.38155106e+01]
# 检测cdf和pdf的精确度
print(np.allclose([0.001, 0.5, 0.999], exp_dis.cdf(vals)))
# True
r = exp_dis.rvs(size=10000)
ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
plt.ylabel('Probability')
plt.title('PDF of Exp(0.5)')
ax.legend(loc='best', frameon=False)
plt.show()
exponential_dis(loc=0, scale=2)
正态分布(Normal Distribution
正态分布(Normal Distribution),也称常态分布,又名高斯分布(Gaussian Distribution),最早由A.棣莫弗在求二项分布的渐近公式中得到。C.F.高斯在研究测量误差时从另一个角度导出了它。P.S.拉普拉斯和高斯研究了它的性质。正态分布是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。正态曲线呈钟形,两头低,中间高
,左右对称因其曲线呈钟形,因此人们又经常称其为钟形曲线
。
若随机变量X 服从一个数学期望为 、方差为的正态分布,记为 。
其概率密度函数为正态分布的期望值 决定了其位置,其标准差 决定了分布的幅度。
当 时的正态分布是标准正态分布
概率密度函数为
正态分布中的两个参数含义如下:
- 当固定 ,改变 的大小时, 图形的形状不变,只是沿着轴作平移变换,因此 被称为
位置参数
(决定对称轴的位置); - 当固定,改变 的大小时, 图形的对称轴不变,形状改变,越小,图形尖峰越陡峭。 越大,图形越平坦,因此 被称为
尺度参数
,决定曲线的分散程度。
import math
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
u = 0 # 均值μ
sig = math.sqrt(0.2) # 标准差σ
x = np.linspace(u - 3 * sig, u + 3 * sig, 50)
y_sig = np.exp(-(x - u) ** 2 / (2 * sig ** 2)) / (math.sqrt(2 * math.pi) * sig)
print(x)
print('=' * 20)
print(y_sig)
plt.plot(x, y_sig, 'r-', linewidth=2)
plt.grid(True)
plt.show()
总结
随机变量的性质主要有两类:
- 一类是大而全的性质,这类性质可以详细描述述所有可能取值的概率,
例如描述连续型随机变量的累积分布函数(Cumulative Distribution Function,CDF)、概率密度函数(Probability Density Function,PDF),
描述离散型随机变量的概率质量分布函数(Probability Mass Function,PMF)等; - 另一类是找 到 该 随 机 变 量 的 一 些 特 征 或 代 表 值 , 例 如 随 机 变 量的 方 差(Variance)、期望(Expectation)、置信区间等数字特征。