離散、連續概率分布小結+python中的應用


【轉載自:知乎--愛神的飛刀】
離散、連續概率分布小結+python中的應用

本文為梳理離散、連續分布的導讀類筆記,大神請繞道,謝謝;
本文閱讀大約需要15分鍾左右;
若您發現文中有錯誤之處,歡迎留言指正,謝謝。

前言

隨機變量:量化隨機事件的函數,將每個可能的隨機事件結果賦予一個數字;
概率分布:分布是指數據在統計圖中的形狀,則概率分布是指將隨機變量的概率在統計圖中的表現形式;
四種離散分布:伯努利分布、二項分布、幾何分布、泊松分布等;
四種連續分布:正態分布、冪律分布、指數分布、 \beta 分布等。

一,離散分布

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')

二,連續分布

幾種重要連續概率分布

正態分布
冪律分布
指數分布
\beta 分布

接下來重點介紹正態分布,其余分布在大量數據情況下也趨於正態分布。
因此,理解了正態分布是極其重要的。
正態分布

求正態分布的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()

親自動手求 6\sigma 的區間

之前總聽說服從正太分布的數據,落在 6\sigma 之間的占到99.74%,那么99.74%究竟是怎么來的?該如何得出這個比例?

正太分布的概率,完全取決於 \mu $和 \sigma ,現以標准正太分布為例:

6\sigma :即是求P(-3 )
根據求正太分布概率的步驟,先求出標准分,即3
查表可知,x=3時概率為0.9987
帶入第1步計算可知,2*0.9987-1=0.9974,即99.74%

三,小結

注意區分四種離散概率分布的適用情況、概率計算;
四種連續的概率分布,由於時間的關系,只來得及整理正態分布,后面幾個將在日后整理更新到本文中。
理解為上。在理解的基礎上,在python中實現將大大加深記憶。

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

人氣稀薄 ,急需關愛 。

如果您竟然看到了這里還沒走開,請幫忙多多點贊、收藏哈,謝謝啦朋友們~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM