前言
《Python人工智能:原理、实践及应用》中随机变量分布的学习。
随机变量可能取得的值,可以把它们分为两种基本类型:离散型
和连续型
离散型
离散型随机变量即在一定区间内变量取值为有限个或可数个
。
离散型随机变量根据不同的概率分布有伯努利分布、二项分布、几何分布、泊松分布、超几何分布等。
连续型
连续型随机变量即在一定区间内变量取值有无限个
,或数值无法一一列举出来。
连续型随机变量根据不同的概率分布有均匀分布、指数分布、正态分布、伽马分布等。
代码实现
伯努利分布(Bernoulli Distribution)
伯努利分布(Bernoulli Distribution)又称两点分布或0-1分布,
其样本空间中只有两个点,一般取为{0,1},不同的伯努利分布只是取到这两个值的概率不同。
伯努利分布只有一个参数 ,记作
X
~
B
e
r
n
o
u
l
l
i
(
p
)
X~Bernoulli(p)
X~Bernoulli(p),或
X
~
B
(
1
,
p
)
X~B(1, p)
X~B(1,p),读作
X
X
X服从参数为
p
p
p的伯努利分布
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次,就得到了一个二项分布。
二项分布是最重要的离散型概率分布之一。随机变量 要满足这个分布有两个重要条件:
①各次试验的条件是稳定
的;
②各次试验之间是相互独立
的。
一个随机变量 服从参数为 n n n和 p p p的二项分布,记作 X ~ B i n o m i a l ( n , p ) X~Binomial(n , p) X~Binomial(n,p)或 X ~ B ( n , p ) X~B( n, p) X~B(n,p)。
利用抛硬币的例子来比较伯努利分布和二项分布的区别。
- 如果将抛一次硬币看作一次伯努利实验,且将正面朝上记为1,反面朝上记为0。那么抛
n
n
n次硬币,记录正面朝上的次数
Y
Y
Y, 就服从二项分布。
假如硬币是均匀的, 取值应该大部分集中在 n / 2 n/2 n/2附近,而非常大或非常小的值都很少。 - 由此可见,二项分布关注的是计数,而伯努利分布关注的是比值( 正面朝上的计数 / n 正面朝上的计数/ n 正面朝上的计数/n)。
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)
泊松分布
如果某事件以固定强度随机且独立
地出现,该事件在单位时间内出现的次数(个数)可以看成是服从泊松分布。
我们把一个随机变量
X
X
X服从参数为
λ
\lambda
λ 的泊松分布,记作
X
~
P
o
i
s
s
o
n
(
λ
)
X~Poisson( \lambda)
X~Poisson(λ),或
X
~
P
(
l
a
m
b
d
a
)
X~P(\ lambda)
X~P( lambda)。泊松分布适合于描述单位时间内随机事件发生次数的概率分布
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)是最简单的连续型概率分布
,因为其概率密度是一个常数,不随随机变量取值的变化而变化。
如果连续型随机变量 具有如下的概率密度函数,则称 服从
[
a
,
b
]
[ a, b]
[a,b]上的均匀分布,记作
X
~
U
(
a
,
b
)
X~U( a, b)
X~U(a,b)或
X
~
U
n
i
f
(
a
,
b
)
X~Unif( a, b)
X~Unif(a,b)。
f
(
x
)
=
{
1
/
(
b
−
a
)
,
a
<
x
<
b
0
,
x
<
a
或
x
>
b
f(x)=\begin{cases}1 / (b - a), &a< x < b \\ 0 ,& x< a 或 x > b\end{cases}
f(x)={1/(b−a),0,a<x<bx<a或x>b
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)
指数分布
指数分布和离散型的泊松分布之间有很大的关系。
-
泊松分布表示单位时间(或单位面积)内随机事件的平均发生次数
-
指数分布则可以用来表示独立随机事件发生的时间间隔。
-
由于发生次数只能是自然数,所以泊松分布自然就是离散型的随机变量,而时间间隔则可以是任意的实数,因此其定义域是 ( 0 , + ∞ ) (0,+∞) (0,+∞)
如果一个随机变量 的概率密度函数满足以下形式,
f
(
x
)
=
{
λ
∗
e
−
λ
∗
e
,
x
>
0
0
,
其他
f(x) = \begin{cases}\lambda * e^{-\lambda * e}, &x > 0 \\ 0, &其他 \end{cases}
f(x)={λ∗e−λ∗e,0,x>0其他
就称
X
X
X为服从参数 lambda 的指数分布(Exponential Distribution),记作
X
~
E
(
λ
)
X~E(\lambda )
X~E(λ)或
X
~
E
x
p
(
λ
)
X~Exp(\lambda )
X~Exp(λ)。指数分布只有一个参数
λ
\lambda
λ,且
λ
>
0
\lambda >0
λ>0。
指数分布的一个显著的特点是其具有无记忆性。
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 服从一个数学期望为
μ
μ
μ 、方差为
σ
2
σ^2
σ2的正态分布,记为
N
(
μ
,
σ
2
)
N( μ, σ^2)
N(μ,σ2)。
其概率密度函数为正态分布的期望值
μ
μ
μ 决定了其位置,其标准差
σ
σ
σ决定了分布的幅度。
当
μ
=
0
,
σ
=
1
μ =0, σ=1
μ=0,σ=1时的正态分布是标准正态分布
概率密度函数为 f ( x ) = ( 1 / σ ∗ 2 π ) ∗ e − ( x − μ ) 2 / 2 σ 2 ) f(x) = (1 / σ * \sqrt{2π}) * e^{-(x-μ)^2} / 2σ^2) f(x)=(1/σ∗2π)∗e−(x−μ)2/2σ2)
正态分布中的两个参数含义如下:
- 当固定
σ
σ
σ,改变
μ
μ
μ 的大小时,
f
(
x
)
f(x)
f(x)图形的形状不变,只是沿着轴作平移变换,因此
μ
μ
μ 被称为
位置参数
(决定对称轴的位置); - 当固定
μ
μ
μ,改变
σ
σ
σ 的大小时,
f
(
x
)
f(x)
f(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()
总结
随机变量的性质主要有两类:文章来源:https://www.toymoban.com/news/detail-714634.html
- 一类是大而全的性质,这类性质可以详细描述述所有可能取值的概率,
例如描述连续型随机变量的累积分布函数(Cumulative Distribution Function,CDF)、概率密度函数(Probability Density Function,PDF),
描述离散型随机变量的概率质量分布函数(Probability Mass Function,PMF)等; - 另一类是找 到 该 随 机 变 量 的 一 些 特 征 或 代 表 值 , 例 如 随 机 变 量的 方 差(Variance)、期望(Expectation)、置信区间等数字特征。
以上是我个人在学习过程中的记录所学,希望对正在一起学习的小伙伴有所帮助!!!
如果对你有帮助,希望你能一键三连【关注、点赞、收藏】!!!文章来源地址https://www.toymoban.com/news/detail-714634.html
到了这里,关于Python--随机变量分布之伯努利分布、二项式分布、泊松分布、均匀分布、指数分布、正态分布 【实践】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!