zoukankan      html  css  js  c++  java
  • 离散、连续概率分布小结+python中的应用

    【转载自:知乎--爱神的飞刀】
    离散、连续概率分布小结+python中的应用

    本文为梳理离散、连续分布的导读类笔记,大神请绕道,谢谢;
    本文阅读大约需要15分钟左右;
    若您发现文中有错误之处,欢迎留言指正,谢谢。
    

    前言

    随机变量:量化随机事件的函数,将每个可能的随机事件结果赋予一个数字;
    概率分布:分布是指数据在统计图中的形状,则概率分布是指将随机变量的概率在统计图中的表现形式;
    四种离散分布:伯努利分布、二项分布、几何分布、泊松分布等;
    四种连续分布:正态分布、幂律分布、指数分布、 eta 分布等。
    

    一,离散分布

    1.1 伯努利分布

    # 准备要用到的包
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import scipy.stats as stats
    # 生成一个0,1的数组
    X=np.arange(0,2,1)
    X
    array([0, 1])
    # 用bernoulli分布计算0和1时的概率分别是多少
    p=0.5
    y=stats.bernoulli.pmf(X,p)
    y
    array([ 0.5,  0.5])
    plt.style.use('ggplot')
    f,ax=plt.subplots(figsize=(8,5))
    plt.scatter(X,y,marker='o',color='r')
    plt.vlines(X,0,y,color='y')
    # 设置图像
    plt.title('伯努利分布',fontsize=22)
    plt.xlabel('随机变量',fontsize=15)
    plt.ylabel('概率',fontsize=15)
    plt.show()
    

    关于竖线vline

    vline(x坐标值, y坐标最小值, y坐标值最大值)
    plt.vlines(X,0,y),其中X,y都是数组,且是一一对应关系。如上是,两天竖线
    

    1.2 二项分布(Binomial Distribution)

    如何检验一个分布是不是二项分布?

    做某件事的次数n是一定的;
    n次事件是相互独立的,而且每次的概率是一样的,例如每次抛硬币正面朝上的概率;
    每次实验有且只有两个结果,p+q=1;
    想知道n次中,某一种情况p或q出现k次的概率。
    二项分布是离散分布,其概率用概率质量函数pmf计算
    期望为np,方差为np(1-q)
    

    以上就是二项分布的特征,如符合则该分布是二项分布。

    二项分布概率质量函数PMF为:

    P(k)=C^k_n p^k (1-p)^{n-k}

    期望和方差:

    • 期望:np , n次独立事件预计成功多少次;
    • 方差:np(1-p) , 用于估计数据的波动。
    # 计算概率
    n=5;p=0.5
    x=np.arange(0,n+1,1)#准备随机变量,抛5次关于正面朝上有6种可能
    ylist=stats.binom.pmf(x,n,p)#计算出现各种可能的概率
    ylist
    array([ 0.03125,  0.15625,  0.3125 ,  0.3125 ,  0.15625,  0.03125])
    # 绘图
    plt.style.use('ggplot')
    f,ax=plt.subplots(figsize=(8,5))
    plt.plot(x,ylist,marker='o',linestyle='',color='r')
    plt.vlines(x,0,ylist,color='y')#绘制竖线
    # 设置
    #千万注意%的使用:%d表示替换为整数,%0.2f替换为保留2为的浮点型数字,%s替换为字符串
    plt.title('二项分布:n=%d,p=%0.2f'%(n,p),fontsize=22)
    plt.xticks(fontsize=12)
    plt.xlabel('正面朝上的次数',fontsize=15)
    plt.yticks(fontsize=12)
    plt.ylabel('概率',fontsize=15)
    
    # plt.text:第3个参数一定是文本,若其中有动态数字,一定要用格式化字符串%
    for i in x:
        plt.text(i,ylist[i]+0.006,'%0.5f' % ylist[i],ha='center', va= 'bottom',fontsize=11)
    # ha='center':水平居中;va= 'bottom':垂直方向在底部
    plt.show()
    

    1.3 几何分布(Geometric Distribution)

    如何检验一个分布是几何分布?

    做某件事的次数n是一定的;
    n次事件是相互独立的,而且每次的概率是一样的,例如每次抛硬币正面朝上的概率;
    每次实验有且只有两个结果,p+q=1;
    求的是第k次做某件事采取的第1次成功的概率
    

    注意与二项分布的区别是:

    二项分布:n次中共出现k次的概率
    几何分布:知道第k次才第1次成功的概率
    

    几何分布概率质量函数PMF及期望、方差:

    P(k)=(1-p)^{k-1} p
    期望:1/p , 用于估计多少次后取得第1次成功
    方差: (1-p)/p^2 , 用于估计数据波动大小
    
    # 定义随机变量:计算n=5时,各个k对应的几何分布概率
    x=np.arange(1,6,1)
    p=0.6
    y_geo=stats.geom.pmf(x,p)
    y_geo
    array([ 0.6    ,  0.24   ,  0.096  ,  0.0384 ,  0.01536])
    # 绘图
    f,ax=plt.subplots(figsize=(8,6))
    plt.plot(x,y_geo,marker='o',linestyle='',color='r')
    plt.vlines(x,0,y_geo,color='y')
    # 设置
    plt.title('几何分布:k=[1~5],p=%.2f'% p,fontsize=22)
    plt.xlabel('实验次数',fontsize=15)
    plt.ylabel('概率',fontsize=15)
    plt.xticks(fontsize=12)
    plt.yticks(fontsize=12)
    # 设置数据点标签,注意x从1开始,而y_geo索引从0开始
    for i in x:
        plt.text(i,y_geo[i-1]+0.006,'%.4f'% y_geo[i-1],
                 ha='center', va= 'bottom',fontsize=12)
    plt.show()
    

    1.4 泊松分布(Poisson Distribution)

    如何验证是泊松分布?

    事件是独立事件;
    任意相同的时间范围内,事件发生的概率相等;
    求:某个时间范围内事件发生k次的概率。
    

    概率质量函数PMF和参数

    k:事件发生的次数;
    mu :给定时间范围内事件发生的平均数
    PMF: p(k)=u^k e^{-u}/k!
    期望和方差都是: mu
    
    # 定义随机变量
    mu=2# 已知某路口每天平均发生2次交通事故
    k=4# 求该路口1天发生4次交通事故的概率
    y=stats.poisson.pmf(k,mu)
    y
    0.090223522157741778
    # 定义随机变量列表:0至4次
    x=np.arange(0,k+1,1)
    y_poiss=stats.poisson.pmf(x,mu)
    y_poiss
    array([ 0.13533528,  0.27067057,  0.27067057,  0.18044704,  0.09022352])
    # 绘图展示
    f,ax=plt.subplots(figsize=(10,5))
    plt.plot(x,y_poiss,marker='o',linestyle='')
    plt.vlines(x,0,y_poiss,color='y')
    plt.title('泊松分布:发生0至4次事故的概率分布,均值为:2',fontsize=22)
    for i in x:
        plt.text(i,y_poiss[i]+0.006,'%.5f'%y_poiss[i],
                 ha='center',va='bottom')
    

    二,连续分布

    几种重要连续概率分布

    正态分布
    幂律分布
    指数分布
    eta 分布
    

    接下来重点介绍正态分布,其余分布在大量数据情况下也趋于正态分布。
    因此,理解了正态分布是极其重要的。
    正态分布

    求正态分布的3个步骤

    确定概率范围:如x<3,明确了范围
    计算标准分:标准分=(x-平均值)/标准差
    查表看概率值:根据这个标准分查表
    

    两种情况下的概率

    p(x>3)=1-p(x<3)
    p(2<x<5)=p(x<5)-p(x<2)
    
    import numpy as np
    from scipy import stats
    import matplotlib.pyplot as plt
    plt.style.use('ggplot')
    #定义随机变量
    mu=0
    sigma=1
    x=np.arange(-5,5,0.1)
    x
    array([ -5.00000000e+00,  -4.90000000e+00,  -4.80000000e+00,
            -4.70000000e+00,  -4.60000000e+00,  -4.50000000e+00,
            -4.40000000e+00,  -4.30000000e+00,  -4.20000000e+00,
            -4.10000000e+00,  -4.00000000e+00,  -3.90000000e+00,
            -3.80000000e+00,  -3.70000000e+00,  -3.60000000e+00,
            -3.50000000e+00,  -3.40000000e+00,  -3.30000000e+00,
            -3.20000000e+00,  -3.10000000e+00,  -3.00000000e+00,
            -2.90000000e+00,  -2.80000000e+00,  -2.70000000e+00,
            -2.60000000e+00,  -2.50000000e+00,  -2.40000000e+00,
            -2.30000000e+00,  -2.20000000e+00,  -2.10000000e+00,
            -2.00000000e+00,  -1.90000000e+00,  -1.80000000e+00,
            -1.70000000e+00,  -1.60000000e+00,  -1.50000000e+00,
            -1.40000000e+00,  -1.30000000e+00,  -1.20000000e+00,
            -1.10000000e+00,  -1.00000000e+00,  -9.00000000e-01,
            -8.00000000e-01,  -7.00000000e-01,  -6.00000000e-01,
            -5.00000000e-01,  -4.00000000e-01,  -3.00000000e-01,
            -2.00000000e-01,  -1.00000000e-01,  -1.77635684e-14,
             1.00000000e-01,   2.00000000e-01,   3.00000000e-01,
             4.00000000e-01,   5.00000000e-01,   6.00000000e-01,
             7.00000000e-01,   8.00000000e-01,   9.00000000e-01,
             1.00000000e+00,   1.10000000e+00,   1.20000000e+00,
             1.30000000e+00,   1.40000000e+00,   1.50000000e+00,
             1.60000000e+00,   1.70000000e+00,   1.80000000e+00,
             1.90000000e+00,   2.00000000e+00,   2.10000000e+00,
             2.20000000e+00,   2.30000000e+00,   2.40000000e+00,
             2.50000000e+00,   2.60000000e+00,   2.70000000e+00,
             2.80000000e+00,   2.90000000e+00,   3.00000000e+00,
             3.10000000e+00,   3.20000000e+00,   3.30000000e+00,
             3.40000000e+00,   3.50000000e+00,   3.60000000e+00,
             3.70000000e+00,   3.80000000e+00,   3.90000000e+00,
             4.00000000e+00,   4.10000000e+00,   4.20000000e+00,
             4.30000000e+00,   4.40000000e+00,   4.50000000e+00,
             4.60000000e+00,   4.70000000e+00,   4.80000000e+00,
             4.90000000e+00])
    # 定义概率密度函数PDF
    y=stats.norm.pdf(x,mu,sigma)
    
    # 求一个试试看:y(x<0)的概率密度函数值
    y_0=stats.norm.pdf(0,mu,sigma)
    print(y_0)
    0.398942280401
    
    plt.style.use('ggplot')
    # 画出概率密度函数y
    f,ax=plt.subplots(figsize=(10,5))
    plt.plot(x,y)
    plt.vlines(0,0,y_0,linestyle='--',color='y')
    plt.title('正态分布:$mu$=%.1f,$sigma$=%.1f'%(mu,sigma),fontsize=22)
    plt.xlabel('随机变量:x',fontsize=15)
    plt.ylabel('概率:y',fontsize=15)
    plt.xticks(fontsize=12)
    plt.yticks(fontsize=12)
    plt.show()
    

    亲自动手求 6sigma 的区间

    之前总听说服从正太分布的数据,落在 6sigma 之间的占到99.74%,那么99.74%究竟是怎么来的?该如何得出这个比例?

    正太分布的概率,完全取决于 mu $和 sigma ,现以标准正太分布为例:

    6sigma :即是求P(-3 )
    根据求正太分布概率的步骤,先求出标准分,即3
    查表可知,x=3时概率为0.9987
    带入第1步计算可知,2*0.9987-1=0.9974,即99.74%
    

    三,小结

    注意区分四种离散概率分布的适用情况、概率计算;
    四种连续的概率分布,由于时间的关系,只来得及整理正态分布,后面几个将在日后整理更新到本文中。
    理解为上。在理解的基础上,在python中实现将大大加深记忆。
    

    以上就是本文的全部,谢谢你查看

    人气稀薄 ,急需关爱 。

    如果您竟然看到了这里还没走开,请帮忙多多点赞、收藏哈,谢谢啦朋友们~~

  • 相关阅读:
    RandomAccessFile类
    IO_ObjectOutputStream(对象的序列化)
    IO流_文件切割与合并(带配置信息)
    IO流_文件切割与合并
    IO流_SequenceInputStream(序列流)
    10-stack
    9-queue
    16-两种方法全排列
    8-全排列next_permutation
    15-Call to your teacher(有向图的连通判断)
  • 原文地址:https://www.cnblogs.com/scott-lv/p/8733806.html
Copyright © 2011-2022 走看看