欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

普通一维随机变量概率分布的 Python 实现

最编程 2024-03-05 14:42:02
...
一. 随机变量

随机变量是一个从样本空间 Ω \Omega Ω到实数空间 R R R的函数,比如随机变量 X X X可以表示投骰子的点数。随机变量一般可以分为两类:

  • 离散型随机变量:随机变量的取值为有限个。
  • 连续型随机变量:随机变量的取值是连续的,有无限多个。

scipy.stat模块中包含了多种概率分布的随机变量,包含离散型随机变量和连续型随机变量。离散型随机变量的常见接口如下:

方法名 功能
rvs 生成该分布的随机序列
pmf 概率质量函数
cdf 累计概率分布函数
stats 计算该分布的均值,方差,偏度,峰度。[Mean(‘m’), variance(‘v’), skew(‘s’), kurtosis(‘k’)]

连续型随机变量的常见接口如下:

方法名 功能
rvs 生成该分布的随机序列
pdf 概率密度函数
cdf 累计概率分布函数
stats 计算该分布的均值,方差,偏度,峰度。[Mean(‘m’), variance(‘v’), skew(‘s’), kurtosis(‘k’)]
二. 常见离散分布
1. 二项分布

如果随机变量 X X X的分布律为 P ( X = k ) = C n k p k q n − k , k = 0 , 1 , . . . n , P(X=k) = C^k_np^kq^{n-k},k = 0,1,...n, P(X=k)=Cnkpkqnkk=0,1,...n其中 p + q = 1 p + q = 1 p+q=1 ,则称 X X X服从参数为 n , p n,p n,p的二项分布,记为 X ∼ B ( n , p ) X \sim B(n,p) XB(n,p)

  • 期望: E ( X ) = n p E(X) = np E(X)=np
  • 方差: D ( X ) = n p ( 1 − p ) D(X) = np(1 - p) D(X)=np(1p)
  1. 画出不同参数下的二项分布, n , p n, p n,p分别为 ( 10 , 0.3 ) , ( 10 , 0.5 ) , ( 10 , 0.7 ) (10,0.3),(10,0.5),(10,0.7) (100.3),100.5,100.7

    import numpy as np
    from scipy.stats import binom
    import matplotlib.pyplot as plt
    
    plt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号
    
    if __name__ == '__main__':
        fig, ax = plt.subplots(3, 1, figsize = (10, 10))
        # 调整子图间距
        fig.subplots_adjust(hspace = 0.5)
    
        params = [(10, 0.3), (10, 0.5), (10, 0.7)]
    
        for i in range(len(params)):
            n = params[i][0]
            p = params[i][1]
    
            x = np.arange(0, n + 1)
            y = binom(n, p).pmf(x)
    
            # 计算随机变量的期望,方差
            mean, var = binom.stats(n, p, moments='mv')
    
            ax[i].scatter(x, y, color = 'blue', marker = 'o')
            ax[i].set_title('n = {}, p = {}'.format(n, p))
            ax[i].set_xticks(x)
            ax[i].text(1, 0.2, '期望: {:.2f}\n方差: {:.2f}'.format(mean, var))
            ax[i].grid()
    
        plt.show()
    

    运行结果:
    在这里插入图片描述

  2. 生成服从不同参数二项分布的随机数组(采样100000次),然后查看数组的频率分布

    import numpy as np
    from scipy.stats import binom
    import matplotlib.pyplot as plt
    
    plt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号
    
    if __name__ == '__main__':
        fig, ax = plt.subplots(3, 1, figsize = (10, 10))
        # 调整子图间距
        fig.subplots_adjust(hspace = 0.5)
    
        params = [(10, 0.3), (10, 0.5), (10, 0.7)]
    
        for i in range(len(params)):
            n = params[i][0]
            p = params[i][1]
            x = np.arange(0, 11)
            # 抽样10万次
            sample = binom.rvs(n = n, p = p, size = 100000)
            print(sample)
    
    
            ax[i].hist(sample, color = 'blue', density=True, bins = 50)
            ax[i].set_title('n = {}, p = {}'.format(n, p))
            ax[i].set_xticks(x)
            ax[i].grid()
    
        plt.show()
    

    运行结果:
    在这里插入图片描述

