离散、连续概率分布小结+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中实现将大大加深记忆。

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

人气稀薄 ,急需关爱 。

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

原文地址:https://www.cnblogs.com/scott-lv/p/8733806.html