【轉載自:知乎--愛神的飛刀】
離散、連續機率分佈小結+python中的應用python
本文爲梳理離散、連續分佈的導讀類筆記,大神請繞道,謝謝; 本文閱讀大約須要15分鐘左右; 若您發現文中有錯誤之處,歡迎留言指正,謝謝。
隨機變量:量化隨機事件的函數,將每一個可能的隨機事件結果賦予一個數字; 機率分佈:分佈是指數據在統計圖中的形狀,則機率分佈是指將隨機變量的機率在統計圖中的表現形式; 四種離散分佈:伯努利分佈、二項分佈、幾何分佈、泊松分佈等; 四種連續分佈:正態分佈、冪律分佈、指數分佈、 \beta 分佈等。
# 準備要用到的包 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都是數組,且是一一對應關係。如上是,兩天豎線
如何檢驗一個分佈是否是二項分佈?函數
作某件事的次數n是必定的; n次事件是相互獨立的,並且每次的機率是同樣的,例如每次拋硬幣正面朝上的機率; 每次實驗有且只有兩個結果,p+q=1; 想知道n次中,某一種狀況p或q出現k次的機率。 二項分佈是離散分佈,其機率用機率質量函數pmf計算 指望爲np,方差爲np(1-q)
以上就是二項分佈的特徵,如符合則該分佈是二項分佈。code
二項分佈機率質量函數PMF爲:orm
P(k)=C^k_n p^k (1-p)^{n-k}索引
指望和方差:事件
# 計算機率 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()
如何檢驗一個分佈是幾何分佈?ip
作某件事的次數n是必定的; n次事件是相互獨立的,並且每次的機率是同樣的,例如每次拋硬幣正面朝上的機率; 每次實驗有且只有兩個結果,p+q=1; 求的是第k次作某件事採起的第1次成功的機率
注意與二項分佈的區別是:ci
二項分佈: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()
如何驗證是泊松分佈?
事件是獨立事件; 任意相同的時間範圍內,事件發生的機率相等; 求:某個時間範圍內事件發生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中實現將大大加深記憶。
以上就是本文的所有,謝謝你查看
人氣稀薄 ,急需關愛 。
若是您居然看到了這裏還沒走開,請幫忙多多點贊、收藏哈,謝謝啦朋友們~~