2. 几何分布

若随机变量 X X X的分布律为 P ( X = k ) = ( 1 − p ) k − 1 p , k = 1 , 2 , . . . , P(X = k) = (1 - p)^{k - 1}p,k = 1, 2, ..., P(X=k)=(1p)k1pk=1,2,...其中 0 < p < 1 0 < p < 1 0<p<1,则称 X X X服从参数为 p p p的几何分布,记为 X ∼ G e ( p ) X \sim Ge(p) XGe(p)

  • 期望: E ( X ) = 1 p E(X) = \frac{1}{p} E(X)=p1
  • 方差: D ( X ) = 1 − p p 2 D(X) = \frac{1 - p}{p^2} D(X)=p21p
  1. 画出不同参数下的几何分布, p p p分别为 ( 0.3 , 0.5 , 0.7 ) (0.3,0.5,0.7) (0.30.50.7)

    import numpy as np
    from scipy.stats import geom
    import matplotlib.pyplot as plt
    
    plt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号
    
    if __name__ == '__main__':
        fig, ax = plt.subplots(3, 1, figsize = (10, 10))
        # 调整子图间距
        fig.subplots_adjust(hspace = 0.5)
    
        params = [0.3,0.5,0.7]
    
        for i in range(len(params)):
            p = params[i]
    
            x = np.arange(1, 15)
            y = geom(p = p).pmf(x)
    
            print(y)
    
            # 计算随机变量的期望,方差
            mean, var = geom.stats(p = p, moments='mv')
    
            ax[i].scatter(x, y, color = 'blue', marker = 'o')
            ax[i].set_title('p = {}'.format(p))
            ax[i].set_xticks(x)
            ax[i].text(5, 0.2, '期望: {:.2f}\n方差: {:.2f}'.format(mean, var))
            ax[i].grid()
    
        plt.show()
    

    运行结果:
    在这里插入图片描述

  2. 生成服从不同参数几何分布的随机数组(采样100000次),然后查看数组的频率分布

    import numpy as np
    from scipy.stats import geom
    import matplotlib.pyplot as plt
    
    plt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号
    
    if __name__ == '__main__':
        fig, ax = plt.subplots(3, 1, figsize = (10, 10))
        # 调整子图间距
        fig.subplots_adjust(hspace = 0.5)
    
        params = [0.3, 0.5, 0.7]
    
        for i in range(len(params)):
            p = params[i]
            x = np.arange(0, 15)
            # 抽样
            sample = geom.rvs(p = p, size = 100000)
            print(sample)
    
    
            ax[i].hist(sample, color = 'blue', density=True, bins = 50)
            ax[i].set_title('p = {}'.format(p))
            ax[i].set_xlim(0,15)
            ax[i].set_xticks(x)
            ax[i].grid()
    
        plt.show()
    

    运行结果:
    在这里插入图片描述

3. 泊松分布

若随机变量 X X X的分布律为 P ( X = k ) = λ k k ! e − λ , k = 0 , 1 , 2... , P(X=k) = \frac{\lambda^k}{k!}e^{-\lambda},k = 0, 1, 2 ..., P(X=k)=k!λkeλk=0,1,2...其中 λ > 0 , \lambda > 0, λ>0则称 X X X服从参数为 λ \lambda λ的泊松分布,记为 X ∼ P ( λ ) X \sim P(\lambda) XP(λ)

  • 期望: E ( X ) = λ E(X) = \lambda E(X)=λ
  • 方差: D ( X ) = λ D(X) = \lambda D(X)=λ
  1. 画出不同参数下的泊松分布, λ \lambda λ分别为

    上一篇: 5G 网络架构和网络部署 01 - 5G 网络架构的演变趋势

    下一篇: 使用 acme.sh+ZeroSSL 在入口处自动更新免费 https 证书